您的位置:首页 > 其它

逆向入门--简单win32CK逆向手记

2017-09-11 17:25 190 查看
最近入坑逆向不就,这个算是真正意义上的第一个CrackMe遂记录逆向过程

初观界面



一个经典的输入密码并验证的小程序,先直接运行!

随便的输入密码,显然不对,弹框 incurrent 的提示框

开始分析

直接拖入OD,搜索工具搜索 Incurrent 这个字符串



跟着搜索结果,找到Ctrl+G 找到内存位置

在这里我们找到了真相,可以通过反汇编窗口很简单的看到这个。

这段看着逻辑简单清晰,通过 je 跳转到 inCurrent 的MsgBox,

爆破点Found!

那么我们通过直接修改寄存器,或者修改汇编指令成为jnz即可实现对程序的爆破,效果如下



深入分析

因为这个CrackMe是要求拿到用户名和密码的,所以爆破实现是不行的,那么继续 读代码

je的跳转是由于 FZ 这个标志位被置 1 所以发生跳转,那么我们向上找代码,看看在哪里这个寄存器位被置一

由于截图问题哈,这个关键一句没接上。。。

cmp bx,si

这一句就是比较ebx的地位,和esi寄存器的低位,从而根据结果设置了标志位



再往上,我可可以看到 OD 自动注释的关键代码,红色的_vbaVarCmpEq更是说明了一切,很显然是个字符串比较的调用

__vbastrcomp 比较两个字符串,类似于 Window’s API lstrcmp

然后查询函数的refer,得到上述的描述。

重要知识回顾 : 函数是从右往左压栈的,所以最先压入的,是最后一个参数,然后是倒数第二个。

这里,在面的寄存器信息提示窗里面,已经显示出了这个压入栈的地址对应的Unicode的字符串,正是我们输入的“密码”



然后Call 这个函数进行Cmp的比较

其实这里使用了一个投机取巧的方法,cmp 既然是比较那么 比较源,和比较目的必然是在栈中存放,那么咱们找找就好





果然不如所料,在这里就找到了咱们的用户名密码

激动的试一试

bingo!

结果如图



小结

作为自己 的第一次 的CK 虽然不是很完美,但是也算是勉强成功

特别是函数压栈这一块,也是提升了自己的认知

从右向左压栈

返回值永远在eax里

对于win32程序有时候寄存器不够返回值存储,那么后面会压入一个returnBuffer
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  逆向 CrackMe win32