RLPack V1.17 Full Edition主程序脱壳与优化
作者:CxLrb Email:cxlrb@yahoo.com.cn
目标:RLPack V1.17 Full Edition
下载:此程序为向作者购买方可下载,主页只有basic edition版本下载。
工具:OllyDBG及脱壳插件,PETools,FixRes,ImportREC v1.6F,PE Explorer 1.98
保护方式: PEid查不到,添加fly的最新签名:
[RLPack V1.15-V1.17 (LZMA 4.30) -> ap0x]
signature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 ?? ?? ?? ?? 8D 9D ?? ?? ?? ?? 33 FF E8 83 01 00 00 6A ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A ?? FF 95 ?? ?? ?? ?? 89 85 ?? ?? ?? ?? EB 14
ep_only = true
[RLPack V1.15-V1.17 (aPlib 0.43) -> ap0x]
signature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 ?? ?? ?? ?? 8D 9D ?? ?? ?? ?? 33 FF E8 45 01 00 00 EB 0F FF 74 37 04 FF 34 37 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75 EB
ep_only = true
扫描结果:RLPack V1.15-V1.17 (LZMA 4.30) -> ap0x *
申明:仅仅是学习和研究目的,转载请保证文章完整性,并注明作者及出处,不足之处请指正!
概要
1. 寻找OEP
2. Dump & 输入表修复
3. PE 优化
4. 结语
5. 感谢
寻找OEP(原始入口点)
OD忽略所有异常,如图:
OD载入程序,停在这里:
00429567 > 60 pushad /*程序入口点
00429568 E8 00000000 call RLPack.0042956D
0042956D 8B2C24 mov ebp, [esp]
00429570 83C4 04 add esp, 4
00429573 8DB5 5A0A0000 lea esi, [ebp+A5A]
00429579 8D9D 40020000 lea ebx, [ebp+240]
0042957F 33FF xor edi, edi
00429581 E8 83010000 call RLPack.00429709
00429586 6A 40 push 40
00429588 68 00100000 push 1000
0042958D 68 00200C00 push 0C2000
00429592 6A 00 push 0
00429594 FF95 EB090000 call near [ebp+9EB]
0042959A 8985 3A0A0000 mov [ebp+A3A], eax
004295A0 EB 14 jmp short RLPack.004295B6
一路F8,来到这里:
004295B6 833C37 00 cmp dword ptr [edi+esi], 0 /*F8
004295BA ^ 75 E6 jnz short RLPack.004295A2 /*这里往回跳,不要跟进,光标选中下一行
004295BC 8D7437 04 lea esi, [edi+esi+4] /*选中此行,F4运行到此
004295C0 53 push ebx /*继续F8
004295C1 6A 40 push 40
004295C3 68 00100000 push 1000
004295C8 68 DA020000 push 2DA
004295CD 6A 00 push 0
004295CF FF95 EB090000 call near [ebp+9EB]
004295D5 8985 560A0000 mov [ebp+A56], eax
004295DB 5B pop ebx
004295DC 60 pushad
004295DD FFB5 3A0A0000 push dword ptr [ebp+A3A]
004295E3 56 push esi
004295E4 FFB5 560A0000 push dword ptr [ebp+A56]
004295EA FFD3 call near ebx
004295EC 61 popad
004295ED 8BB5 560A0000 mov esi, [ebp+A56]
004295F3 8BC6 mov eax, esi
004295F5 EB 01 jmp short RLPack.004295F8
继续F8往下走,
004295F8 8038 01 cmp byte ptr [eax], 1 /*F8
004295FB ^ 75 FA jnz short RLPack.004295F7 /*这里往回跳,不要跟进,光标选中下一行
004295FD 40 inc eax /*选中此行,F4运行到此
004295FE 8B38 mov edi, [eax] /*继续F8
00429600 E8 E7000000 call RLPack.004296EC
00429605 83C0 04 add eax, 4
00429608 8985 520A0000 mov [ebp+A52], eax
0042960E E9 97000000 jmp RLPack.004296AA
继续F8,来到这里
004296AA 803E 01 cmp byte ptr [esi], 1 /*F8
004296AD ^ 0F85 60FFFFFF jnz RLPack.00429613 /*这里往回跳,不要跟进,光标选中下一行
004296B3 68 00400000 push 4000 /*选中此行,F4运行到此,此步运行有少量延时
004296B8 68 DA020000 push 2DA /*继续F8
004296BD FFB5 560A0000 push dword ptr [ebp+A56]
004296C3 FF95 EF090000 call near [ebp+9EF]
004296C9 68 00400000 push 4000
004296CE 68 00200C00 push 0C2000
004296D3 FFB5 3A0A0000 push dword ptr [ebp+A3A]
004296D9 FF95 EF090000 call near [ebp+9EF]
004296DF E8 55000000 call RLPack.00429739
004296E4 61 popad
004296E5 - E9 1679FDFF jmp RLPack.00401000 /*跨过popad,这个跳转好美,F7跟进
004296EA 61 popad
004296EB C3 retn
来到OEP,典型汇编语言入口:
00401000 6A 00 push 0
00401002 E8 F5930000 call RLPack.0040A3FC ; jmp 到 kernel32.GetModuleHandleA
00401007 A3 F4E14000 mov [40E1F4], eax
0040100C 6A 00 push 0
0040100E 68 2B104000 push RLPack.0040102B
00401013 6A 00 push 0
00401015 68 18D04000 push RLPack.0040D018 ; ASCII "TESTWIN"
0040101A FF35 F4E14000 push dword ptr [40E1F4]
00401020 E8 5F930000 call RLPack.0040A384 ; jmp 到 user32.DialogBoxParamA
00401025 50 push eax
00401026 E8 C5930000 call RLPack.0040A3F0 ; jmp 到 kernel32.ExitProcess
0040102B 55 push ebp
0040102C 8BEC mov ebp, esp
0040102E 817D 0C 1001000>cmp dword ptr [ebp+C], 110
00401035 0F85 FF030000 jnz RLPack.0040143A
Dump & 输入表修复
用OD的插件转储为dumped.exe,如图所示,注意高亮部分:
打开ImportREC v1.6F,选择rlpack.exe进程,在OEP栏中输入1000,点击“获取输入表”按钮,函数全部有效,最后点击“转储到文件”,选择刚才的dumped.exe,生成dumped_.exe
双击生成的dumped_.exe,无法运行,见图
怎么回事?不会是自校验吧,我们先看看pe头有无错误,用pe-tools打开它
打开后如下图,我们打开“可选文件头”看看
果然,pe头大小有问题,我们点击“映像大小”、“文件头大小”、“校验和”后面的三个问号“?”,让pe-tools自动更正:
更正后如下图:
点击“确定”保存,现在我们来运行dumped_.exe试试,成功运行了:
优化PE文件
优化文件很简单,复制一份dumped_.exe作为备用,用FixRes重建资源,将并将资源区段转储为磁盘,具体参数如下图,PVA填21000,
然后再使用pe-tools打开未修复输入表的dumped.exe,将其最后一个区段删除,然后先修复输入表,然后再将磁盘中保存的资源区段放入PE中,这样,优化也就完成了。
想了解更详细的优化过程,请参考本人之前的一篇文章《一个压缩壳偷OEP的脱壳修复》,那篇文章讲得很详细,这里就不再赘述了。
结语:
这个壳脱起来就像压缩壳一样,好像作者没有做太大处理,没有技术含量,可供菜鸟练习,仅仅是学习目的,有不足之处请指出!
感谢:
一蓑烟雨,看雪论坛!
以及各位成员提供的好工具!
2007.2.5 CxLrb
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课