吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9249|回复: 16
收起左侧

[原创] UPX变形壳破解过程

  [复制链接]
fah 发表于 2014-7-24 00:33
本帖最后由 fah 于 2014-7-24 00:45 编辑

      最近,菜鸟小白我找了个带UPX变形壳的记事本程序来练练手,发觉用F8单步跟踪法 脱壳,过程挺复杂、有趣,挺适合作为脱壳练习,便将此过程记录下来,与大家分享、交流,希望大家多多支持!
2014.7.24  by Fah.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
基础知识
F8单步跟踪法:
1.用OD载入,点“不分析代码!”
2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4)
3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)
4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!
5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP
6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入
7.一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【下载地址】: 见附件 upx加壳程序.rar (32.53 KB, 下载次数: 142)
【加壳方式】: UPX变形壳(通过区段可了解到)      
        PEID查壳是:     Nothing found
        PEID核心扫描: Microsoft Visual C++ 6.0 SPx Method 1

PEID查壳2

PEID查壳2

PEID查壳

核心

核心
    PEID核心查壳

区段

区段
     
区段

OD载入提示

OD载入提示
   
OD载入提示

【使用工具】:吾爱破解 OD ,LordPE , ImportREC 1.7 .
【操作平台】: XP SP3
【作者声明】: 只是感兴趣,练练手。失误之处敬请各位大侠赐教!  
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以下是破解过程:
一、查壳

PEID查壳是:         Nothing found
核心扫描:             Microsoft Visual C++ 6.0 SPx Method 1

二、寻找OEP

OD载入,停在00410226.

00410226 >  E8 05000000     call notepad_.00410230                   ; F7,近call(F8程序会运行起来)
0041022B    F7D6            not esi
0041022D    F7D6            not esi
0041022F    90              nop
00410230    E9 81000000     jmp notepad_.004102B6                    ; 跳到 004102B6


004102B6    60              pushad                                                    ; 来到这。
004102B7  ^ EB C9           jmp Xnotepad_.00410282                   ; F8向上跳到00410282


再F8几次,来到
004102A1  ^\E9 9FFEFFFF     jmp notepad_.00410145                    ; F8向上跳


再F8一次,向上跳转,来到
00410145    29E1            sub ecx,esp
00410147    803B 4D         cmp byte ptr ds:[ebx],0x4D
0041014A  ^ 0F85 B0FEFFFF   jnz notepad_.00410000                    ; 在下一句代码处按F4
00410150    807B 01 5A      cmp byte ptr ds:[ebx+0x1],0x5A
00410154    99              cdq
00410155    B1 C3           mov cl,0xC3
00410157  ^ 0F84 B1FEFFFF   je notepad_.0041000E                     ; F8向上跳到0041000E.


0041000E    68 324CC7ED     push 0xEDC74C32
00410013    E9 62010000     jmp notepad_.0041017A                    ; F8,跳到0041017A


0041017A    68 BF054165     push 0x654105BF
0041017F    E8 5A000000     call notepad_.004101DE                       ; F7进入call


接下来F8单步:

004101DE    8B43 3C         mov eax,dword ptr ds:[ebx+0x3C]
004101E1    8BD7            mov edx,edi
004101E3    31D9            xor ecx,ebx
004101E5    87FA            xchg edx,edi
004101E7    8B5418 78       mov edx,dword ptr ds:[eax+ebx+0x78]
004101EB    8D141A          lea edx,dword ptr ds:[edx+ebx]
004101EE    84FD            test ch,bh
004101F0    8B72 20         mov esi,dword ptr ds:[edx+0x20]
004101F3  ^ E9 8CFEFFFF     jmp notepad_.00410084                    ; 在下一句代码处按F4
004101F8    51              push ecx
004101F9    50              push eax
004101FA    50              push eax
004101FB  ^ E9 96FEFFFF     jmp notepad_.00410096                    ; F7


来到00410096 ,之后F8直到retn.
00410096    29EE            sub esi,ebp                                                  ; notepad_.0041022B
00410098    01EE            add esi,ebp
0041009A    F7D5            not ebp
0041009C    F7D5            not ebp
0041009E    F9              stc
0041009F    52              push edx
004100A0    F8              clc
004100A1    FF95 1D410000   call dword ptr ss:[ebp+0x411D]
004100A7    83C4 20         add esp,0x20
004100AA    C3              retn


