蓝橘子园

生活属于我,来去要自如

« 【以守为攻+后台迷惑】手脱WinUpack壳 »

手脱按键精灵6.31.1602版UPX+PEBundle的壳

手脱按键精灵6.31.1602版UPX+PEBundle的壳

首先第一部当然是查壳了,拿出peid看了下,是PEBundle 2.0x - 2.4x-> Jeremy Collake的壳!

    然后就请OD载入他了




载入后提示:

---------------------------
压缩代码?
---------------------------
模块 '按键精灵' 的快速统计报告表明其代码段可能被压缩, 加密, 或包含大量的嵌入数据. 代码分析将是非常不可靠或完全错误的. 您仍要继续分析吗?
---------------------------
是(Y)   否(N)  
---------------------------

这里选择否,

进入后停在了: 

  

00692000 >  9C              pushfd             ;停在了这里
00692001    60              pushad
00692002    E8 02000000     call    00692009   ;这里F7
  

  

首先隐藏OD,忽略所有异常,接着F8单步走

这里F8单步的话会发生错误,所以这里用F7跟进

00692002    E8 02000000     call    00692009   ;这里F7

跳到了这里>> 

  

00692009    8BC4            mov     eax, esp       ;跳到了这里,继续F8
0069200B    83C0 04         add     eax, 4
0069200E    93              xchg    eax, ebx 
   

   

  

然后继续F8走,遇到循环或者回跳就F4运行到下一条

然后一直到这里>> 

  

00685000    9C              pushfd                 ;这里跟入口点一样
00685001    60              pushad
00685002    E8 02000000     call    00685009     
  ;F7跟进
  

  

发现这里跟入口点一样,所以也同上,F8到

00685002    E8 02000000     call    00685009       ;F7跟进

这里的时候,F7跟进,跳到了这里>> 

  

00685009    8BC4            mov     eax, esp         ;同上 继续F8单步走
0068500B    83C0 04         add     eax, 4
0068500E    93              xchg    eax, ebx
0068500F    8BE3            mov     esp, ebx 

   

   

  

然后继续F8单步走,跟上面一样的,一直走到>> 

  

006853A9    E8 B70A0000     call    00685E65      ;这里F7 F8都没影响
006853AE    0F83 A8000000   jnb     0068545C 
   

  

这里我是按F8步过的,然后继续F8单步走>> 

  

0068545C    C785 3D294000 0>mov     dword ptr [ebp+40293D], 1
00685466    61              popad                                                  
;看到这一句说明离oep不远了
00685467    9D              popfd
00685468    68 F0876600     push    006687F0
0068546D    C3              retn 
   

  

这里看到了popad,根据经验得知离oep不远了,在

0068546D    C3              retn

这一句返回后应该就是oep了。

返回到了>> 

  

006687F0    60              pushad              ;返回到这里了,在这里脱壳就干掉了PEBundle
006687F1    BE 00105900     mov     esi, 00591000
006687F6    8DBE 0000E7FF   lea     edi, dword ptr [esi+FFE70000] 
   

  

这里可以看出是UPX的入口点,我在这里脱了下壳,然后查壳,提示是UPX的壳,试着运行下,程序正常运行!既然PEBundle的壳搞定了,那么UPX的壳就容易了。用ESP定律,或者用前辈总结出来的经验一下就搞定了!

    接着,我就使用前辈的方法按Ctrl+F,输入命令popad→回车到了>> 

  

00668967    61              popad             ;到了这里,我在这里下断点
00668968  - E9 FB67DFFF     jmp     0045F168
0066896D    0000            add     byte ptr [eax], al
0066896F    0000            add     byte ptr [eax], al 

   

  

00668967    61              popad 这里下断点F9运行后取消断点,然后F8再F8 

  

0045F168    55              push    ebp          ;这里就是程序的oep了
0045F169    8BEC            mov     ebp, esp
0045F16B    6A FF           push    -1 

   

  

就到了程序的oep了,之后在这里dump!

脱壳后检查,显示的Microsoft Visual C++ 6.0,脱壳成功,我再试了下运行,发现错误!



马上打开importREC1.6。运行importREC后在进程里面选择按键精灵6.exe的进程!再输入oep的地址,

这里的oep是0045F168,不过输入的时候只要输入5F168!然后点击 自动搜索IAT 再点击获取输入表,显示出来的输入表有一两个地方的为假,再点击显示非法函数,再右击已找到输入表函数里面被选定的地方右击,选择追踪层次1(分解) 提示没有处理的指示器,,。。不管了,我直接选择修复抓取文件,居然提示IAT依然是无效的,


晕了,运行下刚修复的文件,还是提示错误。。。。不知道哪里错了!

      然后我又回到OD,在oep再试dump,不过这次选择的是下面那个Method2:Search DLL & API name string in dumped file(图中框出来的)




脱掉后再查壳,Microsoft Visual C++ 6.0 成功!!~

运行程序,= =||双击没反应,再次请出Import REConstructor修复,跟上面的方法一样(居然连提示也还是跟上面的一样,O_O )不管了,再次修复抓取文件,选择后面这次脱壳的程序,仍然提示IAT无效!修复后运行修复好的的程序,程序正常运行!




 
 

  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Spirit Build 80722 Code detection by Codefense  theme by BokeZhuti

Copyright 2007-2009 www.lanjuzi.com. Some Rights Reserved.备案号:湘ICP备08103976号