Closed krulci closed 1 year ago
- 我没有用过Il2cppInterop,也不知道它的工作原理,但是il2cppdumper生成的rva肯定是正确的。
- 上个问题我只是随手提下,没想到你居然真的想要修复dump的dll。。。我这里详细一点讲下好了 首先,修复从已经运行起来的游戏dump出来的dll基本是不可能的,因为运行后内存中的数据就已经发生了改变,比如一些数据已经完成初始化,当你运行dump的dll遇到已经初始化或者改变的数据,自然就会报错。 所以传统的脱壳方式就是在你需要脱的dll载入后调试走到真正的入口点(OEP),此时壳的代码已经跑完,并且原本dll的代码还没有真正开始运行,dump后就可以保证数据跟原始dll基本是一样的,一般选择用Scylla dump后就会顺带修复IAT。不过dll除了需要修复iat你还需要重定位表(.reloc),这样才算脱壳完成。 关于找oep,你可以试着用一些脱壳脚本看看。
我们这里做了几个尝试
1)我们修复了IAT,但还是会获得Failed to load IL2CPP。应该是你说的.reloc,这个又要怎做呢?我这里上传一下用Scylla修复IAT的
https://drive.google.com/file/d/10tS6Yonl8Hamrm4WXffVaPhCV0MqH6RX/view?usp=share_link
2)另外每次运行地址是否会不一样?我们因为不知道要怎么正确脱壳
目前正在尝试的思路是:
改了下你的Zygisk-il2cppdumper让他可以在DMM端在runtime dump
之后的dummy让他可以给il2cppinterop生成unhollowed
后续在加载mod框架
这样让整套工序都在同一个实例
可是Zygisk-il2cppdumper好像只能dump dump.cs
这个有啥办法吗?
version.dll
之类的就行pseudo-version-dll补充一点,OEP应该是0x2499E4
,可以通过搜索48 89 5C 24 08 48 89 74 24 10 57 48 83 EC 20 49 8B F8 8B DA 48 8B F1 83 FA 01 75 05
得到
补充一点,OEP应该是
0x2499E4
,可以通过搜索`48 89 5C 24 08 48 89 74 24 10 57 48 83 EC 20 498B F8 8B DA 48 8B F1 83 FA 01 75 05`得到
感谢解答。 想做这个主要是因为想要使用后续的HarmonyX工具。 这库有不少其他人做的通用工具如翻译工具。 目前我已经确认使用正常的il2cppdumper获得的dummy是可以给后续工具(il2cppinterop,HarmonyX)使用做patch,测试的HarmonyX patch也成功触发了。 另外Zygisk那个主要是想要找个方法可以在游戏运行时生成dummy给后续工具使用,照样方便长期版本变动使用 目前mmhook移植给DMM端只能dump dump.cs 你前面说的global-metadata.dat缺失,这个是何意思?是没有办法抽取的意思吗? 我们目前不清楚是修复Zygisk使其可以dump dummy比较简单还是有其他方法可以像CE那样找到GameAssembly.dll的区块dump内存,之后在写个脚本合并分区修复section然后传给il2cppdumper比较简单 目前我都是开了后在il2cppinterop执行前手动用CheatEngine抓了后在外执行il2cppdumper处理后才继续执行的
Zygisk-il2cppdumper的原理就是只通过api而不依赖global-metadata.dat进行dump
请注意:如果你没有提供以下所有信息我将会直接无视并关闭这个issue