ruyi7952 发表于 2007-2-24 18:43:49

Yoda's Crypter v1.3 脱壳笔记 + 动画演示

【文章标题】: Yoda's Crypter v1.3 脱壳笔记
【文章作者】: 王猛
【作者邮箱】: [email protected]
【作者主页】: www.81mil.cn
【作者QQ号】: 12985462
【软件名称】: QQ空间人精灵
【软件大小】: 283 KB
【下载地址】: 自己搜索下载
【加壳方式】: Yoda's Crypter v1.3!
【保护方式】: 网络认证
【编写语言】: VB6
【使用工具】: ProtectionID v5.2C, OllyDBG v1.10
【操作平台】: Windows XP SP2
【软件介绍】: 刷QQ空间人气的小工具!
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一、查壳

将文件拖到 ProtectionID v5.2C 识别该程序使用 Yoda's Crypter v1.3 加密!

二、脱壳步骤

程序载入后停在:

004D9060 >55            PUSH EBP
004D9061    8BEC            MOV EBP,ESP
004D9063    53            PUSH EBX
004D9064    56            PUSH ESI
004D9065    57            PUSH EDI
004D9066    60            PUSHAD

在[命令]工具条,输入 bp IsDebuggerPresent 命令并按[回车键]下断点。如果您看不到该工具条,可以使用快捷键ALT+F1打开。

按F9,程序运行到断点IsDebuggerPresent处后自动停止,我们会看到下面的代码:

7C813093 >64:A1 18000000MOV EAX,DWORD PTR FS:
7C813099    8B40 30         MOV EAX,DWORD PTR DS:
7C81309C    0FB640 02       MOVZX EAX,BYTE PTR DS:
7C8130A0    C3            RETN

按F8跟进到7C8130A0处的RETN指令程序后,程序将返回并出现下列代码,我们开始寻找POPAD指令。

004D988A    0BC0            OR EAX,EAX
004D988C    74 02         JE SHORT QQ空间人.004D9890
004D988E    61            POPAD                                    ; 第一次
004D988F    C3            RETN
…… …… ……
004D98F7    CD 07         INT 7
004D98F9    61            POPAD                                    ; 第二次
004D98FA    EB 02         JMP SHORT QQ空间人.004D98FE
004D98FC    CD 01         INT 1
004D98FE    C3            RETN
…… …… ……
004D9975    61            POPAD                                    ; 第三次
004D9976    50            PUSH EAX
004D9977    33C0            XOR EAX,EAX
004D9979    64:FF30         PUSH DWORD PTR FS:
004D997C    64:8920         MOV DWORD PTR FS:,ESP
004D997F   /EB 01         JMP SHORT QQ空间人.004D9982
004D9981   |CC            INT3
004D9982   \0000            ADD BYTE PTR DS:,AL

第三次出现的POPAD指令正是我们需要的!鼠标选中 004D9975 按F2下断点后按F9
运行到这里,之后按F8步进。我们步进到 004D9982 会跳转到系统领空,会出现下面的代码:

7C92EAF0    8B1C24          MOV EBX,DWORD PTR SS:
7C92EAF3    51            PUSH ECX
7C92EAF4    53            PUSH EBX
7C92EAF5    E8 C78C0200   CALL ntdll.7C9577C1
7C92EAFA    0AC0            OR AL,AL
7C92EAFC    74 0C         JE SHORT ntdll.7C92EB0A
7C92EAFE    5B            POP EBX
7C92EAFF    59            POP ECX
7C92EB00    6A 00         PUSH 0
7C92EB02    51            PUSH ECX
7C92EB03    E8 11EBFFFF   CALL ntdll.ZwContinue

用F8键步进到 7C92EB03 ,观察寄存器窗口,注意EDI中出现的值,我们要在寻找内存中此值出现的地址。

寄存器窗口信息如下:
EAX 00000001
ECX 0012FCE0
EDX 7C9237D8 ntdll.7C9237D8
EBX 0012FCC4
ESP 0012FCBC
EBP 0012FFC0
ESI FFFFFFFF
EDI 7C930738 ntdll.7C930738
EIP 7C92EB03 ntdll.7C92EB03

内存中信息如下:

0012FD7C   7C930738ntdll.7C930738
0012FD80   FFFFFFFF
0012FD84   2E009B00刷
0012FD88   7C92EB94ntdll.KiFastSystemCallRet
0012FD8C   0012FFB0
0012FD90   00000000
0012FD94   0012FFC0
0012FD98   004D8017QQ空间人.004D8017

0023FD7C地址出现了刚才我们要找到EDI中出现的数值 7C930738 。向下几行出现的QQ空间人.004D8017便是我们要找的第一层入口点。下面,处理第二层壳,这层壳同UPX有些相似,作PE检测时老版本软件真就识别为UPX〈修改版〉。

我们在命令行下断点,使用命令 bp 004D8017,并按F9。我们将看到如下代码:
004D8017    90            NOP
004D8018    90            NOP
004D8019    B8 F45A4D00   MOV EAX,QQ空间人.004D5AF4
004D801E    FFE0            JMP EAX

