对抗某讯手游保护解密U3D脚本DLL

          上篇的Unity3d DLL通用解密方法分享后,有同学反馈说,某讯的手游使用烧饼修改器搜索内存会强制退出。去年看的时候还没有反修改器功能的,应该是后来有功能升级了。

       针对这种反修改器搜索的情况,我们来研究个新的对抗方法。这个方法相比上一个稍微复杂一点,不过如果有一定逆向基础,也是比较浅显易懂的。当然也可以通过zygote中转DLL进去HOOKmono_image_open_from_data_with_name方法来解密,不过门槛相对比较高。

       先思考一下他反修改器搜索的原理,必定是通过某个线程来检测修改器的,如果把所有线程都给卡住,他的检测也就失效了。

       如何把线程卡住呢?有个比较简单的方法,就是用IDA attach到游戏上。

       attach上去后,再打开烧饼修改器,再搜索就正常了。

       

      搜索是正常的了,还能继续使用memdump来dump内存么?先来试一下

      

      会提示ptrace attach failed,由于IDA已经attach到该游戏进程,就不能再被其它进程ptrace了。尝试pid使用线程tid,也是一样的提示。基本上memdump的方法,这里就不用再用了。

     从烧饼修改器搜索9460301获取到的地址中选取一个,在IDA的Hex View窗口GO到该地址。如下图所示

     

        能看到这是一个标准的PE文件,就是待DUMP的DLL内存了。

        很显然,写个IDC脚本就可以把这个DLL给拷贝出来了, 这里贴一下IDC脚本。

auto currentEA = ScreenEA();
auto lastRawSize = Dword(currentEA+0x1d8);
auto lastRawOff = Dword(currentEA+0x1dc);
auto dllSize = lastRawSize+lastRawOff;
Message("u3d dll size:%d\n",dllSize);
if(dllSize > 2000000)
{
    auto fp = fopen("d:\\u3d.dll","wb");
    if(fp!=0)
    {
    savefile(fp,0,currentEA,dllSize);
    fclose(fp);
    }
}
       

       由于这里的DLL脚本最小3M以上,IDC脚本里加了个大小判断,小于2000000的就不DUMP了。窗口如下图:

       

      几个地址尝试一下就可以把这两个DLL脚本DUMP下来

      拖到Reflector里

     

      可以正常解析,并自动识别原始DLL名字

      这个方法可以过掉带有修改器对抗的手游保护,对于没有修改器检测的U3D也是通用的。

     (有兴趣的同学可以关注我的微信公众号:sybaohu,或者加入QQ群:606228104)



猜你喜欢

转载自blog.csdn.net/justFWD/article/details/60466237
今日推荐