【脱文标题】 爱的中体验之Armadillo3.x仿Fly大侠的壹次脱壳法之Mr.Captor
【脱文作者】 weiyi75[Dfcg]
【作者邮箱】 weiyi75@sohu.com
【作者主页】 Dfcg官方大本营 --- http://www.chinadfcg.com/
【使用工具】 Peid,Ollydbg,Loadpe,Imprec1.6F
【脱壳平台】 Win2K
【软件名称】 Mr.Captor
【软件简介】 Mr.Captor 是一个非常好用的屏幕截图程序!他可以帮助你把看到的任何图片忠实的保留下来!并可以保存为BMP, PCX, GIF, JPEG, PNG, TIFF, TGA, CUR, ICO, AVI等格式!支持自定义热键!非常容易使用呀!
【软件大小】 1686 KB
【下载页面 http://www.skycn.com/soft/11437.html
【加壳方式】 Armadillo 3.00a - 3.61 -> Silicon Realms Toolworks
【保护方式】 标准方式加壳
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:
前言,在看雪论坛看了Fly大侠写的脱文,就这篇看懂了,为了使大家学习Fly大侠的技术,我仿真了这篇脱文。可能因为Mr.Captor V2.7 版被Fly脱壳加破解,作者一怒之下没有加Arm双进程了,有点可惜啊。
MrCaptor.exe用PEiD查壳 Armadillo 3.00a-3.61,运行看是单进程的标准壳。
以前脱Armadillo标准壳一般有两种流程的操作方法:
1、先走到OEP,脱壳。第2次调试,找到并直接修改Magic Jump处为JMP,得到输入表,这时程序无法运行,但IAT可以修复。
2、在Magic Jump 处下硬件断点,每次改变标志位使其跳转,继续内存断点到达OEP,这样也是一次就脱壳、修复输入表,但是很慢。
这个程序判断软件过期代码在壳里面,脱壳后日期限制也不存在,过分依耐壳也是共享软件被破解的原因。
现在科技这么发达,下载一个自动隐藏OD插件,我已经在论坛里给出下载地址,以后根本无需隐藏OD调试,用抗AntiDbg 的OD--Ukillod 调试猛壳也很省心,和原版Od无任何区别,只是增加了反Anti功能。OD载入程序,忽略所有异常。
脱Arm标准壳一般分两个步骤。
1.找magic jmp 调试过几个arm壳发现,magic jmp 位置和GetModuleHandleA 非常近。
2.找oep,在入口脱壳程序。注意Arm修改了Pe头,让OD插件无法脱壳,但对Loadpe一点效果都没有。
我用Fly大侠的 BP GetModuleHandleA+5 软硬断点都无法断下来,可能我运气不好,于是用GetModuleHandleA 硬断点,注意Arm壳严格校验普通断点,至少我机器上面是这样的,普通断点经常导致各种异常导致程序直接退出。
因为这个程序没有Nag提示,所以命令行直接下断点
BP GetModuleHandleA
修改普通断点为硬件断点,取消普通断点
004BD000 > 60 PUSHAD //外壳入口代码 004BD001 E8 00000000 CALL MrCaptor.004BD006 004BD006 5D POP EBP 004BD007 50 PUSH EAX 004BD008 51 PUSH ECX 004BD009 EB 0F JMP SHORT MrCaptor.004BD01A 004BD00B B9 EB0FB8EB MOV ECX,EBB80FEB 004BD010 07 POP ES ; 修正的段位寄存器 004BD011 B9 EB0F90EB MOV ECX,EB900FEB 004BD016 08FD OR CH,BH 004BD018 EB 0B JMP SHORT MrCaptor.004BD025 ....................................................
F9运行Arm典型的两个异常,Shift+F9 忽略。
异常1
004BF4A3 F0: PREFIX LOCK: ; 多余的前缀 004BF4A4 F0:C7 ??? ; 未知命令 004BF4A6 C8 6033C9 ENTER 3360,0C9 004BF4AA 75 02 JNZ SHORT MrCaptor.004BF4AE 004BF4AC EB 15 JMP SHORT MrCaptor.004BF4C3 004BF4AE EB 33 JMP SHORT MrCaptor.004BF4E3 004BF4B0 C9 LEAVE 004BF4B1 75 18 JNZ SHORT MrCaptor.004BF4CB 004BF4B3 7A 0C JPE SHORT MrCaptor.004BF4C1 004BF4B5 70 0E JO SHORT MrCaptor.004BF4C5 004BF4B7 EB 0D JMP SHORT MrCaptor.004BF4C6 004BF4B9 E8 720E79F1 CALL F1C50330 004BF4BE FF15 00790974 CALL DWORD PTR DS:[74097900] 004BF4C4 F0:EB 87 LOCK JMP SHORT MrCaptor.004BF44E ; 锁定前缀是不允许的 ..........................................................
异常2
004BF5BC F0: PREFIX LOCK: ; 多余的前缀 004BF5BD F0:C7 ??? ; 未知命令 004BF5BF C8 64678F ENTER 6764,8F 004BF5C3 06 PUSH ES 004BF5C4 0000 ADD BYTE PTR DS:[EAX],AL 004BF5C6 83C4 04 ADD ESP,4 004BF5C9 8B85 5E3E0000 MOV EAX,DWORD PTR SS:[EBP+3E5E] 004BF5CF 60 PUSHAD 004BF5D0 33C9 XOR ECX,ECX 004BF5D2 75 02 JNZ SHORT MrCaptor.004BF5D6 004BF5D4 EB 15 JMP SHORT MrCaptor.004BF5EB 004BF5D6 EB 33 JMP SHORT MrCaptor.004BF60B 004BF5D8 C9 LEAVE ..........................................................
GetModuleHandleA 硬件中断1
77E756DB > 55 PUSH EBP 77E756DC 8BEC MOV EBP,ESP 77E756DE 837D 08 00 CMP DWORD PTR SS:[EBP+8],0 77E756E2 0F84 BC670000 JE KERNEL32.77E7BEA4 77E756E8 FF75 08 PUSH DWORD PTR SS:[EBP+8] 77E756EB E8 B1F6FFFF CALL KERNEL32.77E74DA1 77E756F0 85C0 TEST EAX,EAX 77E756F2 74 08 JE SHORT KERNEL32.77E756FC 77E756F4 FF70 04 PUSH DWORD PTR DS:[EAX+4] 77E756F7 E8 C384FFFF CALL KERNEL32.GetModuleHandleW 77E756FC 5D POP EBP 77E756FD C2 0400 RETN 4
堆栈提示
0012D8F8 77CAADB7 /CALL 到 GetModuleHandleA 来自 77CAADB1 0012D8FC 77CAC4B0 \pModule = "KERNEL32.DLL" //注意不断改变的参数。 0012D900 77D0FA08 0012D904 00000094 0012D908 00000005 0012D90C 00000000 ..........................................................
继续F9八次直到
77E756DB > 55 PUSH EBP 77E756DC 8BEC MOV EBP,ESP 77E756DE 837D 08 00 CMP DWORD PTR SS:[EBP+8],0 77E756E2 0F84 BC670000 JE KERNEL32.77E7BEA4 77E756E8 FF75 08 PUSH DWORD PTR SS:[EBP+8] 77E756EB E8 B1F6FFFF CALL KERNEL32.77E74DA1 77E756F0 85C0 TEST EAX,EAX 77E756F2 74 08 JE SHORT KERNEL32.77E756FC 77E756F4 FF70 04 PUSH DWORD PTR DS:[EAX+4] 77E756F7 E8 C384FFFF CALL KERNEL32.GetModuleHandleW 77E756FC 5D POP EBP 77E756FD C2 0400 RETN 4
堆栈提示
0012BE5C 00C16A5C /CALL 到 GetModuleHandleA 来自 00C16A56 0012BE60 0012BF98 \pModule = "advapi32.dll" //看到这个动态库就要慢些了,有些软件在这里返回就可以到Magic jmp,有些软件在下一次中断返回,总之在附近。 0012BE64 0012EF60 0012BE68 01081BA0 0012BE6C 00000000 0012BE70 00000004 0012BE74 0000CC27 ..........................................................
在F9一次。
堆栈提示
0012C0E8 00C2E9AC /CALL 到 GetModuleHandleA 来自 00C2E9A6 0012C0EC 00000000 \pModule = NULL 0012C0F0 0012EF60 0012C0F4 01081BA0 0012C0F8 00000000 ..........................................................
删除硬件断点,Ctrl+F9返回.
00C2E9A6 FF15 C4D0C300 CALL DWORD PTR DS:[C3D0C4] ; KERNEL32.GetModuleHandleA 00C2E9AC 3985 B0E9FFFF CMP DWORD PTR SS:[EBP-1650],EAX //返回到这里。 00C2E9B2 75 0F JNZ SHORT 00C2E9C3 00C2E9B4 C785 ACE9FFFF 4>MOV DWORD PTR SS:[EBP-1654],0C41240 00C2E9BE E9 C4000000 JMP 00C2EA87 00C2E9C3 83A5 84E7FFFF 0>AND DWORD PTR SS:[EBP-187C],0 00C2E9CA C785 80E7FFFF 3>MOV DWORD PTR SS:[EBP-1880],0C41838 00C2E9D4 EB 1C JMP SHORT 00C2E9F2 00C2E9D6 8B85 80E7FFFF MOV EAX,DWORD PTR SS:[EBP-1880] 00C2E9DC 83C0 0C ADD EAX,0C 00C2E9DF 8985 80E7FFFF MOV DWORD PTR SS:[EBP-1880],EAX 00C2E9E5 8B85 84E7FFFF MOV EAX,DWORD PTR SS:[EBP-187C] 00C2E9EB 40 INC EAX 00C2E9EC 8985 84E7FFFF MOV DWORD PTR SS:[EBP-187C],EAX 00C2E9F2 8B85 80E7FFFF MOV EAX,DWORD PTR SS:[EBP-1880] 00C2E9F8 8338 00 CMP DWORD PTR DS:[EAX],0 00C2E9FB 0F84 86000000 JE 00C2EA87 //很大一个magic jmp 跳转,注意,修改它为jmp 00a3142a 程序将异常无法继续运行,但IAT已经没有加密了。这里用Fly的另类方法。
1 2 3 下一页 |