首页
社区
课程
招聘
[原创]RLPack V1.17 Full Edition主程序脱壳与优化
发表于: 2007-2-5 19:27 10849

[原创]RLPack V1.17 Full Edition主程序脱壳与优化

2007-2-5 19:27
10849
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直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
帖子太多都快淹没了,好贴要出现在第一页
2007-2-5 23:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2007-2-6 08:31
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
学习一下!
2007-2-6 16:30
0
雪    币: 204
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
用OD的插件转储时,重建输入表选项是否选中,有什么区别?不重建是为了后面好优化么?还有方式1和方式2有什么区别,一直没发现哪个帖子说明这2个问题。
2007-2-6 17:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好贴,学习ing~~
2007-2-6 17:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习一下!
2007-2-6 22:48
0
雪    币: 46
活跃值: (38)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
把ful版本共享下吧.....
如果可能的话
另外pdf格式非常好,想知道是用什么软件做的
2007-2-7 11:39
0
雪    币: 238
活跃值: (12)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
9
最初由 sbright 发布
把ful版本共享下吧.....
如果可能的话
另外pdf格式非常好,想知道是用什么软件做的


full版本无法共享,原分享人设置了权限。
pdf使用pdf factory创建。
2007-2-9 00:27
0
游客
登录 | 注册 方可回帖
返回