逆向工程核心原理第六章

0x00 前言

逆向还是学一学吧,万一有一天就用到了呢。
abex’crackme #1的破解。

0x01 正文

1.试用

运行效果
在这里插入图片描述
点击确定之后
在这里插入图片描述

2.od分析

在这里插入图片描述
我们来一步一步的进行分析。
首先初始状态ESP指向栈底,此时为0018FF84。
EIP则是00401000,其实就是程序运行的地址。
在这里插入图片描述
这里显示的应该是内存空间,可以看到现在栈里是空的。
在这里插入图片描述
F7一下。直接看图,ESP递减,EIP增加

在这里插入图片描述
继续F7
在这里插入图片描述
F7
在这里插入图片描述
F7,这里可以看到push栈结束了,类似于创建了一个数组
在这里插入图片描述
F8,此时会直接显示弹窗。按确认之后进行下一步。
在这里插入图片描述
被框起来的就是改变了的值。
在这里插入图片描述
接着看这里调用了GetDriveType,GetDriveType可以获取目录和盘号的属性。
这里是先push了一个c判断,然后获取属性。
F8一下
在这里插入图片描述
继续F8,此时相当于GetDriveType已经运行完成了。
在这里插入图片描述
继续F8一下,这里是inc esi inc指令就是+1,那么这里就是esi寄存器+1
在这里插入图片描述
继续F8,dec的意思是-1 这里是将eax-1
在这里插入图片描述
F8,jmp 00401021,跳转到00401021位置,但是由于00401021就是下一行,所以这一行代码就是所谓的垃圾代码。
在这里插入图片描述
F8 inc esi 连续两个。就是esi=esi+2
在这里插入图片描述
F8 dec eax eax+=1
在这里插入图片描述
继续F8 cmp eax,esi.
cmp指令的含义就是对两个操作数进行比较,如果一致,ZF被置为1
在这里插入图片描述
这明显是不一样的,Z是0

然后剩下的内容其实都是重复的。

3.破解

这里破解就很简单了

3.1 方法一

直接把je改成jmp,这样就不管一不一样就可以直接跳转了。

3.2 方法二

判断不可能的,直接在0040101D 处写 jmp short 0040103D 就ok了,不用去等判断
在这里插入图片描述

3.3 方法三

下断点,然后动态修改EAX的值和ESI的值一致即可。

3.4 方法四

下断点,cmp之后,把ZF改成1就行。
在这里插入图片描述

可以看到这里是直接跳转了的。在这里插入图片描述

相关推荐
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页