在这里我们将开始脱第二层壳!一直用按F8键步进,我们一路走到 004D5960时,就要瞪大眼睛了!这里便是第二层壳的SFX入口!这一步的工作可以完全按照UPX脱壳准则一路向下,利用F4+F8跳过循环和回跳。

004D5960    60            PUSHAD
004D5961    BE 00204900   MOV ESI,QQ空间人.00492000
004D5966    8DBE 00F0F6FF   LEA EDI,DWORD PTR DS:
004D596C    57            PUSH EDI
004D596D    83CD FF         OR EBP,FFFFFFFF
004D5970    EB 10         JMP SHORT QQ空间人.004D5982

遵照刚才说过的"F4+F8跳过循环和回跳"原则,谨慎操作!和UPX一样一不留神,程序一启动你可就要重新来过了!

当我们走到 004d5A5F - 004d5A84时,我们遇到了第一个也是唯一一个循环,在这里要小心格外小心!!到了这里距离OEP只有一步之遥了!

004D5A5F    3C 01         CMP AL,1
004D5A61^ 77 F7         JA SHORT QQ空间人.004D5A5A
004D5A63    803F 04         CMP BYTE PTR DS:,4
004D5A66^ 75 F2         JNZ SHORT QQ空间人.004D5A5A
004D5A68    8B07            MOV EAX,DWORD PTR DS:
004D5A6A    8A5F 04         MOV BL,BYTE PTR DS:
004D5A6D    66:C1E8 08      SHR AX,8
004D5A71    C1C0 10         ROL EAX,10
004D5A74    86C4            XCHG AH,AL
004D5A76    29F8            SUB EAX,EDI
004D5A78    80EB E8         SUB BL,0E8
004D5A7B    01F0            ADD EAX,ESI
004D5A7D    8907            MOV DWORD PTR DS:,EAX
004D5A7F    83C7 05         ADD EDI,5
004D5A82    88D8            MOV AL,BL
004D5A84^ E2 D9         LOOPD SHORT QQ空间人.004D5A5F
004D5A86    8DBE 00300D00   LEA EDI,DWORD PTR DS:
004D5A8C    8B07            MOV EAX,DWORD PTR DS:
004D5A8E    09C0            OR EAX,EAX
004D5A90    74 45         JE SHORT QQ空间人.004D5AD7

点选 004D5A8C 一行按F4键跳过!向下拉代码,我们在不远处就可以看到 004D5AD7出现了POPAD下一行004D5AD8紧跟着一个jmp跳转指令!还记得怎么找寻UPX的OEP吗?嘿嘿,我们找到了!

004D5ACF^\EB D8         JMP SHORT QQ空间人.004D5AA9
004D5AD1    FF96 B46D0D00   CALL DWORD PTR DS:
004D5AD7    61            POPAD
004D5AD8- E9 47B7F2FF   JMP QQ空间人.00401224 ; <== OEP!!

点选004D5AD7一行,按F4跳过来!再按一下F8跳到00401224,这里就是OEP!


--------------------------------------------------------------------------------
【经验总结】
本想参照 yC v1.2 来脱 yC v1.3结果无功而返,最后才搞明白我碰到的是一个双层壳!

--------------------------------------------------------------------------------
【版权声明】: 本文由王猛(www.81mil.cn)原创撰写,转载请注明作者并保持文章的完整,谢谢!

                                                       2007年02月24日 18:34:30


https://www.chinapyg.com/viewthread.php?tid=13296&extra=page%3D1

我制作了配套视频,有兴趣的可以看视频!附赠WORD要点彩色提示文案一套。(*^__^*) 嘻嘻……!

[ 本帖最后由 ruyi7952 于 2007-2-26 20:42 编辑 ]

glts 发表于 2007-2-24 19:03:40

支持兄弟~~~

fizz 发表于 2007-2-25 17:07:08

是那种高手级别的人!太強暸

firecow 发表于 2007-2-25 18:41:46

我好想学会啊!

ruyi7952 发表于 2007-2-26 20:38:35

https://www.chinapyg.com/viewthread.php?tid=13296&extra=page%3D1

我制作了配套视频,有兴趣的可以看视频!附赠WORD要点彩色提示文案一套。(*^__^*) 嘻嘻……!

windtrace 发表于 2007-2-28 14:41:36

写的有点复杂,而且思维方面的内容太少,新手不太容易看

seo001 发表于 2007-2-28 16:01:49

认真的学习一下.

ruyi7952 发表于 2007-2-28 16:42:50

我不是有意写复杂的,Yoda's 做的两个壳子都很复杂的!国外游戏外挂很多用这个壳子,因为它和UPX压缩壳一样是开放源代码的自由软件!

wyp312 发表于 2007-3-9 14:21:07

下来好好学习学习.

dryzh 发表于 2007-4-7 18:16:05

学习啦。。大致看了一下。
没看懂。。要搞视频来学习。。才懂
页: [1] 2
查看完整版本: Yoda's Crypter v1.3 脱壳笔记 + 动画演示