fah 发表于 2014-7-24 00:33

UPX变形壳破解过程

本帖最后由 fah 于 2014-7-24 00:45 编辑

      最近,菜鸟小白我找了个带UPX变形壳的记事本程序来练练手{:301_1009:},发觉用F8单步跟踪法 脱壳时,过程挺复杂、有趣{:301_978:},挺适合作为脱壳练习,便将此过程记录下来,与大家分享、交流,希望大家多多支持!{:301_988:}
2014.7.24by 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变形壳(通过区段可了解到)      
      PEID查壳是:   Nothing found
      PEID核心扫描: Microsoft Visual C++ 6.0 SPx Method 1

PEID查壳

    PEID核心查壳

   
区段

   
OD载入提示

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

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:,0x4D
0041014A^ 0F85 B0FEFFFF   jnz notepad_.00410000                  ; 在下一句代码处按F4
00410150    807B 01 5A      cmp byte ptr ds:,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:
004101E1    8BD7            mov edx,edi
004101E3    31D9            xor ecx,ebx
004101E5    87FA            xchg edx,edi
004101E7    8B5418 78       mov edx,dword ptr ds:
004101EB    8D141A          lea edx,dword ptr ds:
004101EE    84FD            test ch,bh
004101F0    8B72 20         mov esi,dword ptr ds:
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:
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 34000000mov eax,dword ptr fs:
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 和 0040E9A1 和 0040E9A6 和 0040E9C4 处在下一句代码处按F4.


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


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

   
OEP

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

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


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


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

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


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

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

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






















冷丝 发表于 2014-7-24 21:55

天空の幻像 发表于 2014-7-24 00:57

{:1_903:}小白来学习。。。

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

感谢楼主分享,吾爱有你更精彩
页: [1] 2
查看完整版本: UPX变形壳破解过程