去除Steam中Unity单机游戏的联网登录验证(Mono&IL2CPP)
目前Unity的游戏主要分为Mono和IL2CPP这两种,最主要的区别就是看游戏目录,如果有Assembly-CSharp.dll这个Dll则该游戏使用的是Mono虚拟机,否则就是使用IL2CPP。
steam游戏的本体可以在 xxx\steamapps\common\游戏名字\
找到。
Mono
使用Mono虚拟机的unity游戏,它的核心逻辑都是写在Assembly-CSharp.dll这个Dll里,所以我们可以使用(dnspy)[https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8]进行反编译,并且找到SteamManager这个类。
然后修改Awake这个函数最方便的就是修改方法,如果不行就直接修改IL指令和后续的IL2CPP修改汇编类似。
替换游戏目录下的Assembly-CSharp.dll(记得备份原来的)即可。
IL2CPP
使用IL2CPP作为跨平台虚拟机就比Mono稍微麻烦一点,我主要使用到了(IL2CPPDumper)[https://github.com/Perfare/Il2CppDumper/releases/tag/v6.7.6]和IDA,先将游戏目录下的GameAssembly.dll(安卓的为libil2cpp.so)和游戏_data\il2cpp_data\Metadata\global-metadata.dat
复制到同一目录。
执行命令行Il2CppDumper.exe ,得到几个json和il2cpp.h。
使用IDA打开GameAssembly.dll执行ida_with_struct_py3.py(在Il2CppDumer目录下)脚本,分别载入以下json和h文件,即可获得该DLL的符号信息(感觉类似pdb的作用)。
同样找到SteamManager.Awake这个函数,直接Hex修改函数头使其直接返回,即可绕过验证。
最后保存并替换原始的GameAssembly.dll(记得备份)。
声明
以上内容仅为Unity游戏逆向和Il2CppDumper的学习笔记,仅供学习参考,切勿用于违法违规行为。
老师您好,按照您第二个方法我弄到最后找不到那个函数,可以具体指导下吗,是unity单机游戏,需要网易账号登录,是IL2CPP模式
需要网易账号登录的应该是网易做了保护需要具体分析
您好,IL2CPP版本有点没听懂呢,能详细讲解下吗,谢谢
和Mono的类似,其实就是Il2CppDumper,dump出相关的符号,再结合IDA把检测函数给修改掉