2019-04-16 20,893 ℃
最近一段时间又更新了一下Il2CppDumper,除了支持switch的NSO格式外,最主要的还是完整处理了下MetadataUsage,现在在IDA执行script.py后,F5能看到所调用的实例类,静态类的具体名称了,分析算法和搞些花式修改也更容易了,所以这篇文章也稍微说下一些c#代码在il2cpp里是如何表现的。
实例类和实例变量
public class Test { public int a; // 0x4 }
实例化和操作变量a,在IDA F5
v1 = sub_xxxx(Class_Test); Test___ctor(v1); v1 + 0x4 = 0;
静态类和静态变量
public class Test { public static int a; // 0x0 public static int b; // 0x4 }
操作静态变量a,b,在IDA F5
Class_Test + 0x5C = 0; (Class_Test + 0x5C) + 0x4 = 0;
0x5C这个偏移会根据编译器与环境改变
数组类型变量默认值与初始化
public class Test { public static int[] a = new[] { 7, 4, 6, 3, 4, 5, 7 }; // 0x0 }
静态变量的初始化操作都是在.cctor函数里完成的,所以直接查看Test..cctor(),F5
v1 = j_il2cpp_array_new_specific_0_0(Class_int__, 7); RuntimeHelpers__InitializeArray_xxxx( 0, v1, Field__PrivateImplementationDetails___field_081A99B1B1F17F85FDE62340DEFA3D600530007B, 0); Class_Test + 0x5C = v1;
可以看出初始化的数组长度是7,接着在dump.cs里搜索初始化时用到的”081A99B1B1F17F85FDE62340DEFA3D600530007B”
可以看到默认值的偏移是0xA153F3,这个偏移就是global-metadata.dat里的偏移了,定位到这个位置就可以根据长度得到默认值了
惯例
下载地址
Latest Build版本
源码
下面这两个教程讲解了如何在il2cpp里修改实例类,静态类变量,调用游戏函数等操作
https://iosgods.com/topic/65529-instance-variables-and-function-pointers/
https://iosgods.com/topic/70716-static-members-and-multithreading/
大佬,问个问题,使用il2cpp是不是除了类名变量名函数方法名这些可以通过这个工具拿出来,具体的算法只能看IDA伪代码吗?
是的
大大您好,想請教libcocos2dcpp.so型的遊戲,要怎麼dump呢?或是有沒有方法可以提取它的dll檔呢?
4.6.0版本,某个手游这里不知道怎么加固了游戏,dump首先显示要求输入unity版本 Input Unity version
我也是 某个手游要求输入unity版本 怎么回事哦 不知道输入什么
打开其他资源文件, hex查看,头部就有unity的版本号
怎么输入……我看到了,但是输入都是不支持。2019.2.17f1
我用CrackXI只破解了Binary,然后把metadata一起搞。要输入版本号,找到版本号后输入,依旧出现错误,不能用Auto模式 ……
可以了,谢谢,在你git上下载了最新5.2.6,一用直接dump,很好。直接跑ida.py,加载script.json即可。但是stringliteral.json没太搞懂这字符串是干啥的,跑不进IDA
解决了吗
怎么用ida 静态分析出 静态成员的初始值?private static string Name =”help”
查看静态类的.cctor函数
好的找到了谢谢 ,类似这种调用方法的偏移值怎么能找到对应的方法,现在我只能靠猜。。。
v5 = Class_System_Text_UTF8Encoding;
v6 = (*(int (__fastcall **)(int, int, _DWORD))(*(_DWORD *)v5 + 280))(v5, v3, *(_DWORD *)(*(_DWORD *)v5 + 284));
还有泛型也是用这样的偏移调用的。
c#的虚函数转为c++也是虚函数,没法确认具体调用的是哪一个,只能通过上下文判断
虚函数,大概还是能猜猜,用偏移值去虚表里面对下,只要知道一个方法的相对位置,这个类基本能找到。
有个更头痛的,类似这种 方法是泛型方法的 public static void Helper(T1 data, int sendtype, System.Action callback)
进去之后看到的是
(***(int (__fastcall ****)(_DWORD *, int, int, int, _DWORD))(v5 + 24))(v9, v4, v7, v6, **(_DWORD **)(v5 + 24));
v5+24 这样的偏移,而且基本上参数是T这种泛型都会变成 +24偏移,V5 在 .bss 段里面的值居然是 当前这个方法,之后静态分析就死循环了,不知道这24的偏移怎么找。。。只能用调试分析了吗?
Il2CppDumper-v4.5.11模式2 Dump过程中报错:“Process is terminated due to StackOverflowException.”,无法创建新的堆栈防护界面
额,原来是global-metadata错了
链接:https://pan.baidu.com/s/18NMkGlsqTexUe-LsX2SbYg
提取码:fgbl
il2cppDumper-崩坏三3.3版本专用 不谢有问题联系QQ1404265140
作者问个问题,我通过metadata.dat 和 dll dumper出来 一系列的dll后, 然后将这些dll 放入 reflector 里查看他的内容, 发现只能看函数名变量结构这些,函数的具体内容无法查看,请问下是本身就不支持,还是dll 有问题?
dll就只包括这些,内容和dump.cs差不多是一样的。函数需要用IDA之类的软件反编译so去看。
嗯 多谢了,另外再请教下, 我用ida运行 script.py的时候没起效,发现是基地址不对,然后根据 cs文件中的RVA和 off算了基地址,接着Rebase 了基地址,然后重新运行 script.py 这次有不少函数生效了,可是还有很多函数出现了分析错误 请问这是怎么回事啊。
ooooo哦哦哦哦
这个unity的版本号怎么看啊
請教一下,dump的時候出現“Input Unity version (Just enter the first two numbers eg. *.*, ****.*):”的字串是什麼原因?
直接改类属性可以实现很多没有暴露接口函数的功能
不过直接去查具体的类属性的话得开好几个dump轮流看
虽然还没用最新的工具,不过这次更新对于我这种改法来说是天大的福利吧
感谢p大
你知道如何下载游戏数据吗?
大大,
请教一下,
公主连结的图片有办法可以解包吗@@?
求大大教学(跪
来晚了,继续为P大打call!
所以大小姐什么时候回坑ff14啊
抢个板凳
惯例沙发,大小姐最棒了