Il2CppDumper v4.4.2

2019-04-16 20,892 ℃

程序已更新,有任何问题请去最新文章下留言

最近一段时间又更新了一下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版本

源码

GitHub

下面这两个教程讲解了如何在il2cpp里修改实例类,静态类变量,调用游戏函数等操作

https://iosgods.com/topic/65529-instance-variables-and-function-pointers/

https://iosgods.com/topic/70716-static-members-and-multithreading/

Il2CppDumper v6.1.0

距离上次在博客发布都要快一年了,这次因为又添加了一个新功能,所以在博客介绍一下。 ida脚本现在分为“ida.py”和“ida_with_struct.py”两个,使用“ida_with_s...

阅读全文

双生视界Live2D提取

总算是回到家了,差点就要把这篇文章咕掉了。 在github上有人提双生视界Live2D解出来的文件载入显示有问题时,UnityLive2DExtractor的代码还没写完,所以先用...

阅读全文

UnityLive2DExtractor

摸了好久终于是把这玩意摸完了。 程序在原本AzurLaneLive2DExtract基础上,除了一些bug修复和细节完善,最主要的是实现了physics3.json的还原,这样其他游戏...

阅读全文

31 条评论

  1. 大佬,问个问题,使用il2cpp是不是除了类名变量名函数方法名这些可以通过这个工具拿出来,具体的算法只能看IDA伪代码吗?

  2. 大大您好,想請教libcocos2dcpp.so型的遊戲,要怎麼dump呢?或是有沒有方法可以提取它的dll檔呢?

  3. 4.6.0版本,某个手游这里不知道怎么加固了游戏,dump首先显示要求输入unity版本 Input Unity version

    1. 我用CrackXI只破解了Binary,然后把metadata一起搞。要输入版本号,找到版本号后输入,依旧出现错误,不能用Auto模式 ……

    2. 可以了,谢谢,在你git上下载了最新5.2.6,一用直接dump,很好。直接跑ida.py,加载script.json即可。但是stringliteral.json没太搞懂这字符串是干啥的,跑不进IDA

  4. 怎么用ida 静态分析出 静态成员的初始值?private static string Name =”help”

    1. 好的找到了谢谢 :mrgreen: ,类似这种调用方法的偏移值怎么能找到对应的方法,现在我只能靠猜。。。
      v5 = Class_System_Text_UTF8Encoding;
      v6 = (*(int (__fastcall **)(int, int, _DWORD))(*(_DWORD *)v5 + 280))(v5, v3, *(_DWORD *)(*(_DWORD *)v5 + 284));
      还有泛型也是用这样的偏移调用的。

    2. c#的虚函数转为c++也是虚函数,没法确认具体调用的是哪一个,只能通过上下文判断

    3. 虚函数,大概还是能猜猜,用偏移值去虚表里面对下,只要知道一个方法的相对位置,这个类基本能找到。
      有个更头痛的,类似这种 方法是泛型方法的 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的偏移怎么找。。。只能用调试分析了吗?

  5. Il2CppDumper-v4.5.11模式2 Dump过程中报错:“Process is terminated due to StackOverflowException.”,无法创建新的堆栈防护界面

  6. 链接:https://pan.baidu.com/s/18NMkGlsqTexUe-LsX2SbYg
    提取码:fgbl
    il2cppDumper-崩坏三3.3版本专用 不谢有问题联系QQ1404265140

  7. 作者问个问题,我通过metadata.dat 和 dll dumper出来 一系列的dll后, 然后将这些dll 放入 reflector 里查看他的内容, 发现只能看函数名变量结构这些,函数的具体内容无法查看,请问下是本身就不支持,还是dll 有问题?

    1. dll就只包括这些,内容和dump.cs差不多是一样的。函数需要用IDA之类的软件反编译so去看。

    2. 嗯 多谢了,另外再请教下, 我用ida运行 script.py的时候没起效,发现是基地址不对,然后根据 cs文件中的RVA和 off算了基地址,接着Rebase 了基地址,然后重新运行 script.py 这次有不少函数生效了,可是还有很多函数出现了分析错误 请问这是怎么回事啊。

  8. 請教一下,dump的時候出現“Input Unity version (Just enter the first two numbers eg. *.*, ****.*):”的字串是什麼原因?

  9. 直接改类属性可以实现很多没有暴露接口函数的功能
    不过直接去查具体的类属性的话得开好几个dump轮流看
    虽然还没用最新的工具,不过这次更新对于我这种改法来说是天大的福利吧
    感谢p大

  10. 大大,
    请教一下,
    公主连结的图片有办法可以解包吗@@?
    求大大教学(跪