F8一次,来到:
00410260    85C0            test eax,eax
00410262    87C9            xchg ecx,ecx
00410264    8AD2            mov dl,dl
00410266    BA 349918E0     mov edx,0xE0189934
0041026B    FC              cld
0041026C    8BD4            mov edx,esp
0041026E  ^ 0F84 F7FEFFFF   je notepad_.0041016B
00410274    20EA            and dl,ch
00410276    50              push eax
00410277    80C5 E6         add ch,0xE6
0041027A    66:8CC8         mov ax,cs
0041027D  ^ E9 51FEFFFF     jmp notepad_.004100D3                    ; F7进入(在下一句代码处按F4则程序会运行起来,无法继续向下跟踪。破解时不妨试一下   ^_^  )


F7后,来到
004100D3    80E1 18         and cl,0x18

F8几次,跳到
004102D5    31D2            xor edx,edx
004102D7    64:A1 34000000  mov eax,dword ptr fs:[0x34]
004102DD    F8              clc
004102DE    8ACF            mov cl,bh
004102E0  ^ E9 29FEFFFF     jmp notepad_.0041010E                    ; F7进入


来到
0041010E    85C0            test eax,eax


F8单步向下,来到retn.   
F8一次,来到了
0040E8C0    60              pushad


继续F8向下,在0040E8E9 处 F4到下一行。


F8直到0040E974,接着:
0040E974  ^\75 F7           jnz Xnotepad_.0040E96D                        ; 在下一句代码处按F4
0040E976  ^ E9 63FFFFFF     jmp notepad_.0040E8DE                    ; F8,再从上到下一次,跳过此地址。


跳到 0040E97C,
继续F8, 0040E98D 0040E9A10040E9A6 0040E9C4 在下一句代码处按F4.


之后一直F8向下来到
0040EA06    EB E1           jmp Xnotepad_.0040E9E9                  


在 0040EA0F 处按F4,再F8一次,来到OEP.即:
004010CC    55              push ebp                                                        ; OEP.

OEP.jpg      
OEP

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

三、脱壳,修复 (略过,重点是上面的寻找OEP)


经脱壳,修复,用PEID查壳,显示:Microsoft Visual C++ 6.0 SPx Method 1


程序也能打开,表示脱壳成功!
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
四、破解总结

       本帖主要是关于寻找OEP的过程,方法是F8单步跟踪法,是UPX变形壳练习。破解时往往一不小心就使得程序运行起来或返回,难以到达OEP,所以脱壳时需要细心分析,不断尝试。相信你最终也能成功脱壳、运行!


版权说明:
        Fah 原创发表,转帖请说明来源。(www.52pojie.cn

PS:
        脱壳方法有较多,以上仅展示了其中的F8单步跟踪法,有兴趣的朋友可以继续探索……

        【此贴是本人在吾爱的第一帖,希望各位能多多支持!互相学习、共同进步。】






















免费评分

参与人数 1热心值 +1 收起 理由
9456-XN + 1 夜深人静,一篇好文

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
冷丝 发表于 2014-7-24 21:55
提示: 作者被禁止或删除 内容自动屏蔽
天空の幻像 发表于 2014-7-24 00:57
dolphin震 发表于 2014-7-24 01:12
头像被屏蔽
纵横、叼蛮意 发表于 2014-7-24 01:15
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽
xiaowenyu520 发表于 2014-7-24 01:35
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| fah 发表于 2014-7-24 01:35
嗯,用单步跟踪法挺繁琐,不过有兴趣的朋友可以试试看,相信会有所收获!
 楼主| fah 发表于 2014-7-24 01:39
这个是UPX变形壳,用单步跟踪法难度会大些,也有些繁琐。
469164323 发表于 2014-7-24 02:48
抢个地板,露个脸,顺便看下教程
SaberMason 发表于 2014-7-24 06:32 来自手机
楼主历害,学习了
koalabear2013 发表于 2014-7-24 07:28 来自手机
感谢楼主分享,吾爱有你更精彩
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-11 10:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表