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:}
{:1_903:}小白来学习。。。 前来学习·· 嗯,用单步跟踪法挺繁琐,不过有兴趣的朋友可以试试看,相信会有所收获! 这个是UPX变形壳,用单步跟踪法难度会大些,也有些繁琐。 抢个地板,露个脸,顺便看下教程 楼主历害,学习了 感谢楼主分享,吾爱有你更精彩
页:
[1]
2