找回密码
 注册
搜索
热搜: 回贴

脱壳技术,Armadillo V3_01标准加壳方式的脱壳--SoundEdit Pro,Armadillo

2010-1-30 18:19| 发布者: admin| 查看: 69| 评论: 0|原作者: 仙剑


脱壳技术,Armadillo V3_01标准加壳方式的脱壳--SoundEdit Pro,Armadillo
2008年06月23日 星期一 下午 03:47
[实例解析一] Armadillo V3_01标准加壳方式的脱壳--SoundEdit Pro



程序名:SoundEdit Pro V1.3.634



※软件简介※:SoundEdit Pro可以打开WAV、MPC、MP 、MP2、MP3、VOX、RAW、OGG、WMA、CDA 等扩展名的音乐文件,进行声波编辑、剪裁、混音等工作;还有完整的录音功能,可以从 CD、麦克风、立体混音装置、讯号线来源、影片等来源录音。



软件语言: 英文

软件类别: 国外软件/共享版/音频处理

运行环境: Win9x/Me/NT/2000/XP

界面预览: 无

软件大小: 10273KB

软件更新: 2003-7-8

下载页面: http://www.pcdog.com/soft/942.htm



※参考文章※:Armadillo标准加壳的程序的脱壳和引入表修复方案 作者:jwh51

脱Armadillo 3.01 壳 作者:yesky1

Armadillo V3.40标准加壳方式的脱壳——Win98的Notepad 作者:fly



※软件限制※:SoundEdit是一个声音编辑软件,采用了ARMADILLO的KEY加密,启动要你输入KEY,否则要等几秒才能让你启动,还有30天试用期,所以,如果脱了壳,上述现象都将没有了.现在开始脱壳历程.!!



※破解工具※:DriverSuite2.7中的softice4.2.7、FI 3.01



※调试平台※:Windows XP



Armadillo是当今猛壳之一,加壳方式有两种,一种是标准方式(Standard Protections Only)加壳,

另一种是CopyMem-II Debug-Blocker的加壳,其标准加壳方式相对来说则容易的多.用COPYMEMII的一般可用DILLODUMP脱,而用标准加壳用DILLODUMP是脱不了的。



※开始吧※

FI 3.01侦测知其用Armadilolo v3.01加壳,并且运行是没有两个进程,所以应该是标准加壳.



[一],DUMP出程序并修复:

首先一点是Armadillo是通过类似于调试的方法来运行程序的。

新版本Armadillo脱壳的一个难点是它的代码段是分页解密的,我估计它的做法是将代码段

锁定,即将其属性设为不可读、写、执行,当被执行到时会产生一个页面保护错误,而调

试程序就会捕获这个错误,将对应的页面解锁并解密,然后返回执行.



第一步,打开softice4.2.7

第二步,开启SoundEdit Pro直到出现注册框,那个注册框上的OK键会延迟生效。

第三步,ctrl D调出softice



附:如果系统时间在安装SoundEdit Pro后修改过,程序会检测到,并警告修改系统时间而退出程序.

如下方法可挫败它的这个保护。

bpx getlocaltime

g回来点击ok按键,中断两次后,先别忙g退出.

经过测试内存地址00CB4677处的test al,al是关键,所以bpx 00CB4677再g.

((((

00CB4672 E8 08060000 CALL 00CB4C7F

00CB4677 84C0 TEST AL,AL ====>走到这里将AL改为00000000即可

00CB4679 74 1C JE SHORT 00CB4697

00CB467B E8 56050000 CALL 00CB4BD6 ====>这个call警告修改系统时间

))))

中断后,R EAX 00000000修改寄存器EAX的值为0,然后BC *清除所有断点.

先别忙退出,继续BPX VirtualProtect.

至此击败它了.



如果没有改过时间,则跳过上面一步,直接在按OK前BPX VirtualProtect.



然后再次中断,这时你要注意开始记下中断的次数了.我在第21次时按F10单步返回时得知

程序CALL to VirtualProtect from MSVBVM60.7342F400

