操作过程:
1. peid 查壳: UPX v0.89.6 - v1.02 / v1.05 -v1.24 -> Markus & Laszlo [overlay - additional [Overlay] *
2. OD载入,利用ESP法查找OEP
004B6C2F 8D4424 80 lea eax, dword ptr [esp-80]
004B6C33 6A 00 push 0
004B6C35 39C4 cmp esp, eax
004B6C37 ^ 75 FA jnz short 004B6C33
004B6C39 83EC 80 sub esp, -80
004B6C3C - E9 CFF6F5FF jmp 00416310 //这里应该就是跳到OEP了
004B6C41 0000 add byte ptr [eax], al
004B6C43 0000 add byte ptr [eax], al
然后直接跳转,跳转到 00416310
00416310 E8 A7C00000 call 004223BC //这里脱壳附加数据后,运行弹框,
然后内存出错。
00416315 ^ E9 79FEFFFF jmp 00416193
0041631A CC int3
0041631B CC int3
0041631C CC int3
0041631D CC int3
0041631E CC int3
0041631F CC int3
00416320 55 push ebp //我感觉这里像OEP一点,不过附加数据
运行直接出错
00416321 8BEC mov ebp, esp
00416323 57 push edi
00416324 56 push esi
00416325 8B75 0C mov esi, dword ptr [ebp+C]
00416328 8B4D 10 mov ecx, dword ptr [ebp+10]
0041632B 8B7D 08 mov edi, dword ptr [ebp+8]
0041632E 8BC1 mov eax, ecx
3:我用W32DASM查看最后区块
Object01: UPX0 RVA: 00001000 Offset: 00000400 Size: 00000000 Flags: 60000080
Object02: UPX1 RVA: 00075000 Offset: 00000400 Size: 00041E00 Flags: E0000040
Object03: .rsrc RVA: 000B7000 Offset: 00042200 Size: 00006800 Flags: C0000040
如果没错的话,那附加数据应该是 42200+6800 = 48A00
附加数据后运行正常弹出第一个框。点击确定后就出错了。不知道是哪里的问题。是因为脱的不干净还是附加数据有问题?请指教。谢谢!
附件里面有原文件和我脱壳并附加数据后的两个文件!
petsprite.7z
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!