吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9043|回复: 11
收起左侧

[原创] 手脱穿山甲(Armadillo)6.X CopyMemII + Debug Blocker

[复制链接]
2666fff 发表于 2010-7-31 18:35
本帖最后由 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 - [1.9] ->
  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:  [000008FC]
  Processing...
  [PROTECTiON SYSTEM]
  Professional Edition
  [PROTECTiON OPTiONS]
  Debug-Blocker protection detected
  CopyMem-II protection detected
  [CHiLD iNFO]
  Crypto call found:  [004463EB]
  Child process iD:   [00000B44]
  Entry point:        [0040AF10]
  Original bytes:     [558BEC6A]
  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:[EAX-40]            ; Far jump
  0040AF17    DD40 00         FLD QWORD PTR DS:[EAX]
  0040AF1A    68 7AB04000     PUSH Dnf香妃.0040B07A                      ; JMP to msvcrt._except_handler3
  0040AF1F    64:A1 00000000  MOV EAX,DWORD PTR FS:[0]
  0040AF25    50              PUSH EAX
  0040AF26    64:8925 0000000>MOV DWORD PTR FS:[0],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 00000000  MOV EAX,DWORD PTR FS:[0]
  0040AF25    50              PUSH EAX
  0040AF26    64:8925 0000000>MOV DWORD PTR FS:[0],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:  [00000394]
  Processing...
  [PROTECTiON SYSTEM]
  Professional Edition
  [PROTECTiON OPTiONS]
  Debug-Blocker protection detected
  CopyMem-II protection detected
  [CHiLD iNFO]
  Child process iD:   [00000F00]
  Entry point:        [00482000]
  Original bytes:     [60E80000]
  Detached successfully :)
  
  这次的进程ID为 00000F00,OEP原字节 60E80000,用新开OD附加进程,alt+f9返回,补OEP。
  
  这次我们是要找到完整的IAT所以,需要处理magic jmp,刚才我们找到的IAT起始位置为 0040d000,在左下角 数据窗口中,
  按 ctrl+g 转到 0040d000 处,并下硬件写入断点,shift+f9 运行。
  
  暂停第一次后,再次运行,0040d000等出现IAT字样:
  0040D000  7C835BF8  kernel32.GetShortPathNameA
  0040D004  7C864178  kernel32.Process32Next
  0040D008  7C802367  kernel32.CreateProcessA
  0040D00C  7C835E12  kernel32.GetTempPathA
  0040D010  00F18E30
  0040D014  7C809FC5  kernel32.LoadResource
  0040D018  7C80BC79  kernel32.SizeofResource
  
  这样就可以了,开始找magic jmp,取消硬件断点。
  
  F8单步,在主窗口跟踪,漫长的单步至:
  00F48A9A    8B85 54D2FFFF   MOV EAX,DWORD PTR SS:[EBP-2DAC]
  00F48AA0    8B0D EC3BFA00   MOV ECX,DWORD PTR DS:[FA3BEC]
  00F48AA6    333481          XOR ESI,DWORD PTR DS:[ECX+EAX*4]
  00F48AA9    39B5 7CD4FFFF   CMP DWORD PTR SS:[EBP-2B84],ESI
  00F48AAF    75 11           JNZ SHORT 00F48AC2                       ; magic jump,在此处下硬件执行断点。
  00F48AB1    8B95 50D2FFFF   MOV EDX,DWORD PTR SS:[EBP-2DB0]
  00F48AB7    8B42 04         MOV EAX,DWORD PTR DS:[EDX+4]
  00F48ABA    8985 78D4FFFF   MOV DWORD PTR SS:[EBP-2B88],EAX
  00F48AC0    EB 05           JMP SHORT 00F48AC7
  00F48AC2  ^ E9 3BFFFFFF     JMP 00F48A02
  00F48AC7    C685 87D4FFFF 0>MOV BYTE PTR SS:[EBP-2B79],0
  00F48ACE    83BD BCD7FFFF 0>CMP DWORD PTR SS:[EBP-2844],0
  00F48AD5    75 34           JNZ SHORT 00F48B0B
  00F48AD7    8A0D 4413FA00   MOV CL,BYTE PTR DS:[FA1344]
  
  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:[EBP-2DB0]
  00F48AB7   |8B42 04         MOV EAX,DWORD PTR DS:[EDX+4]
  00F48ABA   |8985 78D4FFFF   MOV DWORD PTR SS:[EBP-2B88],EAX
  00F48AC0   |EB 05           JMP SHORT 00F48AC7
  00F48AC2  ^\E9 3BFFFFFF     JMP 00F48A02
  00F48AC7    C685 87D4FFFF 0>MOV BYTE PTR SS:[EBP-2B79],0
  
  修改后:
  00F48AAF   /EB 11           JMP SHORT 00F48AC2                       ; magic jmp,将JNZ改为JMP
  00F48AB1   |8B95 50D2FFFF   MOV EDX,DWORD PTR SS:[EBP-2DB0]
  00F48AB7   |8B42 04         MOV EAX,DWORD PTR DS:[EDX+4]
  00F48ABA   |8985 78D4FFFF   MOV DWORD PTR SS:[EBP-2B88],EAX
  00F48AC0   |EB 05           JMP SHORT 00F48AC7
  00F48AC2  ^\E9 3BFFFFFF     JMP 00F48A02
  00F48AC7    C685 87D4FFFF 0>MOV BYTE PTR SS:[EBP-2B79],0
  
  换回第一个OD,数据窗口转至 0040d000, 然后一直下找到IAT的结束位置:
  0040D3D8  769B2A37  ole32.CoInitialize
  0040D3DC  76A061BA  ole32.OleRun                    ;IAt结束位置。
  0040D3E0  00FC15C0
  0040D3E4  00000000
  0040D3E8  00401010  Dnf香妃.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

免费评分

参与人数 1热心值 +1 收起 理由
qq1124586843 + 1 呵呵谢谢啦~~~~真的很感谢

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Zanker 发表于 2010-7-31 18:40
好长啊...
能做个教程么?
qq1124586843 发表于 2010-7-31 18:59
原来是非标准的~难怪了…我起初以为标准版的、要补OEP…谢谢了……
tysan 发表于 2010-7-31 19:01
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
佩服  佩服 确实很不错
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 06:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表