脱壳技术,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 |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏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.