安全中国首页 > 文章中心 > 脱壳技术
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:www.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

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

更新时间:2008-5-8 0:11:07
责任编辑:流火
热 点:
【脱文标题】 爱的初体验之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比没加壳的文件要小,正常运行。

第一次接触ARM,查阅了几篇文章,这里一一感谢诸位前辈指点,感觉文中有很多不足,还请各位大侠不吝指教。

 
相关文章
一日一文章
 
一日一软件
一日一动画