安全中国首页 > 文章中心 > 脱壳技术
 

爱的初体验之Armadillo2.0加壳的记事本

更新时间:2008-5-12 0:27:13
责任编辑:池天
热 点:
【脱文标题】 爱的初体验之Armadillo2.0加壳的记事本 
   
【脱文作者】 weiyi75[Dfcg]  
   
【作者邮箱】 weiyi75@sohu.com  
   
【作者主页】 Dfcg官方大本营  
   
【使用工具】 Ollydbg,WinHEX,Bw2000(冲击波),Loadpe 
   
【破解平台】 Win98 
   
【软件名称】 Armadillo2.0加壳的记事本 
   
【下载地址】 附件下载 
         
【软件简介】 穿山甲早期版本加壳的记事本 

【软件大小】 132KB  
   
【加壳方式】 Armadillo 2.00 beta3 -> Silicon Realms Toolworks [重叠] 
   
【保护方式】 标准方式加壳 
   
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:  
   
--------------------------------------------------------------------------------  
   
【破解内容】  
  
   运行加密的Nopepad.exe,在同一文件夹中产生一个Nopepad.tmp0,大小和没加壳的记事本一样大,把它复制一份,命名为Nopepad1.exe。用PEedit对比分析未加密的记事本,发现除了代码段被做了手脚,其余区段的没有变化,资源,引入表都正确。 

OD载入Nopepad1.exe,发现401000-404FD3 处 大小 3FD4 的代码全部换成了POP EAX 的无用代码。 

ALT+M 打开内存镜像 

内存镜像,项目 12 
 地址=00401000 
 大小=00004000 (16384.)        //知道了代码段内存中是 从 401000-405000 
 Owner=NOTEPAD1 00400000     
 区段=.text 
 包含=code 
 类型=Imag 01001002 
 访问=R 
 初始访问=RWE 

现在要从加密程序的临时文件进程中Dump出代码段内容,Loadpe无法Dump进程,因为程序没有陷入死循环是无法DUMP的。运行Winhex,选定进程Nopepad.tmp0,编辑内存,位置-转移到偏移量 401000 ,看到这时可不是58等无用代码了,和未加壳的记事本相同位置代码相同。选定401000-405000处的全部代码 

Alt+G 401000 选块开始 

Alt+G 405000 先看看,我们看到404FD2以后的全是为00的数据,不用复制,于是 

Alt=G 404FD2 选块结尾 

Ctrl+C 复制选定内容 

然后打开代修复的Nopepad1.exe,位置-转移到偏移量 1000 

Ctrl+B 写入复制的数据,切记不能是Ctrl+V,保存文件。 

现在脱壳基本完成,还差最后一步,现在脱壳程序入口点不对,是不能运行的,虽然我知道记事本的OEP是4010cc,但换个程序是多少? 

简单一点解决,那就是BW2000(冲击波) 

首先执行BW2000,按track,再执行NOTEPAD.EXE, 在BW2000中显示0040A53F,等到NagBox出现,按OK后会再出现一个地址004010cc 这是Nopepad.tmp0的OEP,才是我们要的。   

注意修正入口时不能用PEedit修正,只能用LoadPE修正,顺便重建PE优化一下文件大小。否则无法运行,害我想了两个小时不知道是怎么回事。 

另一种死循环脱壳法,不是很好用,但脱壳成功了,我看到介绍方法都是Trw2000和Softice之类的,今天用OD配合LoadPe脱壳成功。 

OD载入加密的程序,命令行下断点。 

BP ResumeThread 

F9运行程序。 

确定没有注册的NAG。 

77E66F37 >  55              PUSH EBP  //中断在这里 
77E66F38    8BEC            MOV EBP,ESP 
77E66F3A    8D45 08         LEA EAX,DWORD PTR SS:[EBP+8] 
77E66F3D    50              PUSH EAX 
77E66F3E    FF75 08         PUSH DWORD PTR SS:[EBP+8] 
77E66F41    FF15 9813E677   CALL DWORD PTR DS:[<&NTDLL.NtResumeThrea>; ntdll.ZwResumeThread 
77E66F47    85C0            TEST EAX,EAX 
77E66F49    0F8C 732F0300   JL KERNEL32.77E99EC2 
77E66F4F    8B45 08         MOV EAX,DWORD PTR SS:[EBP+8] 
77E66F52    5D              POP EBP 
77E66F53    C2 0400         RETN 4 

Ctrl+F9返回程序领空。 

00406C18   .  FF15 34004100 CALL DWORD PTR DS:[<&KERNEL32.ResumeThre>; \ResumeThread 
00406C1E      BA 01000000   MOV EDX,1 //返回到这里,修改这一句。 

00406C1E    - EB FE         JMP SHORT NOTEPAD.00406C1E 
00406C20      90            NOP            这不就等于Softice里面的jmp eip 
00406C21      90            NOP 
00406C22      90            NOP 

程序陷入死循环。 

00406C23   .  85D2          TEST EDX,EDX 
00406C25   .  0F84 28010000 JE NOTEPAD.00406D53 
00406C2B   .  8D85 8CF9FFFF LEA EAX,DWORD PTR SS:[EBP-674] 
00406C31   .  50            PUSH EAX                                 ; /pExitCode 
00406C32   .  8B0D 70514100 MOV ECX,DWORD PTR DS:[415170]            ; | 
00406C38   .  51            PUSH ECX                                 ; |hProcess => 000000CC (window) 
00406C39   .  FF15 40004100 CALL DWORD PTR DS:[<&KERNEL32.GetExitCod>; \GetExitCodeProcess 
00406C3F   .  81BD 8CF9FFFF>CMP DWORD PTR SS:[EBP-674],103 
00406C49   .  74 23         JE SHORT NOTEPAD.00406C6E 
............................................................ 

接着用Loadpe在进程里选择Nopepad.tmp0,完整脱壳。Loadpe载入脱壳的文件发现入口不对,修改成10cc保存,文件50.6k比没加壳的文件要小,正常运行。 

 
相关文章
48小时热门文章
 
48小时热门软件
48小时热门动画