machenglin 发表于 2006-4-28 09:32:14

一次手脱arm+upx双层壳+自校验

一次手脱arm+upx双层壳+自校验

【脱壳文件】Easy_CD_Ripper 2.37
【下载地址】http://sy.newhua.com/down/ezcdr_inst.exe
【加壳方式】Armadillo 3.00a-3.61->Silicon Realms Toolworks+UPX 0.89.6-1.02/1.05-1.24 stub ->Markus & Laszlo
【作者声明】:只是感兴趣,没有其他目的。错误之处敬请诸位前辈不吝赐教
【调试环境】:Winxp、OllyDBD、PEiD
【软件信息】:Easy CD Ripper可将CD音乐及WAV直接转换成MP3、WMA、VQF格式的工具,采用全新快速的MP3编码(LAME v3.89)、支持CDDB、且使用上相当简单快速


00561000 E>60                pushad                              ; OD入口点
00561001   E8 00000000       call Easy_CD_.00561006
00561006   5D                pop ebp
00561007   50                push eax
00561008   51                push ecx
00561009   EB 0F             jmp short Easy_CD_.0056101A
---------------------------------------------------------------------------------------------------------------
HE GetModuleHandleA   Shift+F9 一次。

堆栈中:
===============================================================
0012D264   00BB519B   /CALL 到 GetModuleHandleA 来自 00BB5195
0012D268   0012D3A0   \pModule = "kernel32.dll"
===============================================================

删除断点,Alt+F9 返回。
00BB519B   8B0D 80D7BD00   mov ecx,dword ptr ds:       ; 来到这里。
00BB51A1   89040E            mov dword ptr ds:,eax
00BB51A4   A1 80D7BD00       mov eax,dword ptr ds:
00BB51A9   393C06            cmp dword ptr ds:,edi
00BB51AC   75 16             jnz short 00BB51C4
00BB51AE   8D85 B4FEFFFF   lea eax,dword ptr ss:
00BB51B4   50                push eax
00BB51B5   FF15 B850BD00   call dword ptr ds:          ; kernel32.LoadLibraryA
00BB51BB   8B0D 80D7BD00   mov ecx,dword ptr ds:
00BB51C1   89040E            mov dword ptr ds:,eax
00BB51C4   A1 80D7BD00       mov eax,dword ptr ds:
00BB51C9   393C06            cmp dword ptr ds:,edi
00BB51CC   0F84 AD000000   je 00BB527F                         ; Magic Jump! 修改为:jmp 00BB527F★
00BB51D2   33C9            xor ecx,ecx
00BB51D4   8B03            mov eax,dword ptr ds:
00BB51D6   3938            cmp dword ptr ds:,edi
00BB51D8   74 06             je short 00BB51E0
---------------------------------------------------------------------------------------------------------------
BP GetCurrentThreadId <10000000,Shift+F9 运行。

7C809737 k>64:A1 18000000    mov eax,dword ptr fs:
7C80973D   8B40 24         mov eax,dword ptr ds:
7C809740   C3                retn
7C809741   90                nop

取消断点。Alt+F9 返回。
00BCCF47   A3 8C16BE00       mov dword ptr ds:,eax       ; 到这里了。
00BCCF4C   E8 5F85FEFF       call 00BB54B0
00BCCF51   6A 00             push 0
00BCCF53   E8 51E0FEFF       call 00BBAFA9
00BCCF58   59                pop ecx
00BCCF59   E8 074CFFFF       call 00BC1B65
。。。。。。。。。。
00BCCFA5   83F9 01         cmp ecx,1
00BCCFA8   75 22             jnz short 00BCCFCC
00BCCFAA   FF76 04         push dword ptr ds:
00BCCFAD   FF76 08         push dword ptr ds:
00BCCFB0   6A 00             push 0
00BCCFB2   E8 AE4BFFFF       call 00BC1B65
00BCCFB7   50                push eax
00BCCFB8   A1 8016BE00       mov eax,dword ptr ds:
00BCCFBD   8B48 60         mov ecx,dword ptr ds:
00BCCFC0   3348 58         xor ecx,dword ptr ds:
00BCCFC3   3348 34         xor ecx,dword ptr ds:
00BCCFC6   2BF9            sub edi,ecx
00BCCFC8   FFD7            call edi                            ; 进入,里面是ARM的OEP!
00BCCFCA   8BD8            mov ebx,eax

进入00BCCFC8。
00516C30   60                pushad                              ; 这里是ARM的OEP!
00516C31   BE 00204C00       mov esi,Easy_CD_.004C2000
00516C36   8DBE 00F0F3FF   lea edi,dword ptr ds:
00516C3C   C787 C0F00C00 8C0>mov dword ptr ds:,40B0C8>
00516C46   57                push edi
00516C47   83CD FF         or ebp,FFFFFFFF
00516C4A   EB 0E             jmp short Easy_CD_.00516C5A
00516C4C   90                nop
---------------------------------------------------------------------------------------------------------------
开始脱upx。
F8一次,到00516C31,注意ESP=0012F554。
hr 0012F554,F9一次。

