首页
社区
课程
招聘
第一课 Hanzi原创语音系列教程――第一课UPX手动脱壳的五种方法[转帖]
发表于: 2006-6-9 07:59 5854

第一课 Hanzi原创语音系列教程――第一课UPX手动脱壳的五种方法[转帖]

2006-6-9 07:59
5854
-----------------------------------------------------------------------------------
  
  黑客动画吧 http://www.hack58.com
  
  专业的黑客动画教程网站
  
  免费学习黑客黑客技术
  
  成为黑客不是梦。
  打造国内最大的黑客动画网站
  
  注意:所有教程全部对外免费开放
  
  -----------------------------------------------------------------------------------
动画说明:第一节动画――方法1:单步跟踪
         
          第二节动画――方法2:ESP定律手动脱壳
                       方法3:内存镜像法
         
          第三节动画――方法4:模拟跟踪
                       方法5:捷径(就叫搜索法吧)

【动画标题】: 第一课   Hanzi原创语音系列教程――第一课UPX手动脱壳的五种方法
【动画作者】: 涵子
【作者邮箱】: hanzi53@tom.com
【作者主页】: www.hanzi.ful.cn
【作者QQ号】: 519485795
【下载地址】: :电信通道   网通通道
【加壳方式】: upx
【操作平台】: winpx2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!  
              动画工具――屏幕录相专家6.0
--------------------------------------------------------------------------------
     
      大家好,我是(Hanzi)涵子,很高兴又和大家见面了。为了答谢黑客动画吧对我的支持,从今天开始

我将不定期的给大家做一些免费教程。具体请到黑客动画吧搜索吧。
      
今天是第一课   Hanzi原创语音系列教程之UPX手动脱壳――第一节UPX手动脱壳的五种方法,共七节。
      
      第一节   UPX手动脱壳的五种方法
      
      第二节   手动跟踪UPX之CHMmaker2.88
      
      第三节   UPX变形脱壳-机器猫安全卫士
      
      第四节   飞雪日历V1.90.0517
      
      第五节   Flash ScreenSaver Maker 3.356
      
      第六节   泰来文件切割合并工具-UPX手脱
      
      第七节   E阳网络电视
  
      我们今天讲第一节

    第一节   UPX手动脱壳的五种方法
  
     1、壳介绍:
     UPX是一种很老而且强大的壳 不过它的脱壳机随处就能找到。它可以高度压缩PE文件格式的免费的
