码迷,mamicode.com
首页 > 其他好文 > 详细

OD 实验(十三) - 对一个程序的逆向

时间:2018-10-03 21:24:18      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:ret   about   设置断点   缓冲   eid   bsp   地址   失败   最大数   

程序:

技术分享图片

运行程序

技术分享图片

点击 Start,它就会进行对系统的扫描

技术分享图片

点击 About -> Enter Registration Code

技术分享图片

随便输入一下内容,点击 OK,会弹出该弹窗

用 PEiD 看一下

技术分享图片

该程序是用 Microsoft Visual C++ 6.0 写的

逆向:

 用 OD 载入程序

技术分享图片

右键 -> 查找 -> 所有模块间的调用

技术分享图片

键盘直接敲 getwindowtext

技术分享图片

找到几个 GetWindowTextA,A 为 ASCII 码,W 为 Unicode

右键 -> 在每个调用到 GetWindowTextA 上设置断点

技术分享图片

程序调用到 GetWindowTextA 的地方都会被下断点

技术分享图片

一共下了 3 个断点

另一个方法:

技术分享图片

按 Ctrl+N

技术分享图片

也是键盘直接敲 getwindowtext

技术分享图片

右键 -> 在每个参考上设置断点

技术分享图片

设置完断点之后跑一下程序

技术分享图片

OD 停在该断点处,此时程序的界面都还没出来,这不是我们想要的 GetWindowTextA

把该断点去掉,按 F9 继续运行程序

技术分享图片

又停在了 GetWindowTextA 处,此时什么都还没输入,所以这个也不是我们要的 GetWindowTextA

把断点去掉,按 F9 继续往下跑

技术分享图片

界面出来了,按 About,输入注册码

技术分享图片

点击 OK

技术分享图片

程序停在了这个 GetWindowTextA 处

看一下栈的窗口

技术分享图片

这三个为 GetWindowTextA 函数的三个参数

GetWindowTextA 的三个参数:

hWnd 为指向包含文本的窗口或控件的句柄

lpString 为指定将接收文本的缓冲区的指针。如果字符串和缓冲区一样长或更长,则该字符串将被截断,并以一个空字符结尾

nMaxCount 为指定拷贝到缓冲区内的字符的最大数目,其中包含空字符。如果文本超过这个限制,则它会被截断

hWnd 是获取 Edit 控件,父句柄为 000C05CE,,Buffer 的 值 00C04770 就是字符串存放的地址,这里 nMaxCount 的值为 4

按 F8 往下走

技术分享图片

走到这里,EAX 的值为 4,因为刚才输入的 test 为 4 个字节

接下来的 je 跳转指令是对该字符串是否为空进行判断

之后的那条 je 跳转是判断输入的注册码是否为空

技术分享图片

F8 继续往下走

技术分享图片

这里有个跳转,如果 al 不等于 0 的话将会进行跳转

技术分享图片

跳到该处,之后就是提示成功

此时的 al 为 0,不能直接跳转

技术分享图片

影响 al 的值可能是上面这条 call 指令

可能在这个 call 中进行验证

技术分享图片

下面还有一个一模一样的三条指令,可能是双重验证

F7 步入该 call 指令

技术分享图片

看一下该函数的所有返回指令

技术分享图片

这条 retn 指令之前有个 mov 指令,把 1 赋给 al,就是让 al 不等于 0

技术分享图片

第二个 retn 指令之前有个 xor 指令,把 al 清零,也就是让 al 等于 0

所以我们要在第一个 retn 指令处返回

按 F8 往下走

 技术分享图片

这里有个已实现的跳转

如果跳转的话,就跳过了那个成功的 retn,之后就是失败的那个 retn

技术分享图片

所以不能让它跳转

技术分享图片

修改 SF 让其不跳转

继续 F8 往下

技术分享图片

又有一个已实现的跳转

技术分享图片

如果执行跳转的话,将刚好跳过成功的 retn

所以也不能跳,将 ZF 置 1

继续往下

技术分享图片

这个 jnz 跳转也是跳到相同的位置,将 ZF 置 1,不跳转

继续往下走

技术分享图片

第三个 jnz 跟前面两个一样,ZF 置 1 不跳转

继续往下

 之后还有一个 jnz 跳转指令,跟上面三个情况一样,ZF 置 1,不进行跳转

技术分享图片

继续往下走

技术分享图片

之后就是成功的 retn 的语句了

技术分享图片

出来之后,al 的值就为 1 了

技术分享图片

跳转已实现,将进行跳转

技术分享图片

跳转到成功之前的位置

进行跳转,往下走

技术分享图片

提示注册成功

点击“确定”

技术分享图片

但是这里却显示许可证没有被注册

OD 实验(十三) - 对一个程序的逆向

标签:ret   about   设置断点   缓冲   eid   bsp   地址   失败   最大数   

原文地址:https://www.cnblogs.com/sch01ar/p/9738915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!