发新话题
打印

[转载]Morphine的简单脱壳方法

[转载]Morphine的简单脱壳方法

文章作者:fly

目标页面:http://bbs.pediy.com/showthread. ... 30&pagenumber=3
软件简介:Morphine is very unique application for PE files encryption.

【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

【调试环境】:WinXP、Ollydbg、PEiD、PETools

—————————————————————————————————
【脱壳过程】:


很少注意这个Morphine壳,Morphine只是对Section Table动了手脚,没有加密输入表等。
感觉更像是一个简单的“伪装”壳罢了。看到论坛里这几天有兄弟讨论这个,所以抽点时间看了看。
jingulong没时间写教程,我就来代写一下吧。
脱壳目标用csjwaman上传之Morphine加壳的“PE文件分析器.exe”。
—————————————————————————————————
一、恢复 Section Table
复制内容到剪贴板
代码:
005F125B    F8           clc
//进入Ollydbg后暂停在这
005F125C    85C9          test ecx,ecx
005F125E    F5           cmc
005F125F    57           push edi
005F1260    74 05         je short PE.005F1267
下断:BP VirtualAlloc
中断后取消断点,Alt+F9返回
复制内容到剪贴板
代码:
005F10FD    FFD3          call ebx
005F10FF    59           pop ecx
//返回这里
005F1100    85C0          test eax,eax
005F1102    75 13         jnz short PE.005F1117
005F1104    6A 40         push 40
005F1106    68 00100000     push 1000
005F110B    51           push ecx
005F110C    50           push eax
005F110D    FFD3          call ebx
005F110F    85C0          test eax,eax
005F1111    0F84 3A010000    je PE.005F1251
—————————————————————————
看看寄存器情况:
复制内容到剪贴板
代码:
EAX 00400000
ECX 77E5986B kernel32.77E5986B
EDX 7FFE0304
EBX 77E5980A kernel32.VirtualAlloc
ESP 0012F7A0
EBP 0012FFB0
ESI 005F18FB ASCII "CODE"
EDI 0012FDB8 ASCII "PE"
EIP 005F10FF PE.005F10FF
转存005F18FB处看看,这里就是原来的段表信息:
复制内容到剪贴板
代码:
005F18FB  43 4F 44 45 00 00 00 00 90 62 0B 00 00 10 00 00   CODE....恇
005F190B  00 64 0B 00 00 04 00 00 00 00 00 00 00 00 00 00   .d
005F191B  00 00 00 00 60 00 00 E0 44 41 54 41 00 00 00 00   ....`.. DATA....
005F192B  98 22 00 00 00 80 0B 00 00 24 00 00 00 68 0B 00   ?...
005F193B  00 00 00 00 00 00 00 00 00 00 00 00 60 00 00 E0   ............`..?
005F194B  42 53 53 00 00 00 00 00 B5 0C 00 00 00 B0 0B 00   BSS.....?...?.
005F195B  00 00 00 00 00 8C 0B 00 00 00 00 00 00 00 00 00   .....?.........
005F196B  00 00 00 00 60 00 00 E0 2E 69 64 61 74 61 00 00   ....`..?idata..
005F197B  7A 26 00 00 00 C0 0B 00 00 28 00 00 00 8C 0B 00   z&...?..(...?.
005F198B  00 00 00 00 00 00 00 00 00 00 00 00 60 00 00 E0   ............`..?
005F199B  2E 74 6C 73 00 00 00 00 10 00 00 00 00 F0 0B 00   .tls........?.
005F19AB  00 00 00 00 00 B4 0B 00 00 00 00 00 00 00 00 00   .....?.........
005F19BB  00 00 00 00 60 00 00 E0 2E 72 64 61 74 61 00 00   ....`..?rdata..
005F19CB  18 00 00 00 00 00 0C 00 00 02 00 00 00 B4 0B 00   ...........?.
005F19DB  00 00 00 00 00 00 00 00 00 00 00 00 60 00 00 F0   ............`..?
005F19EB  2E 72 65 6C 6F 63 00 00 44 B1 00 00 00 10 0C 00   .reloc..D?....
005F19FB  00 B2 00 00 00 B6 0B 00 00 00 00 00 00 00 00 00   .?..?.........
005F1A0B  00 00 00 00 60 00 00 F0 2E 72 73 72 63 00 00 00   ....`..?rsrc...
005F1A1B  00 14 02 00 00 D0 0C 00 00 14 02 00 00 68 0C 00   ...?....h..
005F1A2B  00 00 00 00 00 00 00 00 00 00 00 00 60 00 00 F0   ............`..?
005F1A3B  00 00 00 00 00 00 00 00 00 00 00 00 00 F0 0E 00   .............?.
005F1A4B  00 00 00 00 00 7C 0E 00 00 00 00 00 00 00 00 00   .....|.........
005F1A5B  00 00 00 00 40 00 00 50 00 00 00 00 00 00 00 00   ....@..P........
—————————————————————————
下面开始解压数据:
复制内容到剪贴板
代码:
//005F1703+1F8=005F18FB   块表信息开始在005F18FB,不解压到PE中
//改为:ADD ECX,260      这样加大Size就可以了 ★
005F1128    F3:A4         rep movs byte ptr es:[edi],byte ptr ds:[esi]
//ESI=005F1703+360=005F1A63
005F112A    8B45 08        mov eax,dword ptr ss:[ebp+8]
005F112D    0340 3C        add eax,dword ptr ds:[eax+3C]
005F1130    0FB640 06      movzx eax,byte ptr ds:[eax+6]
005F1134    8D7D C8        lea edi,dword ptr ss:[ebp-38]
005F1137    57           push edi
005F1138    6A 0A         push 0A
005F113A    59           pop ecx
//别忘了要把ESI的值还原为005F18FB  ★
005F113B    F3:A5         rep movs dword ptr es:[edi],dword ptr ds:[esi]
005F113D    5F           pop edi
005F113E    8B57 14        mov edx,dword ptr ds:[edi+14]
005F1141    85D2          test edx,edx
005F1143    74 14         je short PE.005F1159
005F1145    56           push esi
005F1146    8B75 08        mov esi,dword ptr ss:[ebp+8]
005F1149    01D6          add esi,edx
005F114B    8B4F 10        mov ecx,dword ptr ds:[edi+10]
005F114E    8B57 0C        mov edx,dword ptr ds:[edi+C]
005F1151    8B7D F4        mov edi,dword ptr ss:[ebp-C]
005F1154    01D7          add edi,edx
005F1156    F3:A4         rep movs byte ptr es:[edi],byte ptr ds:[esi]
005F1158    5E           pop esi
005F1159    48           dec eax
005F115A    75 D8         jnz short PE.005F1134
//代码解压完毕
005F115C    8B55 F4        mov edx,dword ptr ss:[ebp-C]
005F115F    2B55 FC        sub edx,dword ptr ss:[ebp-4]
005F1162    74 5C         je short PE.005F11C0
—————————————————————————————————
二、输入表


不需要用ImportREC来修复输入表,处理一下直接用原来的IAT RVA就行了
复制内容到剪贴板
代码:
005F11C0    8B9D 88FEFFFF    mov ebx,dword ptr ss:[ebp-178]
//下面开始处理输入表  [ebp-178]保存的是IAT RVA
005F11C6    85DB          test ebx,ebx
005F11C8    74 64         je short PE.005F122E
//因为Morphine没有加密输入表,所以我们把EBX值清0,使这里直接跳转
—————————————————————————————————
三、OEP、Dump、完成脱壳


OK,现在可以直接去OEP了
复制内容到剪贴板
代码:
005F122E    8B4D F4        mov ecx,dword ptr ss:[ebp-C]
005F1231    8BBD 30FEFFFF    mov edi,dword ptr ss:[ebp-1D0]
005F1237    01CF          add edi,ecx
005F1239    64:8B05 18000000  mov eax,dword ptr fs:[18]
005F1240    8B40 30        mov eax,dword ptr ds:[eax+30]
005F1243    8948 08        mov dword ptr ds:[eax+8],ecx
005F1246    8B40 0C        mov eax,dword ptr ds:[eax+C]
005F1249    8B40 0C        mov eax,dword ptr ds:[eax+C]
005F124C    8948 18        mov dword ptr ds:[eax+18],ecx
005F124F    FFD7          call edi      ; 004B7220  ★
//飞向光明之巅
复制内容到剪贴板
代码:
004B7220    55           push ebp
//OEP   ^O^
004B7221    8BEC          mov ebp,esp
004B7223    83C4 F0        add esp,-10
004B7226    B8 A86F4B00     mov eax,4B6FA8
004B722B    E8 6CF4F4FF     call 0040669C
004B7230    A1 C4A04B00     mov eax,dword ptr ds:[4BA0C4]
004B7235    8B00          mov eax,dword ptr ds:[eax]
004B7237    E8 C48CFCFF     call 0047FF00
拿出PETools,为何不用LordPE?发现LordPE无法直接Dump完全这个EXE进程的数据。
设置PETools的任务察看器选项为全部不选择,完全dump这个进程。
此时程序原来的图标依旧没显示出来。用PEditor打开Dumped.exe,执行dumpfixer(RS=VS & RO=VO)!

OK了,正常运行,脱壳完成!
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

发新话题