昨天晚上,看了一篇E文的文章,關於asprotect version 1.0版的脫殼的內容,看到裡面的Import
Table重建實在是複雜,本人能力有限,暫不打算去做。
由於剛好我的手邊有asprotect version1.1版,今天早上上班後,決定試試找它壓縮過的程式的Entry
Point(EP)。花上一些時間以後,竟然小有收穫,找到一種方法能比較快地定位程式的EP,不敢獨享,在這裡特寫出來獻給大家。
我先用asprotect把Notepad.Exe壓縮,試著來找它的EP,找到方法後,把Calc.exe和cdplayer.exe壓縮再來找EP作為驗證,證明這種方法應該是正確的。
下面是我用壓縮過的Notepad.exe找EP的的過程。
015F:00690E99 8D4000 LEA
EAX,[EAX+00]
015F:00690E9C 55
PUSH EBP (A) <-----按2次F12後,返回到這裡
015F:00690E9D 8BEC
MOV EBP,ESP
015F:00690E9F 83C4F4 ADD
ESP,-0C
015F:00690EA2 E88922FFFF CALL
00683130
015F:00690EA7 0F855F2FFFFF JNZ
00683E0C
015F:00690EAD E81634FFFF CALL
006842C8
015F:00690EB2 E8917BFFFF CALL
00688A48
015F:00690EB7 E86489FFFF CALL
00689820
015F:00690EBC E8BFACFFFF CALL
0068BB80
015F:00690EC1 E8462FFFFF CALL
00683E0C (B)<---注意這裡的EIP
015F:00690EC6 8BE5
MOV ESP,EBP
015F:00690EC8 5D
POP EBP
015F:00690EC9 C20C00 RET
000C
015F:00690ECC 0000
ADD [EAX],AL
015F:00690ECE 0000
ADD [EAX],AL
015F:00690ED0 0000
ADD [EAX],AL
015F:00690ED2 0000
ADD [EAX],AL
1. 先用 bpx getprocaddress進行中斷。然後執行壓縮過的Notepad.exe。按5次F5後,把剛才設的中斷先
BD 掉,再按2次 F12到達上面(A)的地方。往下面看,有幾條語句,然後是連續的幾個CALL語句,注意最後面的CALL語句((B)的地方的)的地址是xxxx0EC1。這裡要說明一下,由於notepad.exe
這個程式比較小,按5次F5即可以,如果程式比較大的話,要按更多次的F5,但這裡有個標準就是,按2次F12返回後,如果沒有上面的幾個CALL語句,說明還要
BE 剛才設的斷點,繼續按幾次F5,然後再 BD剛才的斷點,再按F12兩次,直到符合要求。這個要求就是有連續的幾個CALL語句,而且最後的CALL語句的EIP是xxxx0EC1。
015F:0068D59D E8C26EFFFF CALL
00684464 (C)<---注意這裡的EIP 和上面的EIP的關係,在這裡設定斷點。
015F:0068D5A2 8B4308 MOV
EAX,[EBX+08]
015F:0068D5A5 8BD6
MOV EDX,ESI
015F:0068D5A7 E85CE9FFFF CALL
0068BF08
015F:0068D5AC 8B4B08 MOV
ECX,[EBX+08]
015F:0068D5AF 83C106 ADD
ECX,06
015F:0068D5B2 8BC1
MOV EAX,ECX
015F:0068D5B4 668B10 MOV
DX,[EAX]
015F:0068D5B7 663B15D8136900 CMP
DX,[006913D8]
015F:0068D5BE 7414
JZ 0068D5D4
015F:0068D5C0 663B1424 CMP
DX,[ESP]
015F:0068D5C4 7506
JNZ 0068D5CC
015F:0068D5C6 89442404 MOV
[ESP+04],EAX
015F:0068D5CA EB11
JMP 0068D5DD
015F:0068D5CC 8B5802 MOV
EBX,[EAX+02]
015F:0068D5CF 83C306 ADD
EBX,06
015F:0068D5D2 03CB
ADD ECX,EBX
2. 現在根據(B)處的地址用下面的方法算出另外一個地址,新地址前4位是把xxxx-1,這裡是0069-1=0068,後面4位是D59D,這樣算出的另外一個地址是0068d59d。在這個地址(上面(C)的地方)處設斷。
015F:0068F863 5B
POP EBX
015F:0068F864 6A10
PUSH 10
015F:0068F866 E8DDFEFFFF CALL
0068F748
015F:0068F86B 50
PUSH EAX
015F:0068F86C E8CFFEFFFF CALL
0068F740
015F:0068F871 50
PUSH EAX
015F:0068F872 6A00
PUSH 00
015F:0068F874 E8D7FEFFFF CALL
0068F750
015F:0068F879 53
PUSH EBX
015F:0068F87A 50
PUSH EAX
015F:0068F87B C3
RET
(D)<--- 按4次F12後將返回到這裡
3. 按6次F5後,再按4次F12,到上面(D)的地方,壓縮程式就是從這裡進入原來的程式的,也就是說,在這裡按F10就到了Entry Point 。
上面只是介紹瞭如何找到EP 的,至於Import Table的重建,可能是我們大家的心口的痛了,望高手能指點一二或者為我們大家找出方法來。
有什麼問題歡迎來信討論。
我的Email是liuhx@lpec.com.cn