Hardlock加密狗破解過程-----外殼型加密狗的破解方法 (7千字)

看雪資料發表於2001-10-15

MT unlocker 是一個手機解鎖軟體,它的加密方式是用hardlock加密狗加密,這種加密狗是一種外殼型加密狗,和HASP很相象。

小弟沒有接觸過外殼的狗,所以破解時用最原始的方法:跟蹤。

工具: TRW2000

我們先安裝好程式和狗驅動程式,然後執行TRW,選擇TRW選單中的“TRnewTCB”功能,然後執行程式,中斷後就會顯示程式的入

口:

016F:008E240  PUSH    EBP    <=====中斷在這裡
016F:008E0241  MOV      EBP,ESP
016F:008E0243  PUSH    EBX
016F:008E0244  PUSH    ESI
016F:008E0245  PUSH    EDI
016F:008E0246  PUSHA 
016F:008E0247  MOV      EAX,ESP
016F:008E0249  MOV      [008E04C4],EAX
016F:008E024E  MOV      EAX,008E04E0
016F:008E0253  SUB      EAX,[008E0500]
016F:008E0259  MOV      [008E0500],EAX
016F:008E025E  CMP      DWORD [008E04C0],BYTE +00
016F:008E0265  JZ      NEAR 008E027F
016F:008E026B  MOV      EAX,[008E04C4]
016F:008E0270  PUSH    EAX

然後一直按F10,直到下面:

016F:008E0301  MOV      EDI,[008E04E8]
016F:008E0307  MOV      ECX,06
016F:008E030C  REP MOVSD
016F:008E030E  MOV      EAX,[008E04C4]
016F:008E0313  PUSH    EAX
016F:008E0314  CALL    NEAR [008E04C0]  <=====F8進入,以後凡是遇到象這樣的CALL都要按F8進入
016F:008E031A  ADD      ESP,BYTE +04

進入後繼續按F10,在中間會進入hardlook的狗驅動程式內,它的進入方式很特殊,至今我都不明白它是怎麼進入的,就象是我們運

行程式出錯時會被TRW中斷一樣,在TRW的命令欄中會出現"Break Due On Fault 03

FaultCode=A000"的字樣,我們不管它,只管按F10和F12返回到主程式中,如下:

016F:008F611E  MOV      EAX,[EBP-50]
016F:008F6121  PUSH    EAX
016F:008F6122  CALL    NEAR [EBP-54]
016F:008F6125  TEST    EAX,EAX      <=====返回到這裡
016F:008F6127  JNZ      NEAR 008F6140
016F:008F612D  MOV      EAX,[EBP-50]

然後就是一直F10了,這個過程是解壓縮判斷狗的程式碼,為了加快追蹤,當遇到象下面的程式碼時,將游標直接移到JNA指令所指向的地

址,然後按F7鍵,在以後的地方有很多類似這樣的指令,你一樣可以按這種方法跳過它:

016F:008F61F1  ADD      DWORD [EBP-5C],BYTE +02
016F:008F61F5  ADD      DWORD [EBP-64],BYTE +02
016F:008F61F9  MOV      EAX,[EBP-68]
016F:008F61FC  MOV      ECX,[EBP-5C]
016F:008F61FF  CMP      [EAX+04],ECX    <======
016F:008F6202  JNA      NEAR 008F626B  <======注意這條指令
016F:008F6208  MOV      EAX,[EBP-64]
016F:008F620B  XOR      ECX,ECX
016F:008F620D  MOV      CX,[EAX]
016F:008F6210  AND      ECX,F000
016F:008F6216  MOV      [EBP+FFFFFF70],ECX

GO,GO,GO....GO TO:

6F:008F64B3  MOV      EAX,`DOSMGR_BackFill_Allowed`
016F:008F64B9  MOV      EAX,[EAX]
016F:008F64BB  MOV      `DOSMGR_BackFill_Allowed`,EAX
016F:008F64C1  MOV      EAX,[EBP+08]
016F:008F64C4  PUSH    EAX
016F:008F64C5  CALL    NEAR [008F67CC]    <=====F8進入
016F:008F64CB  ADD      ESP,BYTE +04
016F:008F64CE  JMP      008F64D3
016F:008F64D3  MOV      ECX,[EBP-10]
016F:008F64D6  MOV      `DOSMGR_BackFill_Allowed`,ECX

進入CALL後會第二次進入到狗驅動程式,按上面的方法返回到主程式:

016F:008F8411  PUSH    EAX
016F:008F8412  CALL    NEAR [EBP-54]
016F:008F8415  TEST    EAX,EAX      <=====返回到這裡
016F:008F8417  JNZ      NEAR 008F8430
016F:008F841D  MOV      EAX,[EBP-50]
016F:008F8420  PUSH    EAX
016F:008F8421  CALL    NEAR [EBP-58]
016F:008F8424  MOV      DWORD [EBP-28],08

一直按F10,到下面的地方:

016F:008F87A3  MOV      EAX,`DOSMGR_BackFill_Allowed`
016F:008F87A9  MOV      EAX,[EAX]
016F:008F87AB  MOV      `DOSMGR_BackFill_Allowed`,EAX
016F:008F87B1  MOV      EAX,[EBP+08]
016F:008F87B4  PUSH    EAX
016F:008F87B5  CALL    NEAR [008F8ABC]    <=====F8進入
016F:008F87BB  ADD      ESP,BYTE +04

進入後按一陣F10,就到了判斷加密狗的地方了:

