tuts4you-lena151-Crackme-tutorial15

一、前言

(一)、目标

本次需要破解的是一个ReserReverseMe程序,我们需要去处打开程序和关闭程序时的的弹窗,要使用内嵌补丁的方式。

 (程序)     (弹窗)

(二)、工具:x32dbg;

二、破解过程

(一)破解过程

1.载入程序,等程序第一个弹窗出现后,立即暂停程序,查看调用堆栈,如下图

双击红框内的地址,来到以下区域,对这个跳转下断点


重启程序,验证弹窗是否在这产生的,首先到达断点,单步执行到0042039A处,弹窗出现。


2.但这个程序比较特殊,不能单纯修改跳转来避过弹窗,因为主界面的弹出,也要经过这个跳转,之前我修改了这个跳转,主界面也不弹出了。。。。

3.尝试了F7步入这个函数,但是它的内部逻辑有点复杂,所有另辟蹊径,我观察到程序第一次进入这个跳转的时候是弹窗,第二次进入这个跳转时是主界面,第三次是弹窗,所以解决这个问题的思路就是内嵌入补丁,利用汇编语句来控制是否进行跳转。

4.因此,首先我们需要寻找一个空白区域的地址,来进行存放计数器和插入代码,先查找内存布局。


寻找一个具有w权限的节区,这里我选择的是data节区。


在上面红框处,设置一个硬件断点,在重新运行下程序,看程序是否会使用到这个地址,经过测试,不会使用。

5.接下来删除断点,插入代码,使用x32dbg的插件multiasm。

首先修改跳转,这里注意,我们的跳转占用了5个字节,会把后边的一条语句给覆盖,因此我们需要将那句语句往后移动到我们的代码洞附近。


在插件multiasm输入以下代码


6.保存,测试,弹窗消失。

三、总结

1、代码注入一般在data节区,因为它的characteristics
2、在内存地图的节区里面寻找代码洞
3、找一个空的字节来放计数器指针,利用代码洞来存放它
4、在计数器的位置下一个硬件断点,运行下程序,检查下程序会不会用到这个区域



猜你喜欢

转载自blog.csdn.net/h123120/article/details/80270869