UNPack CommView v.3.0 (8千字)

看雪資料發表於2001-09-01

作個自我介紹先,我叫Liotta[BCG],CRACK初學者,請多關照。
下文簡述Asprotect1.3脫殼及重構問題,僅供新手參考。

CommView v.3.0

關於CommView:
CommView is a program for monitoring Internet and Local Area
Network (LAN) activity capable of capturing and analyzing
network packets. It gathers information about data passing
through your dial-up connection or Ethernet card and decodes
the analyzed data.
WWW:    http://www.tamos.com

目標        :CV.exe
Entry Point    :00001000    Image Base    :00400000
Base of Data    :00177000    Size of Image    :001E5000

相關工具:
    FI
    Peditor
    Softice
    icedump + iceload
    ImpREC

參考文件:
    ljttt    “對Asprotect脫殼的一點總結”
    fs0    “脫Advanced Email Extractor PRO的殼 ”

一,脫殼

    用FI查一查CV.exe的保護方式,顯示是用Asprotect.V1.2?加殼的。
    現在讓我們來找到CV.exe的OEP。找OEP方法請參考以上文件。
    我是這樣做的:
   
用iceload裝入CV.exe
BPX GetProcAddress中斷進入加殼程式,
BD*
按幾下F12來到

017F:01791AD0  55                  PUSH      EBP
017F:01791AD1  8BEC                MOV      EBP,ESP
017F:01791AD3  83C4F4              ADD      ESP,-0C
017F:01791AD6  E85516FFFF          CALL      01783130
017F:01791ADB  0F856B23FFFF        JNZ      01783E4C
017F:01791AE1  E82228FFFF          CALL      01784308
017F:01791AE6  E8DD6FFFFF          CALL      01788AC8
017F:01791AEB  E86C79FFFF          CALL      0178945C
017F:01791AF0  E89BA4FFFF          CALL      0178BF90
017F:01791AF5  E85223FFFF          CALL      01783E4C    <--按F8進入

按F10一會就到一段所謂SEH(Structure Exception Handling)反跟蹤程式碼
如果你不小心中招,可用icedump中的/tracex 400000 eip-8來回到正道。

017F:01790614  31C0                XOR      EAX,EAX
017F:01790616  C3                  RET            <--小心SEH,向下看看
017F:01790617  EB01                JMP      0179061A
017F:01790619  E831C0EB02          CALL      0464C64F
017F:0179061E  CD20                INT      20 VXDJmp EB30,7F64
017F:01790624  01E9                ADD      ECX,EBP
017F:01790626  648920              MOV      FS:[EAX],ESP
017F:01790629  3100                XOR      [EAX],EAX
017F:0179062B  EB01                JMP      0179062E    <--在該行按F7直接跳到這裡
017F:0179062D  68648F0500          PUSH      00058F64

按F8幾次來到
017F:01790639  58                  POP      EAX
017F:0179063A  6830E27801          PUSH      0178E230    <--以下是可選擇的斷點
017F:0179063F  6864077901          PUSH      01790764
017F:01790644  68DCFC7801          PUSH      0178FCDC
017F:01790649  688CF97801          PUSH      0178F98C
017F:0179064E  6864F37801          PUSH      0178F364
017F:01790653  68F4ED7801          PUSH      0178EDF4
017F:01790658  6878007901          PUSH      01790078
017F:0179065D  C3                  RET

下斷點bpx 0178e230
你如果想了解Asprotect是如何還原資料及處理DLL,可參考
fs0的“脫Advanced Email Extractor PRO的殼 ”一文

按F10來到
017F:017911C4  68FF691A33          PUSH      331A69FF
017F:017911C9  6850250000          PUSH      00002550
017F:017911CE  6870EC0000          PUSH      0000EC70
017F:017911D3  6800600100          PUSH      00016000
017F:017911D8  FF3514307901        PUSH      DWORD PTR [01793014]
017F:017911DE  E801000000          CALL      017911E4        <--注意花指令
017F:017911E3  8183C404E888B8FFFFE8ADD      DWORD PTR [EBX+88E804C4],E8FFFFB8
017F:017911ED  0100                ADD      [EAX],EAX
017F:017911EF  0000                ADD      [EAX],AL
017F:017911F1  8183C404310424E80100ADD      DWORD PTR [EBX+043104C4],0001E824
017F:017911FB  0000                ADD      [EAX],AL
017F:017911FD  6883C4048B          PUSH      8B04C483
017F:01791202  0514307901          ADD      EAX,01793014
017F:01791207  E802000000          CALL      0179120E        <--按F8進入
017F:0179120C  E86883C404          CALL      063D9579
017F:01791211  010424              ADD      [ESP],EAX
017F:01791214  C3                  RET
017F:01791215  C3                  RET

按F10來到
017F:01790060  B8BC397901          MOV      EAX,017939BC
017F:01790065  BA0A000000          MOV      EDX,0000000A
017F:0179006A  E8A9C2FFFF          CALL      0178C318        <--F10略過
017F:0179006F  E82CFEFFFF          CALL      0178FEA0        <--F8進入
017F:01790074  C3                  RET

按F10來到
017F:0178FFE5  B9A4397901          MOV      ECX,017939A4
017F:0178FFEA  8D45F8              LEA      EAX,[EBP-08]
017F:0178FFED  BA04000000          MOV      EDX,00000004
017F:0178FFF2  E879C4FFFF          CALL      0178C470        <--F10略過
017F:0178FFF7  E815000000          CALL      01790011        <--F8進入
017F:0178FFFC  8B44240C            MOV      EAX,[ESP+0C]
017F:01790000  8380B800000002      ADD      DWORD PTR [EAX+000000B8],02
017F:01790007  C7401800000000      MOV      DWORD PTR [EAX+18],00000000
017F:0179000E  31C0                XOR      EAX,EAX
017F:01790010  C3                  RET

