【目标程序】:MU私服客户端Season6.2 main.exe主程序
【外壳】PECompact2.x
【脱壳工具】PEID0.95、OD、 LordPE、 ImportREC
【作者】本人
【脱壳修复】这个壳属于比较简单的壳,那么我们也来简单地脱下!
1.查壳
用Peid0.95查壳,显示PECompact 2.x,经确认无误。
2.脱壳
OD载入main.exe主程序,停在这里:
00401000 > B8 60B42F09 mov eax, 092FB460
00401005 50 push eax
00401006 64:FF35 0000000>push dword ptr fs:[0]
0040100D 64:8925 0000000>mov dword ptr fs:[0], esp
00401014 33C0 xor eax, eax
00401016 8908 mov dword ptr [eax], ecx
00401018 50 push eax
00401019 45 inc ebp
0040101A 43 inc ebx
0040101B 6F outs dx, dword ptr es:[edi]
0040101C 6D ins dword ptr es:[edi], dx
0040101D 70 61 jo short 00401080
0040101F 637432 00 arpl word ptr [edx+esi], si
00401023 5F pop edi
00401024 46 inc esi
00401025 5F pop edi
00401026 9B wait
下断 bp VirtualAlloc,中断两次,停在这里
753479FF > 8BFF mov edi, edi
75347A01 55 push ebp
75347A02 8BEC mov ebp, esp
75347A04 FF75 14 push dword ptr [ebp+14]
75347A07 FF75 10 push dword ptr [ebp+10]
75347A0A FF75 0C push dword ptr [ebp+C]
75347A0D FF75 08 push dword ptr [ebp+8]
75347A10 6A FF push -1
75347A12 E8 A1FFFFFF call VirtualAllocEx
75347A17 5D pop ebp
75347A18 C2 1000 retn 10
取消断点,Ctrl+F9,执行到返回,停在这里
00020AC4 8985 272F0010 mov dword ptr [ebp+10002F27], eax
00020ACA 56 push esi
00020ACB E8 F6030000 call 00020EC6
00020AD0 8D8D BD2D0010 lea ecx, dword ptr [ebp+10002DBD]
00020AD6 85C0 test eax, eax
00020AD8 0F85 94000000 jnz 00020B72
00020ADE 56 push esi
00020ADF E8 40030000 call 00020E24
00020AE4 56 push esi
00020AE5 E8 55020000 call 00020D3F
00020AEA 90 nop
00020AEB 90 nop
00020AEC 90 nop
00020AED 90 nop
00020AEE 90 nop
00020AEF 90 nop
00020AF0 90 nop
00020AF1 90 nop
00020AF2 90 nop
00020AF3 90 nop
00020AF4 90 nop
00020AF5 90 nop
00020AF6 90 nop
00020AF7 90 nop
00020AF8 8B4E 34 mov ecx, dword ptr [esi+34]
00020AFB 85C9 test ecx, ecx
00020AFD 0F84 89000000 je 00020B8C
00020B03 034E 08 add ecx, dword ptr [esi+8]
00020B06 51 push ecx
00020B07 56 push esi
00020B08 E8 47060000 call 00021154
在00020AF8处F2下断,F9运行到这里,然后F8单步(看下面提示,两种修改方法)
00020AF8 8B4E 34 mov ecx, dword ptr [esi+34] ; main.08EF6000
00020AFB 85C9 test ecx, ecx(1.将这里的ECX寄存器置0)
00020AFD 0F84 89000000 je 00020B8C(或者2.将这里改为JMP或JNZ或置标志位 Z为1)
00020B03 034E 08 add ecx, dword ptr [esi+8]
00020B06 51 push ecx
00020B07 56 push esi
00020B08 E8 47060000 call 00021154
单步到这里
00020B8C 8B7B 08 mov edi, dword ptr [ebx+8]
00020B8F 8BDE mov ebx, esi
00020B91 837B 48 01 cmp dword ptr [ebx+48], 1
00020B95 75 15 jnz short 00020BAC
00020B97 8B43 0C mov eax, dword ptr [ebx+C]
00020B9A 8B4B 40 mov ecx, dword ptr [ebx+40]
00020B9D 8BF1 mov esi, ecx
00020B9F 03F7 add esi, edi
00020BA1 C606 E9 mov byte ptr [esi], 0E9
00020BA4 83C1 05 add ecx, 5
00020BA7 2BC1 sub eax, ecx
00020BA9 8946 01 mov dword ptr [esi+1], eax
00020BAC 8BF3 mov esi, ebx
下断bp VirtualFree,F9运行,停在这里
75347A74 > 8BFF mov edi, edi ; main.00400000
75347A76 55 push ebp
75347A77 8BEC mov ebp, esp
75347A79 FF75 10 push dword ptr [ebp+10]
75347A7C FF75 0C push dword ptr [ebp+C]
75347A7F FF75 08 push dword ptr [ebp+8]
75347A82 6A FF push -1
75347A84 E8 A3FFFFFF call VirtualFreeEx
75347A89 5D pop ebp
75347A8A C2 0C00 retn 0C
取消断点,Ctrl+F9,执行到返回,到这里
00020BDF 8B46 0C mov eax, dword ptr [esi+C] ; main.004ED9E6
00020BE2 03C7 add eax, edi
00020BE4 5D pop ebp
00020BE5 5E pop esi
00020BE6 5F pop edi
00020BE7 5B pop ebx
00020BE8 C3 retn
F8单步,曙光就要出现,一直到这里
092FB518 FF11 call dword ptr [ecx]
092FB51A 8BC6 mov eax, esi
092FB51C 5A pop edx ; main.<模块入口点>
092FB51D 5E pop esi
092FB51E 5F pop edi
092FB51F 59 pop ecx
092FB520 5B pop ebx
092FB521 5D pop ebp
092FB522 FFE0 jmp eax(这里跳到OEP)
那么,就跳到OEP去吧
008ED9E6 55 push ebp
008ED9E7 8BEC mov ebp, esp
008ED9E9 6A FF push -1
008ED9EB 68 D0DE9200 push 0092DED0
008ED9F0 68 28E58E00 push 008EE528
008ED9F5 64:A1 00000000 mov eax, dword ptr fs:[0]
008ED9FB 50 push eax
2.IAT修复。壳脱完了,自然就得修复一下了,不然程序还是个半残疾。
用ImportREC载入修复,效果如下:
全是否,IAT加密了,只有修复了,搜索了下网上,没有看到合适的修复方法,就自己动手吧!
双击第一个无效函数
此时,先回到OD里,在OEP处下硬件执行断点,然后Ctrl+G到第一个无效的RVA(00525000)处,在数据窗口中硬件访问断点(word),
OD重新载入程序,一直F9到OEP处,看数据窗口:
00925000 760E4620 advapi32.InitializeSecurityDescriptor
00925004 760DDF7E advapi32.CryptGetHashParam
00925008 76113188 advapi32.CryptDeriveKey
0092500C 76113178 advapi32.CryptDecrypt
00925010 760DDF4E advapi32.CryptCreateHash
00925014 760DDF36 advapi32.CryptHashData
00925018 761132C8 advapi32.CryptVerifySignatureA
0092501C 760DDF66 advapi32.CryptDestroyHash
00925020 760DCF49 advapi32.RegEnumValueA
00925024 760FA4B4 advapi32.GetUserNameA
00925028 760D91DD advapi32.CryptAcquireContextA
0092502C 760DC532 advapi32.CryptImportKey
好熟悉的东东吧,用ImportREC修复吧
全为YES了,完美脱壳并修复完毕。
来这里同大家交流一下,不足之处,请批评指正!
[课程]FART 脱壳王!加量不加价!FART作者讲授!
上传的附件: