网上也有好几篇类似的ASPack脱壳文章, 但都并非是真正的完美脱壳, 这里我简单的用 5 个步骤教大家如何完美脱下ASPack壳:
1. 用OD载入被ASPack加壳的程序, 下API断点
BP VirtualFree.
F9 停下来 -> 取消断点 ->
Ctrl + F9 ->
F8
0040519D 83C6 08 ADD ESI, 8 ; 停在这里
004051A0 833E 00 CMP DWORD PTR DS:[ESI], 0
004051A3 ^ 0F85 1EFFFFFF JNZ 004050C7
004051A9 68 00800000 PUSH 8000 ; 在这里F2下断点, F9运行, 解压完毕, 取消断点...此时用LoadPE Dump(Full)
004051AE 6A 00 PUSH 0
004051B0 FFB5 56010000 PUSH DWORD PTR SS:[EBP+156]
004051B6 FF95 51050000 CALL DWORD PTR SS:[EBP+551]
=================================================
2. F8往下寻找ImportTableRVA, 大概15下到达此处.
00405278 BE 38200000
MOV ESI, 2038 ; ImportTableRva =
2038
0040527D 8B95 22040000 MOV EDX, DWORD PTR SS:[EBP+422] ; [EBP+422] 镜像基址
00400000
00405283 03F2 ADD ESI, EDX
00405285 8B46 0C MOV EAX, DWORD PTR DS:[ESI+C]
00405288 85C0 TEST EAX, EAX
=================================================
3. 寻找OEP及计算ImportTableSize.
Ctrl + B 寻找十六进制 B8 01 00 00 00 C2 0C 00 68 00 00 00 00 C3
004053B2 B8 01000000 MOV EAX, 1
004053B7 C2 0C00 RETN 0C
004053BA 68 00000000
PUSH 0 ; 此处将出现OEP地址
004053BF C3 RETN
往上查看一下发现
0040539A B8 00100000
MOV EAX, 1000 ; F4到此处, OEP =
1000 物理地址
0040539F 50 PUSH EAX
004053A0 0385 22040000 ADD EAX, DWORD PTR SS:[EBP+422]
004053A6 59 POP ECX
004053A7 0BC9 OR ECX, ECX
004053A9 8985 A8030000 MOV DWORD PTR SS:[EBP+3A8], EAX
004053AF 61 POPAD
004053B0 75 08 JNZ SHORT 004053BA
断下来后, 留意
ESI的值, ImportTableSize = ESI - 镜像基址 + 14 - ImportTableRva = 00402088 - 00400000 - 00002038 =
00000050.
--------------------------------------------------------------------------
004053B2 B8 01000000 MOV EAX, 1
004053B7 C2 0C00 RETN 0C
004053BA 68 00104000
PUSH 00401000 ; 此处将出现OEP地址
004053BF C3 RETN ; F4到此处, 直接返回OEP入口
--------------------------------------------------------------------------
ImportTableRva =
00002038;
ImportTableSize =
00000050;
OEP = 00401000 - 00400000 =
00001000;
=================================================
4. 打开LoadPE中的PE编辑器, 打开脱壳后的文件, 点击目录, 在下面修改 ImportTableRVA: 00002038, ImportTableSize: 00000050, 点击保存, 点击确定...
返回LoadPE编辑器界面, 在入口点处填入OEP的Offset值 00001000.
最后别忘了点击"保存"按钮噢...
=================================================
5. 到这时候程序已经是完全脱壳并且能正常运行的了, 接下来要想完美一些的话, 就是优化PE文件了.
用LoadPE编辑器把ASPack壳加的区段(.aspack, .adata)清除掉, 并且截去尾部, 修正每个区段的标记, 脱ASPack壳已完美成功了!
2009-05-17
By lvtx
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!