016F:008E5A67  MOV      EDI,[008EFA68]
016F:008E5A6D  MOV      ECX,06
016F:008E5A72  REP MOVSD
016F:008E5A74  MOV      EAX,[EBP+08]
016F:008E5A77  PUSH    EAX
016F:008E5A78  CALL    NEAR [008EFA10]   
016F:008E5A7E  ADD      ESP,BYTE +04
016F:008E5A81  JMP      008E5B7F
016F:008E5A86  CALL    008E5EC8       

<=====注意這個CALL,這個就是檢測加密狗的CALL,當沒有找到狗時,EAX就會返回6,怎樣判斷它是檢測狗的CALL呢?我的經驗是,如

果一個CALL很明顯的比其它的CALL花費的時間要多,那麼這個CALL九成是讀狗的CALL,在我破解的狗中,幾乎是所有讀狗的CALL都

會花比較多的時間,大概是1-3秒吧,所以這個可以做為判斷讀狗的一個依據
016F:008E5A8B  MOV      [008EFA28],EAX  <=====執行到這裡後,用R指令修改EAX的數值,將EAX改為0,改完後你按F5後,你發

現程式已經能夠正常執行了,但我們的目標是要脫掉狗保護,所以就繼續F10了
016F:008E5A90  CMP      DWORD [008EFA28],BYTE +00
016F:008E5A97  JZ      NEAR 008E5AD6
016F:008E5A9D  MOV      EAX,[008EFA14]
016F:008E5AA2  PUSH    EAX
016F:008E5AA3  MOV      EAX,[008EFA28]

繼續按F10,在這個過程中就是主程式的解壓縮了,中間有三個CALL要F8進去的,同樣可以用上來所說的加快跟蹤的方法來跟蹤下去

,當出現下面的指令時,解壓縮就基本上完成了:

016F:008FE97D  MOV      [009006B0],EAX
016F:008FE982  PUSH    DWORD 009005A4
016F:008FE987  MOV      EAX,[00900498]
016F:008FE98C  PUSH    EAX
016F:008FE98D  CALL    `KERNEL32!GetProcAddress`  <=====當出現這些指令時,就要放慢跟蹤的速度了
016F:008FE993  MOV      [009006C0],EAX
016F:008FE998  PUSH    DWORD 009005B8
016F:008FE99D  MOV      EAX,[00900498]
016F:008FE9A2  PUSH    EAX
016F:008FE9A3  CALL    `KERNEL32!GetProcAddress`    <=====
016F:008FE9A9  MOV      [009006BC],EAX
016F:008FE9AE  PUSH    DWORD 009005CC
016F:008FE9B3  MOV      EAX,[00900498]
016F:008FE9B8  PUSH    EAX
016F:008FE9B9  CALL    `KERNEL32!GetProcAddress`    <=====

注意下面的程式碼,這些程式碼我估計是反跟蹤的,因為我跟蹤下去的時候,程式就會出現一個警告對話方塊,說程式是不能執行在除錯狀

態下的,我沒有辦法去掉它,因為我的跟蹤技術還不是很好,哪位高手來幫我補充怎麼樣去掉這些反跟蹤程式碼,在這裡我先謝謝了.

程式碼如下:

16F:008FEBDF  JMP      008FEC88
016F:008FEBE4  CMP      DWORD [009004BC],BYTE +00
016F:008FEBEB  JZ      NEAR 008FEC64
016F:008FEBF1  CMP      DWORD [009004C8],BYTE +00
016F:008FEBF8  JNZ      NEAR 008FEC64
016F:008FEBFE  PUSH    DWORD 008FF9C2
016F:008FEC03  MOV      EAX,[009004BC]
016F:008FEC08  PUSH    EAX
016F:008FEC09  PUSH    BYTE +00
016F:008FEC0B  PUSH    BYTE +00
016F:008FEC0D  CALL    `USER32!SetTimer`  <====設定系統定時器,如果程式在跟蹤狀態,程式就會退出
016F:008FEC13  MOV      [00900520],EAX
016F:008FEC18  CMP      DWORD [00900520],BYTE +00
016F:008FEC1F  JNZ      NEAR 008FEC64
016F:008FEC25  MOV      DWORD [009004A8],03

我們不管它了,繼續F10,中間有兩個CALL要F8進入,進入後按F10直到出現下面的程式碼:

016F:008E1FF3  JMP      008E2003
016F:008E1FF8  POP      EDI      <=====游標停在這裡
016F:008E1FF9  POP      ESI
016F:008E1FFA  POP      EBX
016F:008E1FFB  POP      EBP
016F:008E1FFC  PUSH    DWORD [008E2050]
016F:008E2002  RET   
016F:008E2003  POP      EDI
016F:008E2004  POP      ESI
016F:008E2005  POP      EBX
016F:008E2006  LEAVE 
016F:008E2007  RET      0C
016F:008E200A  ADD      [EAX],AL
016F:008E200C  ADD      [EAX],AL
016F:008E200E  ADD      [EAX],AL

在地址016F:008E1FF8處停下來,我們已經可以DUMP出檔案了,下指令 PEDUMP d:\temp\crack.exe,至此,我們已經破掉hardlook的

外殼狗了,但是由於我沒有學過脫殼,所以脫出來的檔案竟然有4M(脫殼前只有1M多一點),而且我不知道怎麼樣修正Import表,讓程

序能在win2000下執行,不知哪位大蝦對脫殼很有經驗的話,能否指點小弟一兩招呢,小弟感激涕零.

透過我們對這個程式的破解,我們應該清楚,在破解外殼型的加密狗時,關鍵在於你是否有耐心,還要有一雙明亮的眼睛,外殼狗並

不可怕.同時也再次證明,無論是怎麼好的狗,如果開發商不好好利用的話,結果是整個加密方案以失敗告終.

相關文章