程序名: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天试用期,所以,如果脱了壳,上述现象都将没有了.现在开始脱壳历程.!!
※破解工具※:Ollydbg1.09、FI 3.01 Armadillo是当今猛壳之一,加壳方式有两种,一种是标准方式(Standard Protections Only)加壳, 另一种是CopyMem-II+Debug-Blocker的加壳,其标准加壳方式相对来说则容易的多.用COPYMEMII的 一般可用DILLODUMP脱,而用标准加壳用DILLODUMP是脱不了的。
※开始吧※ FI 3.01侦测知其用Armadilolo v3.01加壳,并且运行是没有两个进程,所以应该是标准加壳.
用Ollydbg载入SoundEdit Pro V1.3.634,设置忽略所有的异常选项,把Ollydbg的异常选择项全部勾上。
004F6000 > $Content$nbsp;60 PUSHAD ====>进入Ollydbg后断在这!
第一步,去掉Ollydbg的调试器标志: [方法一] 用IsDebug 1.4插件去掉Ollydbg的调试器标志。 [方法二] Bp IsDebuggerPresent F9运行一下就会来到IsDebuggerPresent函数的入口地址: 77E52E92 > 64:A1 18000000 MOV EAX,DWORD PTR FS:[18] ; <--中断在这里 77E52E98 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30] 77E52E9B 0FB640 02 MOVZX EAX,BYTE PTR DS:[EAX+2] ; <--运行到这里 77E52E9F C3 RETN 在77E52E9B地址处停下,看看DS:[EAX+2]指向的地址7FFDF002的指是01(这个地址可能和你的不同), 修改这个值为00 因为Armadillo通过IsDebuggerPresent函数来检查是不是被调试器调试,如果有调试 器就会赋EAX值为01没有就赋EAX值为00。修改这个值就是告诉他没有调试器,自然不会出错拉!记下 这个地址,以后经常会用到的.
第二步,DUMP出程序并修复: [方法一] 首先一点是Armadillo是通过类似于调试的方法来运行程序的。 新版本Armadillo脱壳的一个难点是它的代码段是分页解密的,我估计它的做法是将代码段 锁定,即将其属性设为不可读、写、执行,当被执行到时会产生一个页面保护错误,而调 试程序就会捕获这个错误,将对应的页面解锁并解密,然后返回执行.
BP VirtualProtect,F9运行,这时会有异常,用SHIFT+F9过程序会断下来,这时你不停按F9,一般在第6次会 出现注册框,OK后再次中断,这时你要注意堆栈开始记下F9的次数了.我这第24下时在堆栈出现如下信息: 0012EB78 7342F406 /CALL to VirtualProtect from MSVBVM60.7342F400 说明程序,已经运行了.(VB是先运行MSVBVM60.DLL的,在其中也用调用VirtualProtect) 现在重新载入程序,到出现这个信息的前一次中断停下来,然后按几次CTRL+F9到程序中(也就是地址较低 的地方,一般都是004*****,005*****,本程序在这:
正常情况下,按上面的做法可以很顺利的走下来,但是会遇到警告修改系统时间而退出程序的情况, 如下方法可挫败它的这个保护。 先不要BP VirtualProtect,F9运行,这时会有异常,用SHIFT+F9过,再按F9,直到出现注册 框,这时BP GetLocalTime,OK后中断两次,
0012C05C 00CAABA3 /CALL 到 GetLocalTime 来自 00CAAB9D 0012BDF4 00CAABA3 /CALL 到 GetLocalTime 来自 00CAAB9D 0012BDF8 0012BDFC \pLocaltime = 0012BDFC 最终返回到 00CB4672 E8 08060000 CALL 00CB4C7F 00CB4677 84C0 TEST AL,AL ====>走到这里将AL改为00000000即可 00CB4679 74 1C JE SHORT 00CB4697 00CB467B E8 56050000 CALL 00CB4BD6 ====>这个call警告修改系统时间 然后清除所有断点,下BP VirtualProtect,按F9中断,这时你要注意堆栈开始记下F9的次数了.我这 第24下时在堆栈出现如下信息: 0012EB78 7342F406 /CALL to VirtualProtect from MSVBVM60.7342F400 说明程序,已经运行了.(VB是先运行MSVBVM60.DLL的,在其中也用调用VirtualProtect) 现在重新载入程序,到出现这个信息的前一次中断停下来,然后按几次CTRL+F9到程序中(也就是地址较低 的地方,一般都是004*****,005*****,本程序在这: ***************** 以下是jwh51的原文 ***************** 004DA060 83C4 04 ADD ESP, 4 004DA063 8945 FC MOV DWORD PTR SS:[EBP-4], EAX 004DA066 837D B8 00 CMP DWORD PTR SS:[EBP-48], 0 004DA06A 74 0A JE SHORT SoundEdi.004DA076 004DA06C 8B45 B8 MOV EAX, DWORD PTR SS:[EBP-48] 004DA06F 50 PUSH EAX 004DA070 FF15 E8615000 CALL DWORD PTR DS:[<&USER32.DestroyWi>; USER32.DestroyWindow 004DA076 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4] 004DA079 8BE5 MOV ESP, EBP 004DA07B 5D POP EBP 004DA07C C3 RETN 这时小心地用F8,因为有一堆的JMP,JNZ,JO等,不过也用不了多久的,大概20多次就可来到这: 004DB483 61 POPAD 004DB484 6A 00 PUSH 0 004DB486 E8 6E000000 CALL SoundEdi.004DB4F9 004DB48B 83C4 04 ADD ESP, 4 004DB48E 6A 00 PUSH 0 004DB490 E8 46830000 CALL SoundEdi.004E37DB 004DB495 83C4 04 ADD ESP, 4 004DB498 837D E4 01 CMP DWORD PTR SS:[EBP-1C], 1 004DB49C 75 11 JNZ SHORT SoundEdi.004DB4AF 004DB49E 68 E8965000 PUSH SoundEdi.005096E8 004DB4A3 FF15 0C975000 CALL DWORD PTR DS:[50970C] ,这个CALL用F7跟进 004DB4A9 83C4 04 ADD ESP, 4 004DB4AC 8945 E4 MOV DWORD PTR SS:[EBP-1C], EAX 004DB4AF 68 0C9E4D00 PUSH SoundEdi.004D9E0C 在4db4a3这个CALL用f7跟进,然后继续F8,几次后就来到这: 00D0B5E0 /75 29 JNZ SHORT 00D0B60B 00D0B5E2 |E8 A05AFFFF CALL 00D01087 00D0B5E7 |FF76 04 PUSH DWORD PTR DS:[ESI+4] 00D0B5EA |8BF8 MOV EDI, EAX 00D0B5EC |A1 CCEED100 MOV EAX, DWORD PTR DS:[D1EECC] 00D0B5F1 |FF76 08 PUSH DWORD PTR DS:[ESI+8] 00D0B5F4 |8B48 70 MOV ECX, DWORD PTR DS:[EAX+70] 00D0B5F7 |3348 50 XOR ECX, DWORD PTR DS:[EAX+50] 00D0B5FA |6A 00 PUSH 0 00D0B5FC |3348 34 XOR ECX, DWORD PTR DS:[EAX+34] 00D0B5FF |03F9 ADD EDI, ECX 00D0B601 |E8 815AFFFF CALL 00D01087 00D0B606 |50 PUSH EAX 00D0B607 |FFD7 CALL EDI ; SoundEdi.004059B0 看到最后这个CALL EDI吗,004059B0就是程序的OEP了,我们F7跟进: 00405996 - FF25 3C114000 JMP DWORD PTR DS:[40113C] 0040599C - FF25 8C104000 JMP DWORD PTR DS:[40108C] 004059A2 - FF25 B0104000 JMP DWORD PTR DS:[4010B0] 004059A8 - FF25 E8114000 JMP DWORD PTR DS:[4011E8] 004059AE 0000 ADD BYTE PTR DS:[EAX], AL 004059B0 68 787D4000 PUSH SoundEdi.00407D78 ,这是OEP了, 004059B5 E8 EEFFFFFF CALL SoundEdi.004059A8 呵,典型的VB代码.拿出LOADPE,快快DUMP吧.我们把DUMP的程序保存为DUMPED.EXE 以前总以为它的修复很难,但实际上只要修改程序流程,完全可得到正确的引入表的. 1.可先用importREC试试,有一个指针无效,如果CUT程序退出时会出错,所以要修复它.通过它我们可看到iat的 rva为1000,错误指针为1030,(如果很多指针无效,只要记住一个无效的RVA就可以了)
1 2 下一页 |