以下有段指令比較花,可用icedump中的/tracex 400000 eip-8來找到OEP
CV.exe的OEP是00576164-00400000
然後用/dump 400000 001E5000 c:\dump.exe
A EIP
017F:00576164    JMP EIP

按F5回到Windows
把c:\dump.exe複製到CommView的安裝目錄下
再用Peditor的dumpfixer來修改dump.exe,並改CV.exe的OEP是00176164
然後用ImpREC重構輸入表,完成後不要忘了KILL這個程式。

二,用ImpREC重構輸入表

    在ImpREC中"Attach to an Active Process"下拉框中選擇目標CV.exe,
填入OEP,按"IAT AutoSearch"、"Get Import"、"Auto Trace",
接著按"Show Invalid",發現有6個KERNEL32.dll未知函式

Target: C:\TOOLS\COMMVIEW\CV.EXE
OEP: 00176164    IATRVA: 00189204    IATSize: 000008F4
    RVA        ModuleName    PTR
(1)    00189274    ?        0178C960
(2)    001893D0    ?        0178C968
(3)    00189414    ?        0178C928
(4)    00189474    ?        0178C958
(5)    00189478    ?        0178C950
(6)    00189480    ?        0178C974

記下這些未知函式的RVA和PTR,並Save Tree。
然後設斷BPX GetVersion並再次裝入目標程式

017F:0178C7BC  6A00                PUSH      00
017F:0178C7BE  E8897CFFFF          CALL      KERNEL32!GetModuleHandleA
017F:0178C7C3  A34C367901          MOV      [0179364C],EAX
017F:0178C7C8  E8977CFFFF          CALL      KERNEL32!GetVersion        <--(3)號未知函式
017F:0178C7CD  A344367901          MOV      [01793644],EAX
017F:0178C7D2  68AC357901          PUSH      017935AC
017F:0178C7D7  E8907CFFFF          CALL      KERNEL32!GetVersionExA
017F:0178C7DC  E83B7CFFFF          CALL      KERNEL32!GetCurrentProcess        <--(5)號未知函式
017F:0178C7E1  A348367901          MOV      [01793648],EAX
017F:0178C7E6  E8397CFFFF          CALL      KERNEL32!GetCurrentProcessId    <--(4)號未知函式
017F:0178C7EB  A350367901          MOV      [01793650],EAX
017F:0178C7F0  E81F7CFFFF          CALL      KERNEL32!GetCommandLineA    <--(1)號未知函式
017F:0178C7F5  A340367901          MOV      [01793640],EAX        <-a-注意01793640
017F:0178C7FA  C3                  RET

對於每項未知函式都先u PTR看看。
如(1):
u 0178C960
017F:0178C960  A140367901          MOV      EAX,[01793640]        <-b-注意01793640
017F:0178C965  C3                  RET

看到的吧!a和b處方括號內的地址是相同的,故(1)號未知函式是KERNEL32!GetCommandLineA

同理

(3)
u    0178C928
017F:0178C928  A144367901          MOV      EAX,[01793644]
017F:0178C92D  C3                  RET
(3)號未知函式是KERNEL32!GetVersion
(4)
u    0178C958
017F:0178C958  A150367901          MOV      EAX,[01793650]
017F:0178C95D  C3                  RET
(4)號未知函式是KERNEL32!GetCurrentProcessId
(5)
u    0178C950
017F:0178C950  A148367901          MOV      EAX,[01793648]
017F:0178C955  C3                  RET
(5)號未知函式是KERNEL32!GetCurrentProcess

另外二個比較複雜,請參考fs0的“脫Advanced Email Extractor PRO的殼 ”一文
(2)
u    0178C968
017F:0178C968  55                  PUSH      EBP
017F:0178C969  8BEC                MOV      EBP,ESP
017F:0178C96B  8B4508              MOV      EAX,[EBP+08]
017F:0178C96E  5D                  POP      EBP
017F:0178C96F  C20400              RET      0004
(2)號未知函式是KERNEL32.dll!LockResource
(6)
u    0178C974
017F:0178C974  55                  PUSH      EBP
017F:0178C975  8BEC                MOV      EBP,ESP
017F:0178C977  5D                  POP      EBP
017F:0178C978  C20400              RET      0004
(6)號未知函式是KERNEL32.dll!FreeResource

修復完輸入表後,就可"Fix Dump",為了避免不必要的麻煩我們還是"add new section"吧。
完工。咦,執行……沒反應!
那裡出問題了?
讓我們LOAD脫殼後的程式,來到
017F:00576A21  E8A229EFFF          CALL      004693C8
017F:00576A26  3D00CC0A00          CMP      EAX,000ACC00    <--改EAX=000ACC00就OK
017F:00576A2B  7405                JZ        00576A32        <--不等就退出
017F:00576A2D  E8DAD2E8FF          CALL      00403D0C        <--退出處理
017F:00576A32  8B0D7CDC5700        MOV      ECX,[0057DC7C]
017F:00576A38  A1F8D95700          MOV      EAX,[0057D9F8]
017F:00576A3D  8B00                MOV      EAX,[EAX]
017F:00576A3F  8B1520115600        MOV      EDX,[00561120]
017F:00576A45  E822E7EDFF          CALL      0045516C

在SOFTICE中修改EAX=000ACC00後就一切OK。請注意,直接改74->EB無效,好像在前面有段還原始碼。
難道還要SMC,請高手指點!

相關文章