tuts4you-lena151-Crackme-tutorial18

一、前言

       本次学习的破解的目标是一个ReverseMe,这个程序的特殊之处是它被加密了,而且有些许干扰代码。

二、破解过程

(一).ReverseMe

1.运行程序,弹窗,这个ReverseMe的目的是移除这个弹窗,如下图


点击确定之后显示的代码如下图


2.在x32dbg中载入程序,并且查找字符串,如下图


双击进入这个字符的调用区域,并在这个区域下断点


3.重新运行程序,会发现程序根本没有停在断点处,这就需要重头开始分析了。

到达入口点处,可以看到上面有个对edi的赋值,可能要进行大量的数据改变,所以进入这个call调用中查看。


进入这个call调用之后,首先遇到了个循环,这个循环的意思是对00401000到0x401218处的数据解密(异或上0x5A)


解密前的内存窗口


解密前的汇编窗口


将这个循环执行完,得到解密后的内存区域


解密后的反汇编区域


4.继续运行程序,知道程序到达以下区域,这篇区域是将00403000到00403128处的代码解密(异或上0xB3)

等这个区域解密完成之后,真正的弹窗区域就会出现了


5.找到弹窗区域了,进行修改,将push 0x0,修改为跳转语句



6.但是修改之后,我发现程序无法运行了,在这个地方下硬件断点之后,才发现,这个地方的代码是修改过得

0x401013处的代码用于给0x00401011赋值为6A 00,也就是push 0x0语句,

也就说说我们要在加密的情况下,修改0x00401016、0x00401017的值为B1,0D(EB、57分别异或上5A)


修改如下图


7、保存再次运行,程序没有弹窗了。

三、总结

1.排除一些无用代码。

2.了解代码变形的处理方式

3.代码多态,加密等方式

猜你喜欢

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