本帖最后由 当红小生 于 2010-2-21 21:15 编辑
程序代码包括资源等数据全部解密、输入表等数据还原但还未填充系统函数地址、DLL则还未重定位,
此时dump出来的文件只需修正OEP、ImportTableRVA等信息即可正常运行完成脱壳。
下载地址:原版98记事本加壳(自己构造吧!)
bp LoadLibraryExA,然后返回代码(ALT+F9)
发现程序已经解码
00410C81 mov ecx,dword ptr ss:[ebp-2C] ; EAX-00400000=输入表RVA=6000
00410C84 mov dword ptr ds:[eax+8],ecx
00410C87 mov eax,dword ptr ss:[ebp-4C]
00410C8A mov dword ptr ds:[eax+4],CDC31337 ; 此处填充IID,nop it!
bp GetProcAddress,然后返回代码(ALT+F9)
00410D15 mov dword ptr ss:[ebp-58],eax ; 保存在ebp-58
00410D18 cmp dword ptr ss:[ebp-58],0
00410D1C jnz short 98Pk.00410D26
00410D1E push 0
00410D20 call dword ptr ds:[<&KERNEL32.Exi>; kernel32.ExitProcess
00410D26 lea eax,dword ptr ss:[ebp-44]
00410D29 push eax
00410D2A push 40
00410D2C push 4
00410D2E push dword ptr ss:[ebp-20]
00410D31 call dword ptr ds:[<&KERNEL32.Vir>; kernel32.VirtualProtect
00410D37 mov eax,dword ptr ss:[ebp-20]
00410D3A mov ecx,dword ptr ss:[ebp-58]
00410D3D mov dword ptr ds:[eax],ecx ; 填充系统函数nop it!
00410DB0 pop eax
00410DB1 jmp eax; 此处跳向OEP!
00410DB3 pop edi
F7跟进
然后dump,oep为10CC,输入表rva为6000,如果减肥的话把‘.pdata’和‘.ex_cod’就是中间那两个区段去掉,然后重建一下PE就OK了。
写文章就是累啊! |