某游戏外挂软件从脱壳到逆向破解(下):暴力破解

0基础系统学习软件安全逆向破解 请联系V:ixiaodi668

接上集:https://www.52xuejishu.com/forum-post/697.html

反调试绕过

这个程序拖入到x32dbg中是会闪退的,造成这种闪退的原因就是:反调试

不是所有的反调试都是由壳导致的,软件开发人员如果懂反调试的技术,是可以把检测调试的代码写在自己的软件中的。

一般常见的就是使用IsDebuggerPresent函数。该函数通过获取进程环境块(PEB)中的BeingDebugged标志来检测进程是否处于调试状态。关于 PEB,我们在 VIP2 第二章就讲到过了:

1-min

2-min

手动绕过反调试:

先找到 PEB 的指针

3-min

然后发现 BeingDebugged 是 1,说明正在被调试

4-min

此时我们修改为 0,然后运行程序:

发现成功跑起来了,OK,这个简单的反调试我们就绕过了~

5-min

有没有简单的方法?

有,x32/64dbg自带修改PEB的功能:

我们把程序拖进去,然后点击隐藏调试器,就会自动把BeingDebugged的值修改为 0

然后程序就可以自动绕过这种简单的反调试了

6-min

破解

初探逻辑

因为该辅助有弹窗,所以我们直接下弹窗断点,然后回溯

7-min

回溯到这一层,发现这里就是错误弹窗的位置

8-min

通过查找引用,找到跳转来源的位置:411322

那么这里可能就是我们要找的关键跳转

9-min

关键跳转

重启程序运行下断测试,果真如此,但是此时上面已经出现了“卡密不存在

10-min

所以从服务器获取数据的代码从逻辑上讲还在上面,我们向上翻一翻:

在这里断下的时候,程序还没有得到服务器的反馈数据

11-min

然后我们单步执行,我们发现单步执行完整个 call 就获取到了卡号不存在的数据

说明这个 call 就是登陆 call

00411194 | E8 A5180000 call ug_dump_scy.412A3E

12-min

登陆call分析

跟进 call 单步,发现走到这里的时候,出现了卡密不存在

说明这个才是内部登陆 call

00412AB8 | E8 5A020000 call <ug_dump_scy.内部登录call(412D17)>

13-min

内部登陆call分析

这样我们打补丁然后再运行,发现程序直接闪退了,说明程序还有合法性校验

合法性校验去除

破解成功

然后弹窗就出来了

5-min

6-min

过了一会记事本的提示就出来了,说明破解成功了~

驱动这个大概率是它自己不兼容该系统导致的

7-min

视频演示

 

总结

该软件的验证系统已经比较成熟,所以仅仅凭借一股脑的冲劲,难免会栽坑

所以,请大家务必跟着我们的内容好好学习,不再踩坑

让您凭借学习到的老师丰富的经验让您也能火眼金睛!

祝大家都能取得不错的成果~

拓展阅读

1.这个程序是什么编程语言开发的?

通过分析字符串我们可以看到BlackMoon,经验告诉我这是易语言,而不是C/C++,为什么?

因为BlackMoon易语言编译器插件,大家以后看到记住就可以了,都是经验

9-min

8-min

另外,从代码整体的格式上也可以盲猜:

这种push 80000301push 80000004经常出现在易语言中,这也是经验之谈

大家如果分析易语言程序分析的多了就知道了

10-min

2.能不能用窗口暴力破解法?

答:这个问题有点荒唐,不如问自己一个问题,它没有窗口你怎么爆破窗口?所以你只能耐心的分析代码,不要以为易语言就只有窗口GUI程序,易语言也是可以开发这种CUI控制台程序的。

其中:

GUICUI 是指可执行程序的“子系统类型(Subsystem)”。

它们的全称是:

缩写 全称(英文) 中文含义
GUI Graphical User Interface 图形用户界面(带窗口的程序,例如 Win32 程序)
CUI Character User Interface 字符用户界面(控制台/黑窗口程序)
请登录后发表评论