yangand 发表于 2011-4-13 19:51

魔兽改键精灵脱壳(PECompact 2.x )方法2

今夕望月前面写过一篇脱文加去广告。地址:http://www.52pojie.cn/forum-viewthread-tid-82515-extra-page%3D1%26orderby%3Ddateline.html
本人愚钝,作者说PECompact 2.x的壳要改一个跳转,我在网上下了一下程序,按照作者的方法。一次ESP过后,没有找到那个要改的跳转,左试右试,就是到达不了OEP。ESP加内存镜像法也试了,纯内存镜像法也度了,还是到不了OEP。后来就瞎试了,终于被我瞎猫碰上死老鼠,终于到达了OEP。
下面我把我脱这个款的方法写出来。是不是通用我就不知道了。我就一菜鸟,脱了这壳纯运气,第一次发脱文,得色得色。

PEID查壳:PECompact 2.x -> Jeremy Collake
其实PEID对我来说还没什么帮助,最多也就知道是不是加了壳。一加了壳我就晕。到现在我也没去总结脱各类壳的方法。几种方法轮流上就是。什么ESP,内存镜像,单步,最后一次异常。。。 瞎碰吧。

开始脱吧。OD载入程序。
入口如下:
00402F58 >B8 30CE4500   mov eax,魔兽改键.0045CE30
00402F5D    50            push eax
00402F5E    64:FF35 0000000>push dword ptr fs:               到这用ESP定律,下硬件断点。
00402F65    64:8925 0000000>mov dword ptr fs:,esp
00402F6C    33C0            xor eax,eax
00402F6E    8908            mov dword ptr ds:,ecx
00402F70    50            push eax
00402F71    45            inc ebp

运行一次来到这里。
7762F93D    3B45 F8         cmp eax,dword ptr ss:
7762F940    72 09         jb Xntdll.7762F94B
7762F942    3B45 F4         cmp eax,dword ptr ss:
7762F945    0F82 42AF0500   jb ntdll.7768A88D
7762F94B    FF75 F0         push dword ptr ss:
7762F94E    FF73 04         push dword ptr ds:
7762F951    E8 15FEFFFF   call ntdll.7762F76B
7762F956    84C0            test al,al
7762F958    0F84 2FAF0500   je ntdll.7768A88D
7762F95E    FF73 04         push dword ptr ds:
7762F961    8D45 EC         lea eax,dword ptr ss:

以前到这里一般我就取消硬件断点开始单步了,或者改用内存法。
也就是到这里,今夕望月说要改一个JNE,让它跳。我找不到那个JNE那急得,每个JE,JNE都去试了一次都不对。
后面我就没取消断点,直接SHIFT+F9,来到这里
7762F951    E8 15FEFFFF   call ntdll.7762F76B
7762F956    84C0            test al,al
7762F958    0F84 2FAF0500   je ntdll.7768A88D
7762F95E    FF73 04         push dword ptr ds:
7762F961    8D45 EC         lea eax,dword ptr ss:
7762F964    50            push eax
7762F965    FF75 0C         push dword ptr ss:
7762F968    53            push ebx
7762F969    56            push esi
7762F96A    E8 E9770200   call ntdll.77657158
7762F96F    3BFB            cmp edi,ebx
7762F971    0F84 0BAF0500   je ntdll.7768A882
7762F977    33C9            xor ecx,ecx
7762F979    2BC1            sub eax,ecx

还是不熟悉的地方,那就瞎来,继续SHIFT+F9,来到这里
7762F961    8D45 EC         lea eax,dword ptr ss:
7762F964    50            push eax
7762F965    FF75 0C         push dword ptr ss:
7762F968    53            push ebx
7762F969    56            push esi
7762F96A    E8 E9770200   call ntdll.77657158
7762F96F    3BFB            cmp edi,ebx
7762F971    0F84 0BAF0500   je ntdll.7768A882
7762F977    33C9            xor ecx,ecx
7762F979    2BC1            sub eax,ecx
7762F97B^ 0F84 9866FEFF   je ntdll.77616019
7762F981    48            dec eax
7762F982    0F85 4DB10500   jnz ntdll.7768AAD5
7762F988    F646 04 08      test byte ptr ds:,0x8

