逆向工程思路

说明:
RAX共64位----EAX是RAX的低32位----AX是EAX的低16位----而AH是AX的高8位,AL是AX的低8位;其他寄存器与EAX类似 。

逆向工程思路

文章插图
4.1.3 OD断点
序号
断点名称
原理
适用范围
1
INT3断点
将下断处的指令改为INT3指令(CC),INT3会触发一个异常,OD捕获异常然后再将INT3修改回原指令
代码段(包括DLL的代码段)
2
硬件断点
将下断的指令地址存入DR0-DR3,CPU执行指令时会比较指令地址是否是DR0-DR3中的地址,如果是会主动给od发送异常
代码段
3
内存断点
将下断地址修改为不可读/写,当该地址被试图进行读/写时会触发异常
代码段、数据段
4
内存访问一次性断点
5
消息断点
一个消息的发送中包含句柄和消息编号两个参数
代码段
6
条件断点
当某个寄存器或堆栈段某处等于某值时中断
寄存器、堆栈段
7
条件记录断点
函数断点:
函数断点指对调用某个win32 api函数(比如.)的位置下断点,操作步骤是使用ctrl+n快捷键调出Names窗口里边即是程序所有从dll导入的函数 。找到要下断点的函数(不支持搜索只能自己滚动查找,还算好的是按字母排序),然后在其上右键,点击“Seton every ”此时用户内存空间中所有call该函数(本质上是该函数的地址)的指令都会被设成int3断点 。删除这些断点一样在函数上右键,选择“ all ”即可,当然由于本质是int3断点,所以也可以直接打开断点窗口进行管理 。
4.1.4 od 绕过登录限制演示
在本文使用的示例程序中只有输入给定的用户名登录才能使用,我们这里想不管输入什么都能进入使用 。这里就锁定我们的目标:逼近输入文字被获取并进行比较附近的代码 。
获取文本框内容的函数是,ctrl+n呼出函数窗口,找到,右键选择“Seton every ”
逆向工程思路

文章插图
然后随便在窗口输入一些内容点击登录,比如我这里输“test”
逆向工程思路

文章插图
然后程序就断在了调用处
逆向工程思路

文章插图
此时有很多call和jmp,比较代码是哪不是很明显,但比较代码一定在从这个到弹出错误窗口的这段范围内,我们一边按F8步过直到错误窗口弹出 。最后看到如下
逆向工程思路

文章插图
这样我们就锁定了比较代码应应该在和之间,不过由于函数调用并不是说比较代码就在这段连续的区间内
我们在处下断点,然后不断go to 往前走看是从哪跳到这边来的(或者也可以重新到一步步往后走,看是哪跳到这边来的),经过步步查看后定位到是的jnz跳过去的,可以猜测如果不跳那么就正常进入程序
逆向工程思路

文章插图
在该条语句上右键,选择----“Fill wtih NOPs”
逆向工程思路

文章插图
再次使用test登录,果真可进入程序主界面
逆向工程思路

文章插图
4.2 IDA逼近目标代码
IDA经常被称为用于静态调试,所谓静态调试就是不能运行代码,解析大家都是可以的所以不能运行代码简单可以更解为ida比od少了指令对应程序表现、栈变化、寄存器变化这几项展现能力 。