00516D9B   ^\E9 0884FBFF       jmp Easy_CD_.004CF1A8
00516DA0   B8 6D5100F0       mov eax,F000516D
00516DA5   6D                ins dword ptr es:,dx
00516DA6   51                push ecx
00516DA7   00C0            add al,al
00516DA9   004D 00         add byte ptr ss:,cl
00516DAC   0000            add byte ptr ds:,al

再F8一次。

004CF1A8   55                push ebp                            ; upx的OEP!
004CF1A9   8BEC            mov ebp,esp
004CF1AB   B9 05000000       mov ecx,5
004CF1B0   6A 00             push 0
004CF1B2   6A 00             push 0
004CF1B4   49                dec ecx
004CF1B5   ^ 75 F9             jnz short Easy_CD_.004CF1B0
004CF1B7   51                push ecx
004CF1B8   53                push ebx
004CF1B9   B8 40EE4C00       mov eax,Easy_CD_.004CEE40
004CF1BE   E8 797AF3FF       call Easy_CD_.00406C3C
004CF1C3   33C0            xor eax,eax
004CF1C5   55                push ebp
004CF1C6   68 D7F34C00       push Easy_CD_.004CF3D7
004CF1CB   64:FF30         push dword ptr fs:
004CF1CE   64:8920         mov dword ptr fs:,esp
004CF1D1   8D55 EC         lea edx,dword ptr ss:
004CF1D4   B8 01000000       mov eax,1
004CF1D9   E8 DE38F3FF       call Easy_CD_.00402ABC
004CF1DE   8B45 EC         mov eax,dword ptr ss:
004CF1E1   BA ECF34C00       mov edx,Easy_CD_.004CF3EC         ; ASCII "/reg"
004CF1E6   E8 555DF3FF       call Easy_CD_.00404F40
---------------------------------------------------------------------------------------------------------------
运行LordPE,DUMP,保存为dumped.exe。
运行RecImport,OEP=CF1A8,RVA=D617C,获取输入表,剪切2个无效指针,得到434个指针,抓取修复文件,保存为dumped_.exe。
关闭OD。

自校验解除

运行脱壳文件,在启动界面结束后,CPU占用到100%,系统资源快被它消耗尽了!

这个软件不能改动文件名,先把dumped_.exe修改成未脱壳的文件名Easy_CD_Ripper。
打开OD,载入修改成未脱壳的文件名的Easy_CD_Ripper.exe。
      
按照狂吃内存的现象,学习了fly兄弟的教程,知道自校验失败的话就会爆发“窗口炸弹”了。

下断:BP FileTimeToLocalFileTime 。
一路F9,待启动界面消失后,就要慢了,注意堆栈的变化。
=============================================================================
0012F8CC   00409674   /CALL 到 FileTimeToLocalFileTime 来自 Easy_CD_.0040966F
0012F8D0   0012F8F0   |pFileTime = 0012F8F0
0012F8D4   0012FA1C   \pLocalFileTime = 0012FA1C
=============================================================================
在pFileTime = 0012F8F0时,开始F8。
来到这里。
004CB51E    /74 0F             je short Easy_CD_.004CB52F          ; je 004CB52F-->jmp 004CB52F
004CB520    |B8 00004000       mov eax,Easy_CD_.00400000         ; ASCII "MZP"
004CB525    |E8 76D6F3FF       call Easy_CD_.00408BA0
004CB52A    |8945 DC         mov dword ptr ss:,eax
004CB52D   ^|EB F1             jmp short Easy_CD_.004CB520
004CB52F    \8BC3            mov eax,ebx
004CB531   E8 B687F3FF       call Easy_CD_.00403CEC
004CB536   A1 A0374D00       mov eax,dword ptr ds:
004CB53B   8038 00         cmp byte ptr ds:,0
004CB53E   74 1B             je short Easy_CD_.004CB55B
004CB540   A1 A0374D00       mov eax,dword ptr ds:
004CB545   8078 01 00      cmp byte ptr ds:,0
004CB549   75 10             jnz short Easy_CD_.004CB55B

修改004CB51E,je 004CB52F-->jmp 004CB52F,保存文件。

---------------------------------------------------------------------------------------------------------------
运行脱壳文件,OK。

风球 发表于 2006-4-28 10:32:41

支持好文```

BP FileTimeToLocalFileTime学习了!!!

machenglin 发表于 2006-4-30 20:25:59

风球 兄弟最近好吧。:)

hyd009 发表于 2006-5-1 17:33:08

解除自效验要认真学习一下

xzh119 发表于 2006-5-2 23:15:47

嗨,我怎么看不懂呢,还是知识太少了喔。

jacking19 发表于 2006-5-12 19:39:33

好东西啊~~~现在还是看不懂以后要学习学习

风球 发表于 2006-5-13 10:22:24

原帖由 machenglin 于 2006-4-30 20:25 发表
风球 兄弟最近好吧。:)

呵```还好。:P 向兄弟学习中。。。

野猫III 发表于 2006-5-13 17:32:27

原帖由 风球 于 2006-5-13 10:22 发表


呵```还好。:P 向兄弟学习中。。。

跟着来学习!

龙翔 发表于 2006-5-14 12:28:40

刚刚开始接触,好深奥啊,学习ing~~~

痕迹 发表于 2006-6-18 07:41:21

收藏學習之
謝謝了
页: [1] 2
查看完整版本: 一次手脱arm+upx双层壳+自校验