免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
工具下载:
链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3
提取码:6tw3
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:33.x86游戏实战-喊话CALL
之前分析的时候,ctrl+f9之后游戏会弹一个框,然后点了弹框里的确定游戏就会崩溃,然后在弹框的函数里打断点,反到调用弹框的位置发现它附近都是加密混淆的代码,然后当时就没搞,现在就要搞它,跳过这种位置
然后这个游戏只要打硬件访问断点,它就会被检测,然后弹框,然后退出游戏,接下来就用硬件访问断点来触发游戏检测,然后来分析绕过崩溃弹框的方法
接下来打开CE,随便搜索一个值
然后在这么多数据里随便找一个,这里就用下图红框的地址
然后打开OD并附加到游戏,然后在OD内存区
然后先跳转到MessageBoxW函数(之前找的,游戏用的MessageBoxW函数弹的框)里打断点,这里有个东西MessageBoxA和MessageBoxW函数是操作系统提供,其它程序把它改了,会影响我们逆向,所以在逆向之前把其它不用的软件关一关,比如加密程序、加密的视频播放器
在下图红框位置打断点
然后在CE中找到内存地址打硬件写入断点(这个游戏几乎所有内存打硬件写入断点都会被检测到)
一下硬件写入断点就弹框,然后崩溃,如下图
然后点了弹框里的确定,MessageBoxW里的断点就会触发
然后取消断点,按F8,然后就会来到下图位置,也就是之前看到有代码混淆、VM的代码
然后这种怎么分析?代码没法看,运行就崩溃,怎么办?怎么才能绕过?可以绕过的关键代码肯定就在附近,怎么找?这里就用到了栈,在调用函数的之后,也就是在执行call的时候,它会把call的下一行的代码放到栈里,这就有了突破口,所以接下来找栈里的数据,找call下一行的地址,如下图有返回到什么来自什么,这种一般就是call下一行的地址(不是100%准确,只是一般是这样)
然后右击它选择反汇编窗口中跟随
然后就来到了下图位置
然后下图红框是一个条件跳转,它正好跳过崩溃弹框的函数,它很满足检测的写法,检测到自身被入侵,执行代码的时候去判断是否有入侵,有就去执行崩溃函数,下图有cmp有je很明显,cmp判断有没有被入侵,je被入侵了就不跳转,不跳转就会执行崩溃弹框,没入侵就跳转
然后je的硬编码是0x74,然后0x74 0x5这意思是跳5个字节
然后把0x74改成0xEB,也就是jmp,jmp执行是无条件跳转指令(只要执行就跳转)
然后记住地址,也就是0x755B88这个地址,然后OD右击选择下图Detach,解除附加
然后再回到CE,这时游戏崩溃了,打开游戏使用CE附加,如下图操作
然后以十六进制显示
十六进制显示之后就是0x74,也就是je
然后双击1位置,然后写EB也就是jmp的硬编码,然后点确定
点了确定之后,这时OD下硬件写入断点就不会触发崩溃弹框了
改了之后,通过OD
然后再随便找一个地址
然后再下硬件访问断点
然后就会发现不会崩溃弹框了,到这就绕过了检测
标签:x86,XXX,然后,弹框,跳转,崩溃,34,断点,游戏 From: https://blog.csdn.net/qq_36301061/article/details/140937248