【原创】脱UPX加壳的notepad.exe

【文章标题】: 脱UPX加壳的notepad.exe
【文章作者】: 微微虫[S.T.C][DCG]
【作者邮箱】:nuxgod@163.com
【作者主页】: http://wwcgodsoft.ys168.com
【作者QQ号】: 86742748
【软件名称】: WinXP的记事本
【软件大小】: 48KB
【加壳方式】: UPX加壳
【使用工具】: OllyDBG v1.10[S.T.C]、PEiD v0.94
【操作平台】: WinXP SP2
【作者声明】: 我的破解水平很菜,请高手们不吝教正。有些不足的地方请朋友们帮忙修改一下。
--------------------------------------------------------------------------------
【详细过程】
  一、UPX是最广泛使用的压缩壳之一,它除了与Windows系列版本外,还有Linux下的版本。它是在命令提示符界面下进行加壳。
    UPX壳的出口点关键字是:popad。加了UPX的notepad.exe可以到我的主页http://wwcgodsoft.ys168.com

  二、先用PEiD检测是加了什么壳,一拿程序不要就进行调试,要先判别是否加壳。经检查是:
    UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo

  三、脱UPX壳的三个方法:

      1、用[S.T.C]专用OD载入notepad.exe手动脱壳,跟到最后popad处就行拉。脱壳过程中有有好多循环。对付循环,须让程
    序往前运行,不能让它往回跳。
      2、重新载入notepad.exe,按键盘Ctrl+F搜索关键字popad,然后F4运行到此处。不远处有个跳转,它能到程序真正的入口点:
        010143DD    61              POPAD                 -->F4到这里   
        010143DE    8D4424 80       LEA EAX,DWORD PTR SS:[ESP-80]  -->F8单步步过,以下都是按F8
        010143E2    6A 00           PUSH 0                    
        010143E4    39C4            CMP ESP,EAX
        010143E6  ^ 75 FA           JNZ SHORT notepad.010143E2 -->要回跳到010143E2,不使它回跳,在下一行按F4
        010143E8    83EC 80         SUB ESP,-80              
        010143EB  - E9 AD2FFFFF     JMP notepad.0100739D  -->就是这个跳转可以到OEP
 
        0100739D    6A 70           PUSH 70               -->程序的OEP处,现在可以转存了。点这一行右击,选择“Dump debugged process”
        0100739F    68 98180001     PUSH notepad.01001898
        010073A4    E8 BF010000     CALL notepad.01007568
        010073A9    33DB            XOR EBX,EBX
        010073AB    53              PUSH EBX
      3、下断点进行脱壳:bp GetProcAddress
        按F9运行程序,停在这里:
          7C80AC28 >  8BFF            MOV EDI,EDI   ; notepad.0101301C  -->按F2进行切换,再按Ctrl+F9 来到下面
         
          7C80AC87    C2 0800         RETN 8            -->到这里了,按F2切换,F8单步过
         
          0101439D    09C0            OR EAX,EAX     ; kernel32.GetCurrentThreadId  -->回到程序自己的领空了,F8过
          0101439F    74 07           JE SHORT notepad.010143A8
          010143A1    8903            MOV DWORD PTR DS:[EBX],EAX
          010143A3    83C3 04         ADD EBX,4
                       :
                       :
                       :
         0100739D    6A 70           PUSH 70    -->来到程序的OEP处,现在可以转存了。
         0100739F    68 98180001     PUSH notepad.01001898
         010073A4    E8 BF010000     CALL notepad.01007568
         010073A9    33DB            XOR EBX,EBX

  四、脱完壳别忘了检验一下,测试结果如下:
     Microsoft Visual C++ 7.0 Method2,是VC++编写的,正确!
 
 
   今天就介绍一下怎么脱UPX壳,未完待续!   
--------------------------------------------------------------------------------
【版权声明】: 本文纯属技术交流,转载请注明作者并保持文章的完整,谢谢!有什么不懂和疑问,请联系我!

                                                                                                                                                 2006年08月13日 3:14:12

posted @ 2007-03-21 13:06  nuxgod  阅读(786)  评论(0编辑  收藏  举报