你的分享就是我们的动力 ---﹥

用OllyDbg手脱RLPack V1.17加壳的DLL

时间:2014-02-19 14:46来源:www.chengxuyuans.com 点击:
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教
【调试环境】:WinXP、OllyDbg、PEiD、LordPE、ImportREC
【脱壳过程】:
RLPack是ap0x新出的一款压缩壳,这篇教程以RLPack V1.17完整版自带的iBox.dll演示RLPack加壳的DLL手动脱壳。
RLPack加壳的eXe脱壳方法可以参看我以前写的脚本
引用:
RLPack.Basic.Edition.V1.0b-V1.17+Full.Edition.V1.16-V1.17.UnPacK.Script
http://www.unpack.cn/viewthread.php?tid=9965

值得一提的是,RLPack V1.18越来越像RLProtect,其Code Splicing和Import Elimination是很多的
设置OllyDbg暂停在WinMain,忽略所有异常选项,开始吧
_____________________________________________________________
一.OEP
通常压缩壳加壳的DLL找OEP是比较简单的
DLL卸载时会再次从EP处运行,几个跳转后就会到OEP了
0094BEA0    807C24 08 01       cmp byte ptr ss:[esp+8],1
//进入OllyDBG后暂停在EP
0094BEA5    0F85 7E010000      jnz 0094C029
//这里在DLL卸载时会跳转,就是去OEP的捷径了
0094C029    E9 BE3AFAFF        jmp 008EFAEC
//这里就是跳OEP了

_____________________________________________
二.输入表
RLPack V1.1X Full Edition加壳exe文件会加密某些输入表,而加壳DLL则很少加密输入表的
BP GetProcAddress
Shift+F9,中断后取消断点,Alt+F9返回
0094BF57    56                 push esi
0094BF58    FF95 E3090000      call near dword ptr ss:[ebp+9E3] ; kernel32.LoadLibraryA
0094BF5E    8985 4E0A0000      mov dword ptr ss:[ebp+A4E],eax
0094BF64    85C0               test eax,eax
0094BF66    0F84 C2000000      je 0094C02E
0094BF6C    8BC6               mov eax,esi
0094BF6E    EB 5F              jmp short 0094BFCF
0094BF70    8B85 520A0000      mov eax,dword ptr ss:[ebp+A52]
0094BF76    8B00               mov eax,dword ptr ds:[eax]
0094BF78    A9 00000080        test eax,80000000
0094BF7D    74 14              je short 0094BF93
0094BF7F    35 00000080        xor eax,80000000
0094BF84    50                 push eax
0094BF85    8B85 520A0000      mov eax,dword ptr ss:[ebp+A52]
0094BF8B    C700 20202000      mov dword ptr ds:[eax],202020 ; UNICODE " Hercegovina"
0094BF91    EB 06              jmp short 0094BF99
0094BF93    FFB5 520A0000      push dword ptr ss:[ebp+A52]
0094BF99    FFB5 4E0A0000      push dword ptr ss:[ebp+A4E]
0094BF9F    FF95 E7090000      call near dword ptr ss:[ebp+9E7] ; kernel32.GetProcAddress
0094BFA5    85C0               test eax,eax
//返回这里
0094BFA7    0F84 81000000      je 0094C02E
0094BFAD    8907               mov dword ptr ds:[edi],eax ; ntdll.RtlDeleteCriticalSection
//填充系统函数地址
//EDI=008F3154        注意观察这个地址
0094BFAF    83C7 04            add edi,4
0094BFB2    8B85 520A0000      mov eax,dword ptr ss:[ebp+A52]
0094BFB8    EB 01              jmp short 0094BFBB
0094BFBA    40                 inc eax
0094BFBB    8038 00            cmp byte ptr ds:[eax],0
0094BFBE    75 FA              jnz short 0094BFBA
0094BFC0    40                 inc eax
0094BFC1    8985 520A0000      mov dword ptr ss:[ebp+A52],eax
0094BFC7    66:8178 02 0080    cmp word ptr ds:[eax+2],8000
0094BFCD    74 A1              je short 0094BF70
0094BFCF    8038 00            cmp byte ptr ds:[eax],0
0094BFD2    75 9C              jnz short 0094BF70
0094BFD4    EB 01              jmp short 0094BFD7
0094BFD6    46                 inc esi
0094BFD7    803E 00            cmp byte ptr ds:[esi],0
0094BFDA    75 FA              jnz short 0094BFD6
0094BFDC    46                 inc esi
0094BFDD    40                 inc eax
0094BFDE    8B38               mov edi,dword ptr ds:[eax]
0094BFE0    E8 4B000000        call 0094C030
0094BFE5    83C0 04            add eax,4
0094BFE8    8985 520A0000      mov dword ptr ss:[ebp+A52],eax
0094BFEE    803E 01            cmp byte ptr ds:[esi],1
0094BFF1    0F85 60FFFFFF      jnz 0094BF57
//循环处理输入表
现在来手动确定输入表的RVA和Size
在左下角的数据窗口Ctrl+G:008F3154,点右键->Long->Address
008F3150  00000000
008F3154  7C93188A  ntdll.RtlDeleteCriticalSection
008F3158  7C9210ED  ntdll.RtlLeaveCriticalSection
……
008F37E0  7D610EC0  shell32.ShellExecuteA
008F37E4  00000000
008F37E8  76337CD8
008F37EC  7632311E
008F37F0  00000000
输入表开始RVA=008F3154-00870000=00083154
输入表Size=008F37F0-008F3154=0000069C

[1] [2] 下一页

转载注明地址:http://www.chengxuyuans.com/hacker/password-cracking/74034.html