对ACProtect1.32壳的分析以及对抽取代码的修补

来源:互联网 发布:mac ds store 文件 编辑:程序博客网 时间:2024/05/22 06:57

我们都知道,有调试技术,就有反调试技术,ACProrect这个壳就用到了反调试技术,它会检测调试软件OD,来分析自己的程序是否被调试。

ACProtect1.32壳的步骤:

这个壳可能会检测OD进行反调试,所以,我们需要利用SOD中的隐藏OD功能。然后我们设置非法访问内存的异常不忽略,然后很明显我们需要利用最后一次异常法来解决这个问题。在我分析的这个程序里面,程序在int 1 之后就会跑飞,所以,就需要在int 1 的地方找SE句柄,然后数据窗口跟随,下断,再次shift +f9,三次之后,取消所有断点,单步往下,就可以发现会跳出ASP的提示,不管它继续,就会发现,直接到了OEP。  然后还有一个操作方法,我们在SOD(strongOD)中隐藏我们的OD,然后在调试选项中设置不勾选非法访问,顺带不要勾选下面的异常范围,然后开始shift+F9,26次之后,它就会弹出ASP的提示,我们点击确定之后,发现程序来到一个jmp,我们单步跟踪,发现又到了一个jmp,那就继续跟,发现,它直接跳到了OEP。不清楚第二个方法为什么会这样到达OEP,但是,经过我们的实验,它的确可以不用所谓的数据窗口跟随,就可以到达OEP(顺带说一下,26次的是ACP1.32版本)。

紧接着,我们来说一下ACP壳的抽取代码的情况,抽取代码也是一种壳对程序的保护手段,它会将程序真正的OEP的头部给抽取,插入到其他的地方,然后当我们通过脱壳方法按部就班的操作之后,发现,程序无法运行,查看附加数据,也没有,那么,我们就可以考虑程序自校验的问题和抽取代码的情况。在这里,它抽取了代码。

我们按照ACP壳的步骤,发现这次和上次的一样,到了int 1之后它会跑飞,那么我们老老实实按照步骤来做,寻找SE句柄,数据窗口跟随,然后下断,shift+F9三次,前两次需要F2下断,然后我们取消所有断点(包括那个内存断点),然后我们到了retn的位置时,选择调试中的设置条件,里面选择命令是一个这个选项,然后我们输入push ebp ,输入之后点击跟踪步入,等待结果,等待完了以后我们发现,出现了push ebp  mov ebp ,esp  sub esp,0x44  这三行代码,OK,二进制复制,然后我们再重新回到retn的地方,打开M,在401000的一行也就是代码段按F2下断,然后shift+F9,到达正确位置,我们仔细查看那三行代码,发现他总共占6个字节,也就是说我们到了这以后,需要将前面的四五行先用nop填充掉,然后再数6个nop将我们的这三行代码填充上去,这时候右键重建EIP,然后就可以进行脱壳了。

抽取代码总结:

这个壳在载入以后,我们先按照以前的办法,隐藏OD,然后设置取消忽略内存访问异常,然后shift+F9,进行了一系列的操作以后,我们发现,没有办法找到OEP,好吧,那就从头再来。隐藏OD,设置取消int3的异常忽略,然后采用最后一次异常法,找到最后一次的位置,然后再找到SE句柄,数据窗口跟随,下内存访问断点,再次S+F9,F2,S+F9,F2,再次S+F9 ,取消所有断点(包括内存断点),然后到那个retn,这里就需要针对ACP壳在command输入d 12ffc0,然后再数值那里下硬件断点,S+F9,就会到达它所偷取的代码,将它所偷取的代码进行二进制复制,然后点击M,在401000F2下断,S+F9,来到假的OEP,然后我们将前面的代码用我们复制的代码覆盖掉,新建EIP,然后进行脱壳。脱完壳后我们进行修复,修复完毕之后发现,仍然无法正常运行,这时我们就应该知道ACP高版本壳对程序的保护,当它发现我们修改完的程序OEP不在当初加壳的代码的地方时,它就会不进行解密,
让程序无法运行,所以,我们需要在它加了壳的开头设置为OEP,这时候,我们就需要跳到它的初始OEP,然后修改代码,让它直接跳到我们的OEP,然后进行保存,这时候我们仍然是无法运行这个程序的,因为实际上我们的OEP还是在我们刚刚脱壳掉的地方,所以我们需要用loardpe来进行修改,将OEP修改为初始OEP,修改完毕之后再次运行,发现程序可以完美运行。



0 0
原创粉丝点击