【破解作者】 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直播授课