脱Crunch/PE -> BitArts的壳。
这个壳不难,我没有发现他有反跟踪的功能,不如软件的作者以前给他的作品加的PEcompact修改版的壳难!
为了遵守论坛上的约定,我不说软件的名字。
其实这个壳挺简单的,好了,开始吧!
运行trw,载入程序。
BitArts:005A2000
start proc near
BitArts:005A2000
push ebp
BitArts:005A2001
call 5A2006 <---这要按F8,因为并不是真正的call,只是jmp的变形。在脱aspr的壳是也会经常的碰到这种情况,那么要如何来判断什么时候按F8什么时候按F10呢?我发现,如果这个call是调用很近的地址的时候,比如上面的call
5A2006,这个5A2006就是下面的地址,所以要按F8,否则程序就会运行了,达不到跟踪的目的。相反的如果调用是比较远的地址时可以用F10代过,但是也要看情况而定。
BitArts:005A2006 pop
ebp
BitArts:005A2007
sub ebp, 6
BitArts:005A200A
mov eax, ebp
BitArts:005A200C
push ebp
BitArts:005A200D
pusha
BitArts:005A200E
mov [ebp+348Ah],
ebp
BitArts:005A2014
sub eax, [ebp+3465h]
BitArts:005A201A
mov [ebp+2519h], eax
BitArts:005A2020
push ebp
BitArts:005A2021
mov ebx, 1ECDh
BitArts:005A2026 add
ebx, ebp
BitArts:005A2028
push ebx
BitArts:005A2029
push dword ptr fs:0
BitArts:005A202F
mov fs:0, esp
BitArts:005A2035 cmp
byte ptr [ebp+3690h], 0
BitArts:005A203C
jnz short loc_5A2047
BitArts:005A203E
mov byte ptr [ebp+3690h],
1
BitArts:005A2045
jmp short loc_5A205C
下面就一直按F10,不过你要注意看ECX里面的数据,因为通常都是ECX在做记数器,看着ECX用F7来跳过一段一段的解压过程。这里有个小技巧,假设你现在的位置是:
5A611C:jmp005A6074 <-----你现在的位置。
5A6121: mov ecx,13
你会看到这个jmp是向前跳转的,这时按F6,然后把光棒放到5A6121的位置上,按F7。通常的情况下你会安全着陆的,在脱aspr的壳时用这样的方法也可以跳过重复的步骤。
从5A6121这开始再跳过一个jmp就很快的来到了程序真正的入口了,有个jmp eax。
好了,用命令makepe dump.exe就行了,到此脱壳结束。
运行一下dump.exe,发现logo出现后就马上推出了,用trw分别载入dump.exe和未脱壳的程序跟踪对比后发现:
:004C9C05
BA9CA64C00 mov edx, 004CA69C
:004C9C0A 8B45FC
mov eax, dword ptr [ebp-04]
:004C9C0D E8CAA10100
call 004E3DDC
:004C9C12 8B45A4
mov eax, dword ptr [ebp-5C]
:004C9C15
50
push eax
:004C9C16 8D559C
lea edx, dword ptr [ebp-64]
:004C9C19 A1787C4E00
mov eax, dword ptr [004E7C78]
:004C9C1E
8B00 mov
eax, dword ptr [eax]
:004C9C20 E8A78BF8FF
call 004527CC
:004C9C25 8B459C
mov eax, dword ptr [ebp-64]
:004C9C28 8D55A0
lea edx, dword ptr [ebp-60]
:004C9C2B E878ECF3FF call
004088A8
:004C9C30 8B55A0
mov edx, dword ptr [ebp-60]
:004C9C33 58
pop eax
:004C9C34
E86BA5F3FF call 004041A4
:004C9C39 85C0
test eax, eax
:004C9C3B 7F05
jg 004C9C42 <-----这里要跳过才行。
:004C9C3D
E81E9EF3FF call 00403A60
<-----这儿会退出的,我没有试全nop后行不行。
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:004C9C3B(C)
|
:004C9C42 6A00
push 00000000
:004C9C44
6880000000 push 00000080
:004C9C49 6A03
push 00000003
:004C9C4B 6A00
push 00000000
:004C9C4D 6A03
push 00000003
:004C9C4F 68000000C0
push C0000000
:004C9C54 8D4D98
lea ecx, dword ptr [ebp-68]
好了,修改后,运行一下,没有发现有什么问题。算是脱壳成功吧!
小球
2002.5.4
- 标 题:脱Crunch/PE -> BitArts的壳。 (3千字)
- 作 者:小球[CCG]
- 时 间:2002-5-3 15:46:13
- 链 接:http://bbs.pediy.com