脫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