说明程序,已经运行了.(VB是先运行MSVBVM60.DLL的,在其中也用调用VirtualProtect)



重新来一遍当在20次出现中断在VirtualProtect时停下,BC *清除所有断点,然后按F10单步

返回到主程序.

004DA1E0 83C404 ADD ESP, BYTE 04

004DA1E3 8945FC MOV [EBP-4], EAX

004DA1E6 837DB800 CMP DWORD [EBP-4C], BYTE 00

004DA1EA 740A JZ 004DA1F6

004DA1EC 8B45B8 MOV EAX, [EBP-4C]

004DA1EF 50 PUSH EDX

004DA1F0 FF15E8615000 CALL USER32.DestroyWindow

004DA1F6 8B45FC MOV EAX,[EBP-4]

004DA1F9 8BE5 MOV ESP, EBP

004DA1FB 5D POP EBP

004DA1FC C3 RETN

再耐心地用F10单步走,因为有一堆的JMP,JNZ,JO等,用不了多久的就可来到这:

004DB6B0 7511 JNZ 004DB6C3

004DB6B2 6878BC65000 PUSH 0050BC78

004DB6B7 FF150C975000 CALL NEAR [0050BC9C] ,这个CALL用F8跟进

004DB6B9 83C404 ADD ESP, BYTE 04

在004DB6B7这个CALL用F8跟进,然后继续F10,几次后就来到这:

00CBCEA9 334830 XOR ECX,[EAX 30]

00CBCEAC 334820 XOR ECX,[EAX 20]

00CBCEAF 2BF9 SUB EDI,ECX

00CBCEB1 FFD7 CALL EDI =====>EDI=004059B4

看到最后这个CALL EDI吗,004059B4就是程序的OEP了,我们F8跟进:

004059AE FF25EC114000 JMP NEAR[4011EC]

004059B4 68787D4000 PUSH 00407D7C =====>这是OEP了

004059B9 E8F0FFFFFF CALL MSVBVM60!ThunRTMain

004059BE 0000 ADD [EAX], AL

典型的VB代码.



dump取内存中己脱壳的文件

00CBCEB1 FFD7 CALL EDI

现在这一行,键入以下命令:

a eip (然后按回车)

jmp eip (然后按回车)

按下F5 最好在OEP处挂起进程再dump,因为这时程序的初始化变量还没有被修改。大家可对比一下,当程序运行后dump出的文件和在OEP处dump出的有何不同。

这样将改变0137:00CBCEB1行的代码. 你会注意到在键入"jmp eip"并按下回车后,00CBCEB1的指令现在是一个jmp.这将有效地使程序"暂停"(有点类似TRW2000的suspend命令). 按下F5使你回到window XP。 运行LordPE,在进程列表中选择"SoundEdit.exe"然后点击鼠标右键选中"Dump (Full)",给脱壳的程序起名dump存盘.



[二],修复引入表

一般步骤如下:

(1)找被脱壳的入口点(OEP);

(2)完全Dump目标文件;

(3)运行Import REConstructor和需要脱壳的应用程序;

(4)在Import REConstructor下拉列表框中选择应用程序进程;

(5)在左下角填上应用程序的真正入口点偏移(OEP);

(6)按"IAT AutoSearch"按钮,让其自动检测IAT位置, 出现"Found address which may be in the Original IAT.Try ’Get Import’"对话框,这表示输入的OEP发挥作用了。

(7)按"Get Import"按钮,让其分析IAT结构得到基本信息;

(8)如发现某个DLL显示"valid :NO" ,按"Show Invalids"按钮将分析所有的无效信息,在Imported Function Found栏中点击鼠标右键,选择"Trace Level1 (Disasm)",再按"Show Invalids"按钮。如果成功,可以看到所有的DLL都为"valid:YES"字样;

(9)再次刷新"Show Invalids"按钮查看结果,如仍有无效的地址,继续手动用右键的Level 2或3修复;

