《第3期-12 巧妙的处理暗桩》学习笔记

一、学习了一下脱壳
ESP定律脱壳
1、pushad后,对ESP下硬件断点。在OD中选中ESP,右键——数据窗口中跟随。来到数据窗口中,选中几个字节后右键——断点——硬件访问——Dword。
2、F9运行,暂停下来后,用F8单步,注意看popad,过了popad再跳转或返回就是OEP了。

F8单步法
F8单步,碰到向上的跳转直接在下面F4,碰到跑飞的call,下断点,再次运行到这个callF7进入后再F8单步,直到找到OEP

二、破解过程
1、因为程序会突然退出,所以下API断点ExitProcess
2、找到了导致程序退出的地方

004046F4  |. /75 1A         |jnz     short 00404710
004046F6  |. |833D 24204E00>|cmp     dword ptr ds:[0x4E2024],0x0
004046FD  |. |74 06         |je      short 00404705
004046FF  |. |FF15 24204E00 |call    dword ptr ds:[0x4E2024]
00404705  |> |A1 00F04D00   |mov     eax,dword ptr ds:[0x4DF000]
0040470A  |. |50            |push    eax                             ; /ExitCode => 0x0
0040470B  |. |E8 44CBFFFF   |call         ; \ExitProcess
00404710  |> \8B03          |mov     eax,dword ptr ds:[ebx]

可是更改跳转后总是程序崩溃。

3、通过看谁调用了上面第2步中的代码,我找到了关键的call和关键跳

004DB9DE   .  E8 11D3FFFF          call    004D8CF4                         ;  影响退出的关键call
004DB9E3   .  84C0                 test    al,al
004DB9E5   .  74 14                je      short 004DB9FB  ;关键跳
004DB9E7   .  33D2                 xor     edx,edx
004DB9E9   .  8B83 AC030000        mov     eax,dword ptr ds:[ebx+0x3AC]
004DB9EF   .  E8 24C6FFFF          call    004D8018
004DB9F4   .  E8 4F8CF2FF          call    00404648     ; 第2步中的call

更改关键跳为jmp后还是出错。

4、去看视频
5、第3步中的代码找对了,关键跳修改的也对。就是我没有在修改后程序崩溃的情况下F8单步调试,看看到底是哪里导致的崩溃。原来后面有很多类似的代码,都调用了00404648,把这些代码中的关键跳都修改了就可以了。
把修改后的代码保存出来后运行,发现可以看到程序的主界面了。可是一点击”软件注册“,程序就又被删除了。
这说明还是有暗桩没有处理完。
6、这里作者给出了一种非常考验手速的方法。把修改后的程序载入OD后点击”软件注册“,立马回到OD中按F12,让程序暂停下来。要是慢了话,程序就删除了。我也是试了两回才成功。
断下来后按Alt+F9返回用户代码,F8单步,不久就发现又调用了00404648。那么就找到了另一处暗桩。
把修改保存出来。

你可能感兴趣的:(《第3期-12 巧妙的处理暗桩》学习笔记)