0基础系统学习软件安全逆向破解 请联系V:ixiaodi668
接上集:https://www.52xuejishu.com/forum-post/697.html
反调试绕过
这个程序拖入到x32dbg中是会闪退的,造成这种闪退的原因就是:反调试
不是所有的反调试都是由壳导致的,软件开发人员如果懂反调试的技术,是可以把检测调试的代码写在自己的软件中的。
一般常见的就是使用IsDebuggerPresent函数。该函数通过获取进程环境块(PEB)中的BeingDebugged标志来检测进程是否处于调试状态。关于 PEB,我们在 VIP2 第二章就讲到过了:


手动绕过反调试:
先找到 PEB 的指针

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

此时我们修改为 0,然后运行程序:
发现成功跑起来了,OK,这个简单的反调试我们就绕过了~

有没有简单的方法?
有,x32/64dbg自带修改PEB的功能:
我们把程序拖进去,然后点击隐藏调试器,就会自动把BeingDebugged的值修改为 0
然后程序就可以自动绕过这种简单的反调试了

破解
初探逻辑
因为该辅助有弹窗,所以我们直接下弹窗断点,然后回溯

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

通过查找引用,找到跳转来源的位置:411322
那么这里可能就是我们要找的关键跳转

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

所以从服务器获取数据的代码从逻辑上讲还在上面,我们向上翻一翻:
在这里断下的时候,程序还没有得到服务器的反馈数据

然后我们单步执行,我们发现单步执行完整个 call 就获取到了卡号不存在的数据
说明这个 call 就是登陆 call
00411194 | E8 A5180000 call ug_dump_scy.412A3E

登陆call分析
跟进 call 单步,发现走到这里的时候,出现了卡密不存在
说明这个才是内部登陆 call
00412AB8 | E8 5A020000 call <ug_dump_scy.内部登录call(412D17)>

内部登陆call分析
这样我们打补丁然后再运行,发现程序直接闪退了,说明程序还有合法性校验
合法性校验去除
破解成功
然后弹窗就出来了


过了一会记事本的提示就出来了,说明破解成功了~
驱动这个大概率是它自己不兼容该系统导致的

视频演示
总结
该软件的验证系统已经比较成熟,所以仅仅凭借一股脑的冲劲,难免会栽坑
所以,请大家务必跟着我们的内容好好学习,不再踩坑
让您凭借学习到的老师丰富的经验让您也能火眼金睛!
祝大家都能取得不错的成果~
拓展阅读
1.这个程序是什么编程语言开发的?
通过分析字符串我们可以看到BlackMoon,经验告诉我这是易语言,而不是C/C++,为什么?
因为BlackMoon是易语言编译器插件,大家以后看到记住就可以了,都是经验


另外,从代码整体的格式上也可以盲猜:
这种push 80000301、push 80000004经常出现在易语言中,这也是经验之谈
大家如果分析易语言程序分析的多了就知道了

2.能不能用窗口暴力破解法?
答:这个问题有点荒唐,不如问自己一个问题,它没有窗口你怎么爆破窗口?所以你只能耐心的分析代码,不要以为易语言就只有窗口GUI程序,易语言也是可以开发这种CUI控制台程序的。
其中:
GUI 和 CUI 是指可执行程序的“子系统类型(Subsystem)”。
它们的全称是:
| 缩写 | 全称(英文) | 中文含义 |
|---|---|---|
| GUI | Graphical User Interface | 图形用户界面(带窗口的程序,例如 Win32 程序) |
| CUI | Character User Interface | 字符用户界面(控制台/黑窗口程序) |

![表情[yangtuo]-学技术网](https://www.52xuejishu.com/wp-content/themes/zibll/img/smilies/yangtuo.gif)