(10)如还是出错,可以利用"Invalidate function(s)"、"Delete thunk(s)"、编辑Import表(双击函数)等功能手动修复。

(11)开始修复已脱壳的程序。选择Add new section (缺省是选上的) 来为Dump出来的文件加一个Section(虽然文件比较大,但避免了许多不必要的麻烦) 。

(12)按"Fix Dump"按钮,并选择刚在(2)步Dump出来的文件,在此不必要备份。如修复的文件名是"Dump.exe",它将创建一个"Dump_.exe",此外OEP也被修正。

(13)生成的文件可以跨平台运行。



1.先用importREC试试,输入我们找到的正确的OEP:004059B4,注意输入004059B4-00400000=000059B4

有很多指针无效,如果CUT程序退出时会出错,所以要修复它.通过它我们可看到IAT的

rva为1000



运行SoundEdit,先等提示注册框出来,再下断bpx GetModuleHandleA,再按OK,

断下9次左右,每次断下都F12看看回到哪儿了,直到到了如下:

001B:00CA59F2 FF15A850CC00 CALL [KERNEL32!GetModuleHandleA]

001B:00CA59F8 394508 CMP [EBP 08],EAX

001B:00CA59FB 7507 JNZ 00CA5A04

001B:00CA59FD B9E083CC00 MOV ECX,00CC83E0

001B:00CA5A02 EB52 JMP 00CA5A56

001B:00CA5A04 393DD889CC00 CMP [00CC89D8],EDI

001B:00CA5A0A B9D889CC00 MOV ECX,00CC89D8

001B:00CA5A0F 0F8491000000 JZ 00CA5AA6 ======>magic jump!

001B:00CA5A15 8B3558E8CC00 MOV ESI,[00CCE858]

001B:00CA5A1B A1D028CD00 MOV EAX,[00CD28D0]

001B:00CA5A20 F6410801 TEST BYTE PTR [ECX 08],01

001B:00CA5A24 740E JZ 00CA5A34

001B:00CA5A26 8B507C MOV EDX,[EAX 7C]

001B:00CA5A29 335030 XOR EDX,[EAX 30]

001B:00CA5A2C 335028 XOR EDX,[EAX 28]

001B:00CA5A2F F6C280 TEST DL,80

001B:00CA5A32 7513 JNZ 00CA5A47

001B:00CA5A34 8B5074 MOV EDX,[EAX 74]

001B:00CA5A37 335064 XOR EDX,[EAX 64]

001B:00CA5A3A 335060 XOR EDX,[EAX 60]

001B:00CA5A3D 335030 XOR EDX,[EAX 30]

001B:00CA5A40 3316 XOR EDX,[ESI]

001B:00CA5A42 395508 CMP [EBP 08],EDX

001B:00CA5A45 740C JZ 00CA5A53

001B:00CA5A47 83C10C ADD ECX,0C

001B:00CA5A4A 83C604 ADD ESI,04

001B:00CA5A4D 3939 CMP [ECX],EDI

001B:00CA5A4F 75CF JNZ 00CA5A20

这里面有几个跳转,其中最后一个00CBA3EB是往上跳的.我们看一个就可发现:

00CBA364 JZ 00CBA3F0,这个跳正好可跳出这个循环.只要改这个跳,就不会破坏引入表了.

再来,出现注册框后OK,程序再断下来,把00CA5A0F的JZ 00CA5AA6改成JMP 00CA5AA6,

清除所有断点,按F5运行,程序运行后打开importREC,选中程序,入口填

入59b4,-->IAT自动搜索-->获得输入信息",如果还有无效的大可放心的cut,因为它们本来就不是有用指针了.然后修复脱壳后的文件.OK,大功告成.

脱壳后的程序,运行正常,烦人的注册框和时间限制都没了,圆满成功.



总结:曾经我用olly也试过,但好像我的olly有问题,老是断不下来,

今次换上老将softice,终于成功了,好激动啊!

感谢jwh51 yesky1 fly




最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 23:30 , Processed in 0.270420 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部