本帖最后由 xiaoxin520 于 2016-4-4 02:27 编辑
本文作者七少月,文章中很多观点和技术手段为本人原创,转载请注明出处,由于本人技术水平有限,不当之处,还请斧正。
前言:
由于本人一直以来都比较忙,开班、工作等等事情太多,所以很长一段时间没有发帖。其实我确实想看一看,尤其是Unity3d安卓游戏逆向领域有没有更出彩的文章。可能有些不恰当的说,确实这一段时间以来,虽然也有一些Unity3d安卓游戏逆向的优秀文章,如对金庸群侠传X1.0的数据库解密和功能解锁修改,但无论从数量上,还是从难度上,我都难以满意。不知道是愿意共享的人少了,还是觉得U3D逆向技术太简单了,如果是后一种原因,我只想说,U3D在安全开发的投入和技术发展是难以想象的飞速,如U3D把关键函数引向lua,利用Lualib实现C#与LUA交互,不仅实现热更新,也保护了代码,而lua脚本文件则作为资源文件打包混淆。以上是后话,现在最大的问题在于,即使DLL解密脱壳后,我们依然在静态分析DLL。
难以逾越的鸿沟:
本篇技术文章需要一定的U3D安卓逆向基础,没有的推荐看法总的教程,至少你能用reflector把DLL中一个return hp语句修改为return 99999.在之前我们说过,由于U3D底层并不开源,而且DLL运行在安卓上已经是受到了很大限制,所以在给我们逆向带来比普通安卓的dex和so目标更为明确的同时,也让我们逆向手段带来很大拘束。导致的一个结果就是,我们逆向U3D的DLL,只能使用静态分析,通过搜索,然后修改,最后测试。一直以来,我们认为,只要把关键DLL拿到,即使是网游,也可以进行修改。但以后就不是这个样子,可能以后DLL确实是所谓的关键DLL,但就不做保护地摆在那里,都没有什么作用。如果你一直看我U3D逆向的相关文章,这是继U3D把DLL加密加壳阶段的下一个新的阶段,我称为关键DLL无效的阶段。回到本文,我们好像确实很为难,只能使用静态分析仿佛成了我们一道无法逾越的鸿沟。
Unity3d游戏DLL动态调式与HOOK:
能实现对U3D游戏进行动态调试,是我和法总一直以来的愿望。早先,我写过一篇理论指导性的文章《Unity3d游戏动态调试理论框架》。当然,就在那不久之后,里面的思想相继得到了实现。最具代表性的,就是利用IDA动态调试libmono.so,DUMP下来解密后的DLL。但很可