手脱穿山甲(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 好长啊...
能做个教程么? 原来是非标准的~难怪了…我起初以为标准版的、要补OEP…谢谢了…… 哈哈,很牛x的一个教程 要是个视频,我五体投地的崇拜你 谢谢,正在下载你的视频教程,我要好好的恶补一下 俺们菜鸟们还在为穿壳3。XX发愁,楼主已经是6。X了 厉害!真的厉害!这么好的贴没有人顶,真是可惜了!可惜了! 后说一点,要想开挂不非法,可以破解减肥后再加一遍壳就行了
请问老大这么说是什么意思啊??? 佩服佩服 确实很不错
页:
[1]
2