首页
社区
课程
招聘
[原创]手动修复SVKP1.11加壳的IAT
发表于: 2007-2-4 20:08 6479

[原创]手动修复SVKP1.11加壳的IAT

2007-2-4 20:08
6479

【破解作者】 h_f22
【使用工具】 FI4.0、PEID0.94、OllyDBG、ImportREC1.6f
【破解平台】 WinXPSP2
【软件名称】 Auth.exe
【软件简介】 一个游戏
【加壳方式】 SVKP1.11
【破解声明】 水平很菜,一点感受,希望对大家有用

本文应用一个简单的SVKP脱壳实例来说明手工修复IAT的几种方法和技巧,因为重点在手工修复IAT所以
挑了一个简单的壳--SVKP1.11,这个壳难度不大,但是有几个非常典型的函数需要手工修复,虽然早就
有了相关的脚本,但是对于真正的破解者来说,知其然,还要知其所以然。

这是一个游戏,由SVKP1.11加壳,可以看出svkp的比较早期的壳强度并不大。没有StolenCode,AntiDebug
里面的rdtsc命令还是比较烦的,但他只影响单步,单步运行时注意一下即可,其余的用HIDEOD就对付了。
解码代码段的函数用内存断点即可断下,很容易找到解码的地方。入口也不难,不过这次偷个懒用
QuickUnpack的寻找OEP的插件找到:

OEP:00414FA7

知道入口后到达入口就很容易了。在00414FA7上下个内存访问的断点,忽略所有异常,F9运行程序第一
次断在一个异常处,继续会断在解码函数中,有兴趣可以自己看看其实并不复杂,完全可以自己写出来,
但是要注意的是解码是分几个段的,不同段解码方式不一样,有几段花指令挺烦人。解码函数过去了就
到入口了,看到熟悉的push ebp:

00414FA7    55              push    ebp
00414FA8    8BEC            mov     ebp, esp
00414FAA    6A FF           push    -1
00414FAC    68 B0A84400     push    0044A8B0
00414FB1    68 40984100     push    00419840
00414FB6    64:A1 00000000  mov     eax, dword ptr fs:[0]
00414FBC    50              push    eax
00414FBD    64:8925 0000000>mov     dword ptr fs:[0], esp
......
0005D95C	0C9E1F48
0005D960	0C9E28DC
0005DA40	0C9E32B5
0005DA44	0C9EB57F
0005DA64	0C9E2F30
0005DA88	0C9EB1FA
ExitProcess
GetCommandLineA
GetModuleHandleA
GetVersionExA
GetCurrentProcess
GetVersion
00414FA7    55              push    ebp
00414FA8    8BEC            mov     ebp, esp
00414FAA    6A FF           push    -1
00414FAC    68 B0A84400     push    0044A8B0
00414FB1    68 40984100     push    00419840
00414FB6    64:A1 00000000  mov     eax, dword ptr fs:[0]
00414FBC    50              push    eax
00414FBD    64:8925 0000000>mov     dword ptr fs:[0], esp
00414FC4    83EC 58         sub     esp, 58
00414FC7    53              push    ebx
00414FC8    56              push    esi
00414FC9    57              push    edi
00414FCA    8965 E8         mov     dword ptr [ebp-18], esp
00414FCD    FF15 88DA4500   call    dword ptr [45DA88]      //这是第一个API调用,显然是GetVersion
00414FD3    33D2            xor     edx, edx
00414FD5    8AD4            mov     dl, ah
00414FD7    8915 EC9B4500   mov     dword ptr [459BEC], edx
00414FDD    8BC8            mov     ecx, eax
00414FDF    81E1 FF000000   and     ecx, 0FF
00414FE5    890D E89B4500   mov     dword ptr [459BE8], ecx
00414FEB    C1E1 08         shl     ecx, 8
00414FEE    03CA            add     ecx, edx
00414FF0    890D E49B4500   mov     dword ptr [459BE4], ecx
00414FF6    C1E8 10         shr     eax, 10
00414FF9    A3 E09B4500     mov     dword ptr [459BE0], eax
00414FFE    6A 01           push    1
00415000    E8 D4470000     call    004197D9
00415005    59              pop     ecx
00415006    85C0            test    eax, eax
00415008    75 08           jnz     short 00415012
0041500A    6A 1C           push    1C
0041500C    E8 C3000000     call    004150D4
00415011    59              pop     ecx
00415012    E8 653C0000     call    00418C7C
00415017    85C0            test    eax, eax
00415019    75 08           jnz     short 00415023
0041501B    6A 10           push    10
0041501D    E8 B2000000     call    004150D4
00415022    59              pop     ecx
00415023    33F6            xor     esi, esi
00415025    8975 FC         mov     dword ptr [ebp-4], esi
00415028    E8 7B440000     call    004194A8
0041502D    FF15 60D94500   call    dword ptr [45D960]   //这是第二个API调用 是GetCommandLineA
00415033    A3 88B74500     mov     dword ptr [45B788], eax
......
0040D09F    0F95C0          setne   al
0040D0A2    E9 B7000000     jmp     0040D15E
0040D0A7    68 6C794400     push    0044796C                         ; ASCII "USER32"
0040D0AC    FF15 40DA4500   call    dword ptr [45DA40]    //看看这里的形式 显然是GetModileHandleA
0040D0B2    8BF8            mov     edi, eax
0040D0B4    3BFB            cmp     edi, ebx
0040D0B6    74 76           je      short 0040D12E
0040D0B8    8B35 6CDB4500   mov     esi, dword ptr [45DB6C]
0040D0BE    68 58794400     push    00447958                         ; ASCII "GetSystemMetrics"
0040D0C3    57              push    edi
0040D0C4    FFD6            call    esi                  //这里显然就是GetProcAddress 
0040D0C6    3BC3            cmp     eax, ebx
0040D0C8    A3 88954500     mov     dword ptr [459588], eax
0040D0CD    74 5F           je      short 0040D12E
0040D0CF    68 44794400     push    00447944                         ; ASCII "MonitorFromWindow"
0040D0D4    57              push    edi
0040D0D5    FFD6            call    esi
0040D0D7    3BC3            cmp     eax, ebx
0040D0D9    A3 8C954500     mov     dword ptr [45958C], eax
0040D0DE    74 4E           je      short 0040D12E
0040D0E0    68 34794400     push    00447934                         ; ASCII "MonitorFromRect"
....

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
2
顶一下,让更多的人能够注意。
2007-2-4 23:36
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这么长的文章,支持一下!
2007-2-5 00:23
0
游客
登录 | 注册 方可回帖
返回
//