有关于criware的一点最终解决方案

AKA cri密钥真正提取法


一直以来cri密钥提取都是手游届的一大乐趣(?),我见到的最早的方法是自己编译了一个so,替换了原始库进行方法代理,从而在中间截获密钥。

在我当初接触hook的时候,正好那时也很方便进行ida远程调试,所以可以看到数据的内存结构,所以写了key-logger。相比起构造so来说简单了许多,[只需要]提取到初始化函数的地址就可以自动读取密钥了。

但直到之前我似乎都没有看到过如何真正静态获取到密钥的方法。


大概上周吧,菜苗又在康新游戏了,我下下来去试了一下,hook没有反应。

我当时的想法是因为没开服所以没有初始化cri引擎,因为界面的按钮并没有声音。

问了双草他上次拆llas是怎么看的,结果他也是so代理法。

于是我就在ida里面翻来覆去的看CriwareInitlizer

在接触了这么多的拆游戏后,包括上次本来计划研究公主焊接的prefab数据进行boss计算的(最后咕了),我现在清楚这俩是干啥的。

简单来讲,bundle里面有三类是代码型的数据,GameObject可以理解为……object(废话),就是一个个的关卡/模型等等之类的。在GameObject下面会有很多的MonoScript,这些script记录了调用类的信息,会在加载bundle时自动初始化这些类。而初始化的参数和数据就在MonoBehaivour里面存着。

所以,GO是根对象,MS是调用的类名,MB是调用的参数。

那么,bundle里面有没有呢?

但是点到那个项目上却弹出了选择程序的窗口,然后我就犯了难。抄起自己的轮子解开后发现没有ClassStructures。

但是我又突然想到,il2cpp是有DummyDLL生成的,虽然我一直都关了。于是打开配置生成了一个然后选那个文件夹


以下为ultimate cracking tutorial

MonoBehaivour位于resources.assets内,不过一般加载时会按照依赖全部加载进来

(安卓上resources.assets被拆散了,建议直接整个文件夹全部加载然后搜索)

3 thoughts on “有关于criware的一点最终解决方案”

  1. 这在2ch的提取板都已经是用了一年多的套路了
    有些游戏都学着清空初始化,改为后赋值来避免这个漏洞

回复 远哥制造 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax