2666fff 发表于 2010-7-31 18:35

手脱穿山甲(Armadillo)6.X CopyMemII + Debug Blocker

本帖最后由 2666fff 于 2010-7-31 19:16 编辑

视频版:http://www.52pojie.cn/thread-55032-1-1.html

【文章标题】: 手脱穿山甲(Armadillo)6.X CopyMemII + Debug Blocker
【文章作者】: 2666fff
【作者邮箱】: wan0001@brauer.vic.edu.au
【软件名称】: DNF香妃
【下载地址】: 自己搜索下载
【加壳方式】: 非标准版穿山甲
【使用工具】: ArmaDetach.exe IR loadpe UIF OD
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
这次的目标是一个DNF的外挂,壳是穿山甲的,先来用 Armadillo_Find_Protected 查壳
结果如下:
<- 31-07-2010 12:26:10 - ->
C:\Documents and Settings\Administrator\桌面\Dnf香妃.exe
目标为Armadillo保护
!- 保护系统级别为 (专业版)
!-<所使用的保护模式>
屏蔽调试器
双进程模式
!- <备份密钥设置>
可变的备份钥匙
!- <目标程序压缩设置>
最好 / 最慢的压缩方式
!<其它保护设置>
关闭监视进程
版本号 6.60 19-05-2009
<- 共消耗时间 00时00分07秒672毫秒 ->

可以看出用的是较新版的ARm加的壳,非标准的,完全手脱比较麻烦,还好,有ArmaDetach.exe 这款工具。

首先运行 ArmaDetach.exe,左边选中 CopyMem-II,右边将 Debug-Block IAT res的勾给去掉,因为这个在新版穿山甲上不适用。

拖拽目标文件进去。

Filename: Dnf香妃.exe
Parent process iD:
Processing...

Professional Edition

Debug-Blocker protection detected
CopyMem-II protection detected

Crypto call found:
Child process iD:   
Entry point:      
Original bytes:   
Detached successfully :)

OD附加 B44 进程。
OEP原本字节:558BEC6A

打开OD,点击菜单栏的 文件-附加 找到ID为 B44的进程,点击附加,附加值后停在ntdll领空。
alt+F9返回,可以看到OEP是被修改过的,所以我们需要将他还原。

原OEp

0040AF10- EB FE         JMP SHORT Dnf香妃.0040AF10
0040AF12    90            NOP
0040AF13    90            NOP
0040AF14    FF68 C0         JMP FAR FWORD PTR DS:            ; Far jump
0040AF17    DD40 00         FLD QWORD PTR DS:
0040AF1A    68 7AB04000   PUSH Dnf香妃.0040B07A                      ; JMP to msvcrt._except_handler3
0040AF1F    64:A1 00000000MOV EAX,DWORD PTR FS:
0040AF25    50            PUSH EAX
0040AF26    64:8925 0000000>MOV DWORD PTR FS:,ESP

选中开头一些代码,复制 558BEC6A 进入OD - 二进制粘贴。

还原之后OEP:

0040AF10    55            PUSH EBP
0040AF11    8BEC            MOV EBP,ESP
0040AF13    6A FF         PUSH -1
0040AF15    68 C0DD4000   PUSH Dnf香妃.0040DDC0
0040AF1A    68 7AB04000   PUSH Dnf香妃.0040B07A                      ; JMP to msvcrt._except_handler3
0040AF1F    64:A1 00000000MOV EAX,DWORD PTR FS:
0040AF25    50            PUSH EAX
0040AF26    64:8925 0000000>MOV DWORD PTR FS:,ESP


补完OEp后,先用IR打开进程,查看下输入表先。
发现无效的很多,证明输入表被擦出了。

看到第一个IAT地址

FThunk: 0000D000 NbFunc: 000000F9
1 0000D000 kernel32.dll 01AB

记着最初的地址:

   0000d000
即 0040d000

这个地址便是IAT的起始位置。

再开一个OD,以及 ArmaDetach.exe,这次选中Debug-Blocker,同样去掉右边的勾。

Filename: Dnf香妃.exe
Parent process iD:
Processing...

Professional Edition

Debug-Blocker protection detected
CopyMem-II protection detected

Child process iD:   
Entry point:      
Original bytes:   
Detached successfully :)

这次的进程ID为 00000F00,OEP原字节 60E80000,用新开OD附加进程,alt+f9返回,补OEP。

这次我们是要找到完整的IAT所以,需要处理magic jmp,刚才我们找到的IAT起始位置为 0040d000,在左下角 数据窗口中,
按 ctrl+g 转到 0040d000 处,并下硬件写入断点,shift+f9 运行。

暂停第一次后,再次运行,0040d000等出现IAT字样:

0040D0007C835BF8kernel32.GetShortPathNameA
0040D0047C864178kernel32.Process32Next
0040D0087C802367kernel32.CreateProcessA
0040D00C7C835E12kernel32.GetTempPathA
0040D01000F18E30
0040D0147C809FC5kernel32.LoadResource
0040D0187C80BC79kernel32.SizeofResource

这样就可以了,开始找magic jmp,取消硬件断点。

F8单步,在主窗口跟踪,漫长的单步至:

