KaQqi 发表于 2017-1-19 10:13

Enterprise Edition rlpack unpack by cqr2287

本帖最后由 cqr2287 于 2017-1-21 10:08 编辑

Rlpac is a famous packers in Windows.

最近我研究了rl壳。所以来发个脱壳教程。
对于rlpack,比较简单。然而Enterprise Edition增加了保护措施。我们必须从新研究。。。
好了,载入od。直接运行,我们发现,他没有反调试。那么我们可以放心跟踪。
先看区段。

从40c0000一直属于rlpack。
00401000 > $57            push edi
00401001   .C7C7 72AFB4DF mov edi,0xDFB4AF72
00401007   .8D3D 5FBA581A lea edi,dword ptr ds:
0040100D   .FFCF          dec edi
0040100F   .0facf7 f2   shrd edi,esi,0xf2
00401013   .0FBDFE      bsr edi,esi
00401016   .F7C7 5CDC3027 test edi,0x2730DC5C
0040101C   .0FBAF7 33   btr edi,0x33
00401020   .0FBBF7      btc edi,esi
00401023   .0FCF          bswap edi
00401025   .BF 64A909DB   mov edi,0xDB09A964
0040102A   .85F6          test esi,esi
0040102C   .81DF AC194648 sbb edi,0x484619AC
00401032   .F7DF          neg edi
载入od我们就发现了许多异常。

我打算采用单步法。f8单步跟踪。
004011D0   .C7C7 F89C2006 mov edi,0x6209CF8
004011D6   .64:8bfe       mov edi,esi
004011D9   .0FA3F7      bt edi,esi
004011DC   .D1C7          rol edi,1
004011DE   .85F6          test esi,esi
004011E0   .0fa4f7 e4   shld edi,esi,0xe4
004011E4   .0FCF          bswap edi
004011E6   .0FBDFE      bsr edi,esi
004011E9   .5F            pop edi
004011EA   .- E9 6BEF0000   jmp 13.0041015A
在区段底部,我们发现一个jmp直接调走了。我们跟踪。

0041015A    60            pushad
0041015B    E8 00000000   call 13.00410160
00410160    83C4 04         add esp,0x4
00410163    8B6C24 FC       mov ebp,dword ptr ss:         ; 13.00410171
00410167    E8 80020000   call 13.004103EC
0041016C    E8 69240000   call 13.004125DA
00410171    837C24 28 01    cmp dword ptr ss:,0x1
00410176    75 0C         jnz short 13.00410184
00410178    8B4424 24       mov eax,dword ptr ss:
0041017C    8985 95450000   mov dword ptr ss:,eax      ; kernel32.BaseThreadInitThunk
00410182    EB 0C         jmp short 13.00410190
00410184    8B85 91450000   mov eax,dword ptr ss:      ; 13.00400000
0041018A    8985 95450000   mov dword ptr ss:,eax      ; kernel32.BaseThreadInitThunk
00410190    E8 0A0D0000   call 13.00410E9F
00410195    EB 03         jmp short 13.0041019A
00410197    24 00         and al,0x0
这里很像oep了。我们先下个断点做个标记。

继续f8.
我们在call ebx处发现了程序错误。
问题签名:
问题事件名称: APPCRASH
应用程序名: 13.exe
应用程序版本: 1.0.0.0
应用程序时间戳: 37d23b4a
故障模块名称: 13.exe
故障模块版本: 1.0.0.0
故障模块时间戳: 37d23b4a
异常代码: c0000005
没关系。我们直接f9,运行到刚才断下位置。
f8单步一次,我们可以发现符合esp定律。
我们刚才走出了区段。而在刚才rlpack区段,我们只发现了一些数学运算指令。
那么我们大胆推断,这里就是真正的数据区段
在这里下硬件执行没用。我们就f8跟踪。
慢点,注意堆栈。
0041025D    FFB5 7A530000   push dword ptr ss:
00410263    56            push esi
00410264    FFD3            call ebx
此处丢失,做个断点记录。直接f9到这。
f7进call。
0041046C    60            pushad
0041046D    8B7424 24       mov esi,dword ptr ss:
00410471    8B7C24 28       mov edi,dword ptr ss:          ; kernel32.BaseThreadInitThunk
00410475    FC            cld
00410476    B2 80         mov dl,0x80
00410478    33DB            xor ebx,ebx                              ; 13.0041046C
0041047A    A4            movs byte ptr es:,byte ptr ds:
0041047B    B3 02         mov bl,0x2
0041047D    E8 6D000000   call 13.004104EF
00410482^ 73 F6         jnb short 13.0041047A
f8跟踪。
004104E0    95            xchg eax,ebp
004104E1    8BC5            mov eax,ebp
004104E3    B3 01         mov bl,0x1
004104E5    56            push esi
004104E6    8BF7            mov esi,edi
004104E8    2BF0            sub esi,eax
004104EA    F3:A4         rep movs byte ptr es:,byte ptr ds:[>
我们在跟踪的过程中,就发现了错误。
我们不下断点,直接运行。

通过刚才在跟踪过程中的硬件执行,找到oep。
00401060   .68 0C354000   push 13.0040350C
00401065   ?E8 F0FFFFFF   call 13.0040105A                         ;jmp 到 msvbvm50.ThunRTMain
0040106A   ?0000          add byte ptr ds:,al
0040106C   ?0000          add byte ptr ds:,al
0040106E   ?0000          add byte ptr ds:,al
00401070   ?3000          xor byte ptr ds:,al
00401072   ?0000          add byte ptr ds:,al
00401074   ?3800          cmp byte ptr ds:,al
00401076   ?0000          add byte ptr ds:,al
00401078   ?0000          add byte ptr ds:,al
0040107A   ?0000          add byte ptr ds:,al
0040107C   .7B 91         jpo short 13.0040100F
0040107E   ?F9            stc
0040107F   .4c            dec esp
00401080   ?B9 63D31192   mov ecx,0x9211D363
00401085   .^ 79 E1         jns short 13.00401068
00401087   ?1A19          sbb bl,byte ptr ds:
00401089   ?e4 72         in al,0x72
0040108B   .3F            aas
下一步就是修复iat了。
我们先不管,做个标记。。。。。。。。。
这里我们使用lordpe和importrec结合修复。
因为在od中dump会提示不是有效的win32程序。
怎么修复还用我说么? 不会可以看我第17课。

错误还挺多。。
修复后即可搞定。。
楼下点评是正确的,但注意,我对图的解释是放在图下面的。这张图是没修复的。。。@xjun


最后说下,脱壳很考验逻辑能力的。我们要懂asm,并找到适当方法去寻找oep。论坛里好多人不善用od以外的工具,这样不好。要多方面去借住力量。
这也算我的感受吧。
谢谢大家。

hao1196561270 发表于 2017-1-19 10:21

感谢分享

丶小明 发表于 2017-1-19 10:30

大神叫我来顶帖~好吧,我啥也看不懂,过来支持支持~
@某中二绅士 召唤术!中二!!!

zhaogang5807 发表于 2017-1-19 10:31

ekanshao 发表于 2017-1-19 10:59

高深莫测之感

某中二绅士 发表于 2017-1-19 11:10

前来支持一个~

懒男, 发表于 2017-1-19 11:26

全是英文 看不懂

tzxinqing 发表于 2017-1-19 11:36

全是英文 看不懂

感情 发表于 2017-1-19 11:42

看不懂啊。。

萌牛工厂 发表于 2017-1-19 12:32

谢谢楼主分享
页: [1] 2 3
查看完整版本: Enterprise Edition rlpack unpack by cqr2287