好友
阅读权限25
听众
最后登录1970-1-1
|
今夕望月前面写过一篇脱文加去广告。地址: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:[0] 到这用ESP定律,下硬件断点。
00402F65 64:8925 0000000>mov dword ptr fs:[0],esp
00402F6C 33C0 xor eax,eax
00402F6E 8908 mov dword ptr ds:[eax],ecx
00402F70 50 push eax
00402F71 45 inc ebp
运行一次来到这里。
7762F93D 3B45 F8 cmp eax,dword ptr ss:[ebp-0x8]
7762F940 72 09 jb Xntdll.7762F94B
7762F942 3B45 F4 cmp eax,dword ptr ss:[ebp-0xC]
7762F945 0F82 42AF0500 jb ntdll.7768A88D
7762F94B FF75 F0 push dword ptr ss:[ebp-0x10]
7762F94E FF73 04 push dword ptr ds:[ebx+0x4]
7762F951 E8 15FEFFFF call ntdll.7762F76B
7762F956 84C0 test al,al
7762F958 0F84 2FAF0500 je ntdll.7768A88D
7762F95E FF73 04 push dword ptr ds:[ebx+0x4]
7762F961 8D45 EC lea eax,dword ptr ss:[ebp-0x14]
以前到这里一般我就取消硬件断点开始单步了,或者改用内存法。
也就是到这里,今夕望月说要改一个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:[ebx+0x4]
7762F961 8D45 EC lea eax,dword ptr ss:[ebp-0x14]
7762F964 50 push eax
7762F965 FF75 0C push dword ptr ss:[ebp+0xC]
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:[ebp-0x14]
7762F964 50 push eax
7762F965 FF75 0C push dword ptr ss:[ebp+0xC]
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:[esi+0x4],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:[eax+0x10001257]
0045CE6E 8B53 18 mov edx,dword ptr ds:[ebx+0x18]
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:[ebx+0x4]
0045CE7E 6A 00 push 0x0
0045CE80 8B4B 10 mov ecx,dword ptr ds:[ebx+0x10]
0045CE83 03CA add ecx,edx
0045CE85 8B01 mov eax,dword ptr ds:[ecx]
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:[ebx]
0045CE90 8B43 20 mov eax,dword ptr ds:[ebx+0x20]
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:[eax],al
0045CEF9 0000 add byte ptr ds:[eax],al
0045CEFB 0000 add byte ptr ds:[eax],al
0045CEFD 0000 add byte ptr ds:[eax],al
0045CEFF 0000 add byte ptr ds:[eax],al
0045CF01 0000 add byte ptr ds:[eax],al
0045CF03 0000 add byte ptr ds:[eax],al
0045CF05 0000 add byte ptr ds:[eax],al
0045CF07 0000 add byte ptr ds:[eax],al
jmp eax 直接单步一下到达OEP。
00402F58 > 68 08E74000 push 魔兽改键.0040E708
00402F5D E8 F0FFFFFF call 魔兽改键.00402F52 ; jmp 到 msvbvm60.ThunRTMain
00402F62 0000 add byte ptr ds:[eax],al
00402F64 48 dec eax
00402F65 0000 add byte ptr ds:[eax],al
00402F67 0030 add byte ptr ds:[eax],dh
00402F69 0000 add byte ptr ds:[eax],al
00402F6B 0040 00 add byte ptr ds:[eax],al
00402F6E 0000 add byte ptr ds:[eax],al
00402F70 0000 add byte ptr ds:[eax],al
00402F72 0000 add byte ptr ds:[eax],al
00402F74 59 pop ecx
00402F75 6C ins byte ptr es:[edi],dx
OEP到了。VB写的。
取消硬件断点,没有加密IAT,也不用寻找IAT,也没有VM,现在可以请出LOADPE,和IMPORTREC了,就可以完美脱壳。这个都会,我就不继续写了。
总结一下。脱这个壳,ESP下硬件断点后,SHIFT+F9运行五次再单步一下就可以来到OEP。感谢今夕望月,看了他的脱文,我才写了我这个。
|
|