【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教
【调试环境】: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