三.重定位表
其实写这篇教程的价值就在于这部分了
经过跟踪发现RLPack没有加密重定位表,这就为我们脱壳减少了麻烦
0094BFF7 68 00400000 push 4000
0094BFFC 68 54180000 push 1854
0094C001 FFB5 560A0000 push dword ptr ss:[ebp+A56]
0094C007 FF95 EF090000 call near dword ptr ss:[ebp+9EF] ; kernel32.VirtualFree
0094C00D 68 00400000 push 4000
0094C012 68 00200C00 push 0C2000
0094C017 FFB5 3A0A0000 push dword ptr ss:[ebp+A3A]
0094C01D FF95 EF090000 call near dword ptr ss:[ebp+9EF] ; kernel32.VirtualFree
//清理战场了
0094C023 E8 55000000 call 0094C07D
//重定位处理[/code][code]0094C07D 60 pushad
0094C07E 8BB5 460A0000 mov esi,dword ptr ss:[ebp+A46]
//[ebp+A46]=00087000 重定位表RVA ★
0094C084 0BF6 or esi,esi
0094C086 74 67 je short 0094C0EF
0094C088 8BBD 3E0A0000 mov edi,dword ptr ss:[ebp+A3E]
//[ebp+A3E]=00400000 文件基址
0094C08E 8B4424 48 mov eax,dword ptr ss:[esp+48]
//[esp+48]=00870000 映像基址
0094C092 8985 420A0000 mov dword ptr ss:[ebp+A42],eax
0094C098 3BC7 cmp eax,edi
//比较是否相同
0094C09A 74 53 je short 0094C0EF
//不同不跳就需要重定位处理了
//注意:此时程序没有重定位,可以现在Dump,这样脱壳后就不需要修改dump文件基址了 ★
0094C09C 03F0 add esi,eax
//ESI=00087000+00870000=008F7000 重定位表VA
0094C09E EB 4A jmp short 0094C0EA
0094C0A0 8B16 mov edx,dword ptr ds:[esi]
0094C0A2 8B46 04 mov eax,dword ptr ds:[esi+4]
0094C0A5 8985 4A0A0000 mov dword ptr ss:[ebp+A4A],eax
0094C0AB 01B5 4A0A0000 add dword ptr ss:[ebp+A4A],esi
0094C0B1 83C6 08 add esi,8
0094C0B4 EB 2C jmp short 0094C0E2
0094C0B6 0FB706 movzx eax,word ptr ds:[esi]
0094C0B9 8BD8 mov ebx,eax
0094C0BB C1EB 0C shr ebx,0C
0094C0BE 8BCB mov ecx,ebx
0094C0C0 69DB 00100000 imul ebx,ebx,1000
0094C0C6 2BC3 sub eax,ebx
0094C0C8 03C2 add eax,edx
0094C0CA 0385 420A0000 add eax,dword ptr ss:[ebp+A42]
0094C0D0 83F9 03 cmp ecx,3
0094C0D3 75 0A jnz short 0094C0DF
0094C0D5 2938 sub dword ptr ds:[eax],edi
0094C0D7 8B8D 420A0000 mov ecx,dword ptr ss:[ebp+A42]
0094C0DD 0108 add dword ptr ds:[eax],ecx
0094C0DF 83C6 02 add esi,2
0094C0E2 3BB5 4A0A0000 cmp esi,dword ptr ss:[ebp+A4A]
0094C0E8 72 CC jb short 0094C0B6
0094C0EA 833E 00 cmp dword ptr ds:[esi],0
0094C0ED 75 B1 jnz short 0094C0A0
//循环重定位处理
0094C0EF 61 popad
//处理完后ESI=009000F8
//Relocation Table Size=009000F8-008F7000=000090F8 ★
0094C0F0 C3 retn
_____________________________________________
四.完成脱壳
0094C028 61 popad
0094C029 E9 BE3AFAFF jmp 008EFAEC
//飞向光明之巅
0094C02E 61 popad
0094C02F C3 retn
008EFAEC 55 push ebp
//OEP RVA=008EFAEC-00870000=0007FAEC
008EFAED 8BEC mov ebp,esp
008EFAEF 83C4 C4 add esp,-3C
008EFAF2 B8 04F98E00 mov eax,008EF904
008EFAF7 E8 CC6DF8FF call 008768C8
008EFAFC 33C0 xor eax,eax
008EFAFE A3 442C8F00 mov dword ptr ds:[8F2C44],eax
008EFB03 E8 DC4BF8FF call 008746E4
运行ImportREC,由于此DLL加载后已经进行重定位处理,所以去掉“Use PE Header From Disk”选项
选择OllyDbg的loaddll.exe进程,Pick DLL选择iBox.dll
填入OEP RVA=0007FAEC,输入表RVA=00083154,输入表Size=0000069C,Get Imports
可以新增区段修复,也可以把输入表放在程序无用的空白处。
使用LordPE修改dumped_.dll的Relocation Table RVA=00087000,Relocation Table Size=000090F8
附件中iBox.UnPacKed.dll只是简单优化,如果想优化的完美点那就要多费时间了。
脱壳完成
| 另类破解鸽子连接密码 | 03-21 | |
| 教菜鸟写注册机 | 12-27 | |
| QQ聊天记录察看器 5.2算法分析 | 12-04 | |
| 如何汉化一个软件 | 12-02 | |
| 扭曲变换加密 【目前防止软件被破 | 11-02 | |
| 破解利器Olldbg脚本教学(二)- | 10-31 | |
| 破解利器Olldbg脚本教学(一)- | 10-30 | |
| 破解WebEasyMail v3.6.2.1 企业版 | 10-24 | |
| 破解利器OllyDBG入门系列(五)- | 10-18 | |
| 破解利器OllyDBG入门系列(四)- | 10-17 | |
| 揭开高级游戏黑客的面纱,轻松打 | 10-17 | |
| 破解利器OllyDBG入门系列(三)- | 10-15 | |