2018-03-31 10,554 ℃
这次是第二次写它了,上篇文章讲的也是这玩意,不过这次它加了个新东西,直接暴力dump dll的话会发现method code还是加密的,原本这种情况可能需要翻下跟method相关的代码对比一下,不过可惜的是它使用的是Hook形式的加密,嗯,这是个略蠢的做法,因为只需要搜索一下0x04 0xF0 0x1F 0xE5(LDR PC, [PC, #-4]),就能很容易发现
mono_image_open_from_data_with_name不用说都知道是DLL解密的,那么mono_metadata_parse_mh_full就是method code解密的。
这两个函数最后都会调用libNetHTProtect.so来解密,不过估计是用了ollvm之类的混淆工具,相关函数的控制流图看着就想直接右键回收站,所以就不考虑还原算法,用个简单的方式来解密:注入一个so调用相关函数。
mono_image_open_from_data_with_name
直接参照源码调用mono_image_open_from_data_with_name就行,写出返回值的raw_data就能得到解密后的DLL
mono_metadata_parse_mh_full
由于mono_metadata_parse_mh_full其中一个参数不太好构造,所以直接选择调用libNetHTProtect.so里的解密函数,分析以后得到解密函数的原型是void decode(char *ptr, MonoMethodHeader *mh)其中ptr指向method的开头,MonoMethodHeader只需要code_size和code两个成员就够了,接下来就是要得到所有method的这些信息。
打开dnspy定位到PE – 存储流#~ – Method表,看看表的起始位置,然后循环读取每列,列的信息在dnspy的16进制窗口里都有详细说明,计算RVA-text段的虚拟地址(0x2000)+物理地址(0x200)得出偏移,参考一下mono_metadata_parse_mh_full函数对tiny和fat的method header做个分别处理,就能构造好code_size和code,然后调用函数解密,最后把code写回DLL里去就大功告成了~
大神你好,能不能通过反射去修复method呢? 可行的话 岂不是通用了,没NetHTProtect什么事了
反射修复?怎么个修复法?你要说注入其他dll反射修改的话,倒是可行的
我就是注入了dll,经测试:读取到的指针内容与dnspy中显示的函数体竟然不一致,也不知道为什么,难道需要其他处理?
如果函数已经被JIT编译过指针指向的就是native代码了,如果还没被jit编译过具体内容是什么我也没验证过。
大佬,我已经把网易多大的dll方法里面代码进行完全还原处理了,然后游戏放回去不读取那个解密过的dll。大佬有没有方案。
请教一下易盾加固如何还原处理的?求教一下 , 万分感谢,困扰好久了。
联系方式多少
我差不多解决了网易DLL还原和去搞事情。可以加qq交流交流。具体给个扣扣。我加你。
重金求方法,我的QQ 363-306-041
Perfare大佬 ,我这边也有款易盾加密的游戏,当我得到dll镜像和方法地址,去调用mono_metadata_parse_mh函数,游戏会崩溃。不知是何原因,想请大佬帮下忙(谢谢)。
这个当然只能你自己解决,我怎么知道你干了什么。。。
大佬可有看过网易最新的保护,它魔改了mono,使用自己的一套方法来解析文件。正常结构dll,mono不认了。所以游戏把整个安装包内的dll,都加密了。大佬可有啥对应的解决方法。
闪退问题解决了吗?我们交流一下 QQ 363-306-041
是的,已经解决了,不过易盾升级了。
方便留联系方式吗,想了解易盾
I can’t find Mono_image_open_from_data_with_name because libmono.so is half-encrypted it seems. Then what function to hook?
The game is Legend of Dynasty
Sorry i’m not chinese speaker
一
这篇内容分析的是libNetHTProtect.so 这个文件吧,libNetHTProtect.so需要先脱壳处理吧?请问楼主是如何快速脱壳的?多谢
博主是不是卖fgo外挂的人头目啊,小心被查水表!
大神,怎么确定mono_metadata_parse_mh_full方法中那一段代码调用了libNetHTProtect的代码
直接就能看出来啊
我是一个新手,能给个例子吗?
新手就别搞这玩意了,这玩意不适合新手
好,算了吧
void decode(char *ptr, MonoMethodHeader *mh) 这个函数如何找到的,libNetHTProtect需要反混淆?
“分析以后得到”
P大,为谁而炼金4.0也用上了这个壳,ida有反调试,gg直接dump内存会强制重启游戏怀疑有防dump,看到一篇文章说运行的内存在/proc/pid/map_files里,但是我模拟器和手机都没找到这个文件夹…这种情况下还有啥途径可以暴力dump么,谢谢!
FGO也是这样,打开GG会直接闪退,你可以试试gg设置自动暂停游戏,这样可以dump内存,然后根据GG输出的MAP查看各so对应的位置,不过目前我还没干掉fgo的签名验证以及修复DLL……不知道这样dump出的DLL可不可以打包回去用,仅供参考。
谢谢解答,这游戏GG自动暂停也会闪退…不知道什么鬼…v
有偿帮你解决你说的那些东西
兄弟怎么联系q524369378
大神您好,关于这个游戏method code的加密方式我找了一些比较新的资料,据说是XTEA加密,得到这一点后我在libtpnSecurity.so里找到了关于XTEA加密的函数,在想能不能通过对这个netHTProtect的壳中查找对该加密函数的调用来直接获得XTEA的key,这样处理起来应该可以方便很多。
但是目前我在这个壳里还没找到对它的调用….动态调试的话这游戏会弹出,应该还要干掉反调试,想问问大神这个思路可行吗?如果可以的话我就试试看了。因为是新手一枚,所以对ollvm和so文件之间的调用不太熟悉,只知道可以通过IDA动态查看,万一ollvm能让IDA看不出调用关系的话,就没办法了~
如果你确定算法和关键函数的话,可以考虑用Hook的方式来截取key,也能绕过反调试,不过我还是觉得注入调用解密函数是比较轻松的做法
好的,非常感谢大神解答
新手个屁,就是做外挂然后卖钱的吧,博主别告诉这堆做外挂的骗子,骗人知识然后拿去做外挂赚钱!
小白看不懂啊,期待大大出一个工具啊
3.6.6版 鎖鏈戰記日版 get_ATK()應該在? 請你幫忙…
请问 某讯的游戏ida附加不上,修改器也附加不上, 所以通过hook mono_image_open_from_data_with_name来获取dll,但是发现一个问题 hook的时候没有发现libmono.so的调用 也就没触发这个函数? 加密应该是走这个函数的 为啥hook不到?望大佬指点一下。(纯粹为了学习)
我们仍未知道那天看见的NetHTProtect到底是谁家的壳。
netease 云盾
所以B站自己不行,找网易去做加密