關於用asprotect ver1.1 壓縮過的程式的人口的尋找 (4千字)

看雪資料發表於2000-10-24

昨天晚上,看了一篇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

相關文章