00F48A9A    8B85 54D2FFFF   MOV EAX,DWORD PTR SS:
00F48AA0    8B0D EC3BFA00   MOV ECX,DWORD PTR DS:
00F48AA6    333481          XOR ESI,DWORD PTR DS:
00F48AA9    39B5 7CD4FFFF   CMP DWORD PTR SS:,ESI
00F48AAF    75 11         JNZ SHORT 00F48AC2                     ; magic jump,在此处下硬件执行断点。
00F48AB1    8B95 50D2FFFF   MOV EDX,DWORD PTR SS:
00F48AB7    8B42 04         MOV EAX,DWORD PTR DS:
00F48ABA    8985 78D4FFFF   MOV DWORD PTR SS:,EAX
00F48AC0    EB 05         JMP SHORT 00F48AC7
00F48AC2^ E9 3BFFFFFF   JMP 00F48A02
00F48AC7    C685 87D4FFFF 0>MOV BYTE PTR SS:,0
00F48ACE    83BD BCD7FFFF 0>CMP DWORD PTR SS:,0
00F48AD5    75 34         JNZ SHORT 00F48B0B
00F48AD7    8A0D 4413FA00   MOV CL,BYTE PTR DS:

JNZ处就是magic jmp了,跟之前版本不一样,下硬件执行断点。

此时可退出当前进程,再开 ArmaDetach.exe 再次选中Debug-Blocker,同样去掉右边的勾。
OD再次附加,这次补过OEP后。直接 shift+f9 运行,OD会自己中断到 magic jmp 处。

00F48AAF   /75 11         JNZ SHORT 00F48AC2                     ; magic jmp,将JNZ改为JMP
00F48AB1   |8B95 50D2FFFF   MOV EDX,DWORD PTR SS:
00F48AB7   |8B42 04         MOV EAX,DWORD PTR DS:
00F48ABA   |8985 78D4FFFF   MOV DWORD PTR SS:,EAX
00F48AC0   |EB 05         JMP SHORT 00F48AC7
00F48AC2^\E9 3BFFFFFF   JMP 00F48A02
00F48AC7    C685 87D4FFFF 0>MOV BYTE PTR SS:,0

修改后:

00F48AAF   /EB 11         JMP SHORT 00F48AC2                     ; magic jmp,将JNZ改为JMP
00F48AB1   |8B95 50D2FFFF   MOV EDX,DWORD PTR SS:
00F48AB7   |8B42 04         MOV EAX,DWORD PTR DS:
00F48ABA   |8985 78D4FFFF   MOV DWORD PTR SS:,EAX
00F48AC0   |EB 05         JMP SHORT 00F48AC7
00F48AC2^\E9 3BFFFFFF   JMP 00F48A02
00F48AC7    C685 87D4FFFF 0>MOV BYTE PTR SS:,0

换回第一个OD,数据窗口转至 0040d000, 然后一直下找到IAT的结束位置:

0040D3D8769B2A37ole32.CoInitialize
0040D3DC76A061BAole32.OleRun                  ;IAt结束位置。
0040D3E000FC15C0
0040D3E400000000
0040D3E800401010Dnf香妃.00401010                ;此处出现 文件名字样,证明IAT结束过了。


按住shift,鼠标左键IAT结束处,也就是全选上整个IAT。

0040d3dc 就是IAT结束了,再进入第二个OD,数据窗口 ctrl+g 转到 0040d3dc ,先删除之前的硬件执行断点,然后
在此处下硬件写入断点。
运行,出现完整的IAT数据了,先转到0040d0000,然后按住shift,点击鼠标左键,选上全部IAT。
二进制全部复制。

进入第一个OD,选中全部IAT,二进制粘贴。

出现红色的,证明我们修改过了。

打开UIF,od里按ctrl + m.

进程ID: B44 (即我们开的第一个进程)
起始 :00401000 (即text段)
终止:00642000 (最后一段,我的是rsrc段)
新的IAT VA,我们自己选个区段放进去,我们选SFX段:00482000

勾上修复输入表,快速修复。
开始修复,完成了。

IR 选中 B44 进程, OEP填 AF10,lodepe 选中B44进程 完整转存,开始脱壳。

指针全部有效,修复脱过的。

运行试试。
OK!

--------------------------------------------------------------------------------
【经验总结】
脱壳机比我牛多了。。几秒钟脱的干干净净。
最后说一点,要想开挂不非法,可以破解减肥后再加一遍壳就行了。

--------------------------------------------------------------------------------
【版权声明】: 本文原创于2666fff, 转载请注明作者并保持文章的完整, 谢谢!
                                                       2010?7?1?8:34:54 PM

Zanker 发表于 2010-7-31 18:40

好长啊...
能做个教程么?

qq1124586843 发表于 2010-7-31 18:59

原来是非标准的~难怪了…我起初以为标准版的、要补OEP…谢谢了……

tysan 发表于 2010-7-31 19:01

哈哈,很牛x的一个教程

vivenshaw 发表于 2010-7-31 19:10

要是个视频,我五体投地的崇拜你

wxt51 发表于 2010-7-31 19:33

谢谢,正在下载你的视频教程,我要好好的恶补一下

dd2003joke 发表于 2010-8-2 14:54

俺们菜鸟们还在为穿壳3。XX发愁,楼主已经是6。X了

yang542397 发表于 2010-8-2 15:07

厉害!真的厉害!这么好的贴没有人顶,真是可惜了!可惜了!

hq0927 发表于 2010-8-3 11:28

后说一点,要想开挂不非法,可以破解减肥后再加一遍壳就行了
请问老大这么说是什么意思啊???

fulongzai 发表于 2010-8-4 00:10

佩服佩服 确实很不错
页: [1] 2
查看完整版本: 手脱穿山甲(Armadillo)6.X CopyMemII + Debug Blocker