破解过程:
用peid查壳,ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov
用od载入(我用的是flyODBG V1.10正式汉化修改版),在调试选项中,除了内存异常,其它都打钩,
用插件隐藏od,F9运行,程序会被断下来,下面一路按Shift+F9,直到下面的典型代码
00A739EC 3100 xor dword ptr ds:[eax],eax ; 停在这
00A739EE 64:8F05 00000000 pop dword ptr fs:[0] ; 撤销SEH链
00A739F5 58 pop eax
00A739F6 833D B07EA700 00 cmp dword ptr ds:[A77EB0],0
00A739FD 74 14 je short 00A73A13
00A739FF 6A 0C push 0C
00A73A01 B9 B07EA700 mov ecx,0A77EB0
00A73A06 8D45 F8 lea eax,dword ptr ss:[ebp-8]
00A73A09 BA 04000000 mov edx,4
00A73A0E E8 2DD1FFFF call 00A70B40
00A73A13 FF75 FC push dword ptr ss:[ebp-4]
00A73A16 FF75 F8 push dword ptr ss:[ebp-8]
00A73A19 8B45 F4 mov eax,dword ptr ss:[ebp-C]
00A73A1C 8338 00 cmp dword ptr ds:[eax],0
00A73A1F 74 02 je short 00A73A23
00A73A21 FF30 push dword ptr ds:[eax]
00A73A23 FF75 F0 push dword ptr ss:[ebp-10]
00A73A26 FF75 EC push dword ptr ss:[ebp-14]
00A73A29 C3 retn ;F2下断点
这段代码很好记,看第二行和第三行,典型的撤销SEH链的代码,这就意味下面肯定没有SEH为我们指路了,
只好自己走了,在
00A73A29 C3 retn ;F2下断点
这行用F2下断点,Shift+F9运行,断下来后F2取消断点,
此时看堆栈窗口
0012FF5C 00A862FC
0012FF60 00400000 DVDFab.00400000
0012FF64 5FBA9F6F
0012FF68 0012FFA4
0012FF6C 0012FF90
下硬件断点 在命令行中输入 hr 12ff68 或 打开内存,在12ff68处下硬件访问断点
F9运行来到
00A8648D /EB 44 jmp short 00A864D3 ; 在这行按F8跳转
00A8648F |EB 01 jmp short 00A86492
00A86491 |9A 51579CFC BF00 call far 00BF:FC9C5751
00A86498 |0000 add byte ptr ds:[eax],al
00A8649A |00B9 00000000 add byte ptr ds:[ecx],bh
00A864A0 |F3:AA rep stos byte ptr es:[edi]
00A864A2 |9D popfd
00A864A3 |5F pop edi
00A864A4 |59 pop ecx
00A864A5 |C3 retn
按一次F8,来到
00A864D3 03C3 add eax,ebx ; DVDFab.00400000
00A864D5 BB 87010000 mov ebx,187 ; 这行的地址,后面有用
00A864DA 0BDB or ebx,ebx
00A864DC 75 07 jnz short 00A864E5
00A864DE 894424 1C mov dword ptr ss:[esp+1C],eax
00A864E2 61 popad
00A864E3 50 push eax
00A864E4 C3 retn
00A864E5 E8 00000000 call 00A864EA
00A864EA 5D pop ebp
00A864EB 81ED 4DE14B00 sub ebp,4BE14D
这里就是stolen code部分了,ASProtect 1.23 RC4 在程序入口点偷了一段代码,因此找不到真正的oep,
记住mov ebx,187(不一定是187) 这行前面的地址,就把它当作oep了
下面用loadPE修正文件大小(correct ImageSize),dump full 存为dump.exe。然后把上面的这段stolen code部分
也要存下来,应此再 dump region,Address:A80000 Size:C000 ,保存为Region00A60000-00A7E000.dmp
然后用loadPE载入dump.exe,选区块(Sections),点右键,把Region00A60000-00A7E000.dmp添加进去,
修改VOffset=A80000-400000(基址)=680000,保存。保留重建PE中的选项只有验证PE(Validate PE)打勾
对刚才保存的dump.exe重建PE.
用ASPRDBGR载入DVDFab.exe(注意是原来的文件!)按两次(一般是两次)YES,出现Application paused!时
出现
AsprDbgr v1.0beta () Made by me... Manko.
iEP=401000 (G:\破解\试炼场\DVDFab\DVDFab.exe)
IAT Start: 459000 ()1
End: 459AA8 2
Length: AA8 3
IATentry 459190 = A717A4 resolved as GetProcAddress
IATentry 4591AC = A71CB8 resolved as GetCurrentProcess
IATentry 4591C0 = A71C8C resolved as GetVersion
IATentry 4591D0 = A71CC8 resolved as LockResource
IATentry 459234 = A71C64 resolved as GetModuleHandleA
11 invalid entries erased.
Dip-Table at adress: A77AB4
0 41FF9B 0 41FFDA 41FFA7 0 0 41FFE4 41FFF0 41FFFC 0 0 0 0
Last SEH passed. (A739EE) Searching for signatures. Singlestepping to OEP!
Call + OEP-jump-setup at: A85CE1 ( Code: E8000000 5D81ED )
打开ImportREC,选DVDFab.exe, 填入
oep=6864d5 (还记得mov ebx,187行的地址吗?这行的地址减去基址400000作为oep)
RVA=59000 (上面第一行减去基址)
大小=AA8 (第三行Length)
在选项中去掉新建输入表中的两个勾
然后整理抓取文件,保存为dump_.exe
我完全按以上方法脱壳,修复后程序不能运行,操作系统2003.以上步骤有错误吗?错误在哪里啊??请指教!!!!!!!!
[课程]FART 脱壳王!加量不加价!FART作者讲授!