packer,压缩后original file的section被重新组织成4个section,分别从upx0到upx2, section of upx0,
其Raw Size是0,但Virtual Size与原始文件Size of Image相比,稍大,可见是UPX是将解压缩后的原始
文件数据映射到此;upx1起始部分是被UPX重新构建的Import Table,但很不幸,只包括IMAGE_IMPORT_DE
SCRIPTOR中的Name部分的正确信息,再往下是被extract出的Resource部分  的Icon和Version Informat
ion,但无法用eXeScope正确查看;upx2为UPX的解压缩代码,upx3包括被压缩的原始数据。
  
     2、主要步骤:
     寻找入口点,转储(dump)程序,修复引入函数表(Import Table)
     
     3、使用工具:
     查壳工具    PEiD0.94 中文版
     调试工具    flyODBG  中文版
     修复工具    Import REConstructor v1.6 中文版
     
     4、脱壳对象:
     win98记事本
  
     5、脱壳方法:
        方法1:单步跟踪(提高手动脱壳能力)
  
        方法2:ESP定律手动脱壳(三步完成)
        第一步:ESP突现,0012FFA4
        第二步:跟随(dd 0012FFA4)回车,
        第三步: 断点--硬件访问--WORD,F9运行
  
        方法3:内存镜像法
  
        ALT+M打开内存
        找到.rsrc,F2下断,F9运行
        。。。。。。
        ALT+M打开内存
        找到UPX0,F2下断,F9运行
  
        方法4:模拟跟踪
        找到.rsrc,F2下断,F9运行
        下模拟跟踪命令 tc eip<401000  F8单入

        方法5:捷径(就叫搜索法吧)(也是前辈们总结出来的方法)
        
        直接CTRL+F,输入popad

        
      
      语音教程,大家就看我操作吧!
  
      6、详细脱壳过程:
     
  方法1:单步跟踪(最常见的方法)
  
  0040E8C0 N>  60            pushad                        //停在这里了,我们F8单步
  0040E8C1     BE 15B04000   mov esi,NOTEPAD.0040B015
  0040E8C6     8DBE EB5FFFFF lea edi,dword ptr ds:[esi+FFFF>
  0040E8CC     57            push edi
  0040E8CD     83CD FF       or ebp,FFFFFFFF
  0040E8D0     EB 10         jmp short NOTEPAD.0040E8E2         //跳
  。。。。。。。。。。
  0040E8E2     8B1E          mov ebx,dword ptr ds:[esi]         //跳到这里,继续单步
  0040E8E4     83EE FC       sub esi,-4
  0040E8E7     11DB          adc ebx,ebx
  0040E8E9   ^ 72 ED         jb short NOTEPAD.0040E8D8          //这里要往回跳了
  0040E8EB     B8 01000000   mov eax,1                        //F4,然后继续F8
  0040E8F0     01DB          add ebx,ebx
  0040E8F2     75 07         jnz short NOTEPAD.0040E8FB          //跳
  。。。。。。。。。。。
  0040E8FB     11C0          adc eax,eax                //来到这里,F8继续
  0040E8FD     01DB          add ebx,ebx
  0040E8FD     01DB          add ebx,ebx
  0040E8FF   ^ 73 EF         jnb short NOTEPAD.0040E8F0
  0040E901     75 09         jnz short NOTEPAD.0040E90C         //跳
  。。。。。。。。。。。
  0040E90C     31C9          xor ecx,ecx                   //跳到这里,继续F8
  0040E90E     83E8 03       sub eax,3
  0040E90E     83E8 03       sub eax,3
  0040E911     72 0D         jb short NOTEPAD.0040E920        //跳
  。。。。。。。。。。。
  0040E920     01DB          add ebx,ebx               //跳到这里,继续F8
  0040E922     75 07         jnz short NOTEPAD.0040E92B              //跳
  。。。。。。。。。。。
  0040E92B     11C9          adc ecx,ecx                 //跳到了这里,继续F8
  0040E92D     01DB          add ebx,ebx
  0040E92F     75 07         jnz short NOTEPAD.0040E938        //跳
  。。。。。。。。。。。
  0040E938     11C9          adc ecx,ecx              //跳到这里,继续F8
  0040E93A     75 20         jnz short NOTEPAD.0040E95C         //跳
  。。。。。。。。。。。
  0040E95C     81FD 00F3FFFF cmp ebp,-0D00         //来到这,继续F8
  0040E962     83D1 01       adc ecx,1
  0040E965     8D142F        lea edx,dword ptr ds:[edi+ebp]
  0040E968     83FD FC       cmp ebp,-4
  0040E96B     76 0F         jbe short NOTEPAD.0040E97C
  0040E96D     8A02          mov al,byte ptr ds:[edx]
  0040E96F     42            inc edx
  0040E970     8807          mov byte ptr ds:[edi],al
  0040E972     47            inc edi
  0040E973     49            dec ecx
  0040E974   ^ 75 F7         jnz short NOTEPAD.0040E96D          //要往回跳了
  0040E976   ^ E9 63FFFFFF   jmp NOTEPAD.0040E8DE
  0040E97B     90            nop
  0040E97C     8B02          mov eax,dword ptr ds:[edx]          //在这里F4,继续F8
  0040E97E     83C2 04       add edx,4
  0040E981     8907          mov dword ptr ds:[edi],eax
  0040E983     83C7 04       add edi,4
  0040E986     83E9 04       sub ecx,4
  0040E989   ^ 77 F1         ja short NOTEPAD.0040E97C
  0040E98B     01CF          add edi,ecx
  0040E98D   ^ E9 4CFFFFFF   jmp NOTEPAD.0040E8DE           //要往回跳了。
  0040E992     5E            pop esi                        //这里F4,继续F8
  0040E993     89F7          mov edi,esi
  0040E995     B9 DD000000   mov ecx,0DD
  0040E99A     8A07          mov al,byte ptr ds:[edi]
  0040E99C     47            inc edi
  0040E99D     2C E8         sub al,0E8
  0040E99F     3C 01         cmp al,1
  0040E9A1   ^ 77 F7         ja short NOTEPAD.0040E99A           //要往回跳了
  0040E9A3     803F 00       cmp byte ptr ds:[edi],0             //这里F4,继续F8
  0040E9A6   ^ 75 F2         jnz short NOTEPAD.0040E99A          //要往回跳了
  0040E9A8     8B07          mov eax,dword ptr ds:[edi]          //这里F4,继续F8
  0040E9AA     8A5F 04       mov bl,byte ptr ds:[edi+4]
  0040E9AD     66:C1E8 08    shr ax,8
  0040E9B1     C1C0 10       rol eax,10
  0040E9B4     86C4          xchg ah,al
  0040E9B6     29F8          sub eax,edi
  0040E9B8     80EB E8       sub bl,0E8
  0040E9BB     01F0          add eax,esi
  0040E9BD     8907          mov dword ptr ds:[edi],eax
  0040E9BF     83C7 05       add edi,5
  0040E9C2     89D8          mov eax,ebx
  0040E9C4   ^ E2 D9         loopd short NOTEPAD.0040E99F           //要往回跳了
  0040E9C6     8DBE 00C00000 lea edi,dword ptr ds:[esi+C000>        //这里F4,继续F8
  0040E9CC     8B07          mov eax,dword ptr ds:[edi]
  0040E9CE     09C0          or eax,eax
  0040E9D0     74 3C         je short NOTEPAD.0040EA0E
  0040E9D2     8B5F 04       mov ebx,dword ptr ds:[edi+4]
  0040E9D5     8D8430 14EC00>lea eax,dword ptr ds:[eax+esi+>
  0040E9DC     01F3          add ebx,esi
  0040E9DE     50            push eax
  0040E9DF     83C7 08       add edi,8
  0040E9E2     FF96 A0EC0000 call dword ptr ds:[esi+ECA0]
  0040E9E8     95            xchg eax,ebp
  0040E9E9     8A07          mov al,byte ptr ds:[edi]
  0040E9EB     47            inc edi
  0040E9EC     08C0          or al,al
  0040E9EE   ^ 74 DC         je short NOTEPAD.0040E9CC
  0040E9F0     89F9          mov ecx,edi
  0040E9F2     57            push edi
  0040E9F3     48            dec eax
  0040E9F4     F2:AE         repne scas byte ptr es:[edi]
  0040E9F6     55            push ebp
  0040E9F7     FF96 A4EC0000 call dword ptr ds:[esi+ECA4]
  0040E9FD     09C0          or eax,eax
  0040E9FF     74 07         je short NOTEPAD.0040EA08
  0040EA01     8903          mov dword ptr ds:[ebx],eax
  0040EA03     83C3 04       add ebx,4
  0040EA06   ^ EB E1         jmp short NOTEPAD.0040E9E9           //要往回跳了
  0040EA08     FF96 A8EC0000 call dword ptr ds:[esi+ECA8]
  0040EA0E     61            popad                                 //这里F4,继续F8
  0040EA0F   - E9 B826FFFF   jmp NOTEPAD.004010CC                   //在这里直接跳到了OEP
  。。。。。。。。。。。。。。。。。。。
  004010CC     55            push ebp                    //来到这里,在此dump
  004010CD     8BEC          mov ebp,esp
  004010CF     83EC 44       sub esp,44
  其他操作请看动画
  
  方法2:ESP定律手动脱壳
  
  0040E8C0 N>  60            pushad                        //停在这里了,我们F8单步
  0040E8C1     BE 15B04000   mov esi,NOTEPAD.0040B015       //ESP突现,0012FFA4
  
  dd 0012FFA4回车, 断点--硬件访问--WORD,F9运行,直接来到这里
  
  0040EA0F   - E9 B826FFFF   jmp NOTEPAD.004010CC           //来到这,F8单步就到了OEP
  
  不详述,和方法一一样了
  
  方法3:内存镜像法(由于经过了方法2和方法3大家都熟悉了代码,我在这里就不写了)
  ALT+M打开内存
  找到.rsrc,F2下断,F9运行
  。。。。。。
  ALT+M打开内存
  找到UPX0,F2下断,F9运行
  
  0040EA01     8903          mov dword ptr ds:[ebx],eax     ; kernel32._lwrite  //来到这,F8继续
  0040EA03     83C3 04       add ebx,4
  0040EA06   ^ EB E1         jmp short NOTEPAD.0040E9E9
  0040EA08     FF96 A8EC0000 call dword ptr ds:[esi+ECA8]
  0040EA0E     61            popad
  0040EA0F   - E9 B826FFFF   jmp NOTEPAD.004010CC
  
  方法4:
        找到.rsrc,F2下断,F9运行
        下模拟跟踪命令 tc eip<401000  F9运行

  0040EA0F   - E9 B826FFFF   jmp NOTEPAD.004010CC  //F8继续

  方法5:捷径(也是前辈们总结出来的方法)
  直接CTRL+F,输入popad
  0040EA0E     61            popad                 //F2下断,F9运行,F2取消断点,单步F8
  0040EA0F   - E9 B826FFFF   jmp NOTEPAD.004010CC
  
   
  
--------------------------------------------------------------------------------
【版权声明】: 本动画原创于黑客动画吧, 大家可以免费转载,
              转载请注明作者并保持动画的完整性, 谢谢!

                                                       2006年06月05日 13:29:09
下载地址:电信通道   网通通道

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 175
活跃值: (2331)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
压缩壳相对好脱。
2006-6-9 08:05
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
要是细细研究起来 不止5种
2006-6-9 08:08
0
游客
登录 | 注册 方可回帖
返回
//