还是和上面一样,再次SHIFT+F9,来到这里
0045CE62    55            push ebp
0045CE63    53            push ebx
0045CE64    51            push ecx
0045CE65    57            push edi
0045CE66    56            push esi
0045CE67    52            push edx
0045CE68    8D98 57120010   lea ebx,dword ptr ds:
0045CE6E    8B53 18         mov edx,dword ptr ds:
0045CE71    52            push edx
0045CE72    8BE8            mov ebp,eax
0045CE74    6A 40         push 0x40
0045CE76    68 00100000   push 0x1000
0045CE7B    FF73 04         push dword ptr ds:
0045CE7E    6A 00         push 0x0
0045CE80    8B4B 10         mov ecx,dword ptr ds:
0045CE83    03CA            add ecx,edx
0045CE85    8B01            mov eax,dword ptr ds:
0045CE87    FFD0            call eax                                                 0045CE89    5A            pop edx
0045CE8A    8BF8            mov edi,eax
0045CE8C    50            push eax
0045CE8D    52            push edx
0045CE8E    8B33            mov esi,dword ptr ds:
0045CE90    8B43 20         mov eax,dword ptr ds:
0045CE93    03C2            add eax,edx

上面的这一段就看起来亲切多了。如果这时候开始单步,我估计也能到达OEP。ESP这么过瘾,我们先继续试一下SHIFT+F9,来到这里
0045CEF2- FFE0            jmp eax                                    ;这一行太亲切了
0045CEF4    58            pop eax
0045CEF5    2F            das
0045CEF6    40            inc eax
0045CEF7    0000            add byte ptr ds:,al
0045CEF9    0000            add byte ptr ds:,al
0045CEFB    0000            add byte ptr ds:,al
0045CEFD    0000            add byte ptr ds:,al
0045CEFF    0000            add byte ptr ds:,al
0045CF01    0000            add byte ptr ds:,al
0045CF03    0000            add byte ptr ds:,al
0045CF05    0000            add byte ptr ds:,al
0045CF07    0000            add byte ptr ds:,al

jmp eax 直接单步一下到达OEP。
00402F58 >68 08E74000   push 魔兽改键.0040E708
00402F5D    E8 F0FFFFFF   call 魔兽改键.00402F52                     ; jmp 到 msvbvm60.ThunRTMain
00402F62    0000            add byte ptr ds:,al
00402F64    48            dec eax
00402F65    0000            add byte ptr ds:,al
00402F67    0030            add byte ptr ds:,dh
00402F69    0000            add byte ptr ds:,al
00402F6B    0040 00         add byte ptr ds:,al
00402F6E    0000            add byte ptr ds:,al
00402F70    0000            add byte ptr ds:,al
00402F72    0000            add byte ptr ds:,al
00402F74    59            pop ecx
00402F75    6C            ins byte ptr es:,dx

OEP到了。VB写的。
取消硬件断点,没有加密IAT,也不用寻找IAT,也没有VM,现在可以请出LOADPE,和IMPORTREC了,就可以完美脱壳。这个都会,我就不继续写了。

总结一下。脱这个壳,ESP下硬件断点后,SHIFT+F9运行五次再单步一下就可以来到OEP。感谢今夕望月,看了他的脱文,我才写了我这个。






1316 发表于 2011-4-14 12:04

学习下...

今夕望月 发表于 2011-4-14 22:13

{:1_912:}无比光荣啊,不过我那个脱壳是抄来的这个壳的通用脱法,还是楼主比较强力啊

mm76566971mm 发表于 2012-5-11 21:59

看了黑鹰的教程没怎么懂,操作跟教程根本不一样,一直不懂PECompact 2.x的壳,能否把你的附件发一下我根据你的研究一下?

blackboyswe 发表于 2012-9-1 09:02

目测这个方法是最简单的脱PECompact 2.x 的。。支持~!
页: [1]
查看完整版本: 魔兽改键精灵脱壳(PECompact 2.x )方法2