OD初探 2 :暴力破解: TraceMe的破解

工具: FishC OD(点我下载)

样本程序:TraceMe(点我下载

一、 观察程序 && 函数猜测

打开TraceMe,我们可以看到,弹出的登陆框:

首先输入伪造的用户名与密码

点击 Check 后,显然会出现错误的提示:

接下来,我们思考如何利用暴力破解技术,绕过程序的验证机制。而逆向算法,则会在以后提出。

我们通过猜想,可以大致将程序运行机制如下划分:

 

暴力破解旨在修改程序返回值来修改程序下一步执行动作,从流程图可知,我们只需要修改判断算法的返回值即可。

从输入ID与激活码,我们可以得知,判断函数的会接收这两个参数,所以我们从输入开始追踪程序,查看程序运行机制。

程序通常读取文本框内容的字符串用的是以下两个函数:

GetDlgItemTextAGetDlgItemTextW

GetWindowTextAGetWindowTextW

我们可以都试一试,很快找出相关函数

二、 破解过程

打开OD,载入TraceMe:

按下Ctrl+G,搜索 GetDlgItemTextA

我们已经找到了该函数,现在在此按F2下断点,然后按下Ctrl+F2刷新进程,并按下Ctrl+F8自动执行:

执行至登陆界面,程序暂停,我们输入伪造ID 与激活码,注意:激活码应当适当的长

当我们按下Check,程序开始执行,到达到该函数时,程序便会暂停。

我们继续按F8步过并观察,我们可以发现程序将ID与激活码传入参数并计算:

那么下一步就是程序的判断算法了,暴力破解的核心就是直接修改判断函数的返回值,所以我们步过函数,寻找下方的返回值语句

当我们查找到test时,发现他的Z值为0:

继续步过,进入je 语句,我们发现,该值变为 1,并且实现了跳转:

显而易见,这条语句的跳转,即是跳转到激活码错误的语句。

这是就是破解的关键,程序的期望返回值为0,而实际返回值为1,所以造成我们的伪ID无法通过:

因此,我们重新载入,再次执行到 je 修改其Z 值为 0:

可以看到,该语句的跳转成为了未实现:

继续步过,直到其出现提示音,我们可以看到,破解完成:

暴力破解就此完成,之后将实际返回值语句 je 设为nop:

之后保存修改后的程序即可。



猜你喜欢

转载自blog.csdn.net/qq_15458161/article/details/80317794