速達3000PRO加密狗軟體學習 (5千字)

看雪資料發表於2003-02-19

我寫這篇文章是以技術交流為主,希望論壇的前輩多多指點。
       
    看過XIAQIN[CCG]的文章後,想找個速達3000PRO加密狗軟體學習一下。恰好我有個朋友是其地區級的代理商,我去找到他給我了一張試用光碟,一看上面什麼軟體都有,於是決定試試。 下面談談我的學習過程。

    這是小弟第六次學習加密狗的軟體,水平有限。不足之處,請各位大俠指點。

    軟體簡介:《速達3000 PRO》軟體是非常著名的進銷存財務軟體。

破解工具:
    Trw2000
    SuperBPM
    WINHEX
    OFFCAL
    在沒有安裝加密狗之前,在啟動軟體時會彈出“未檢測到本軟體使用的軟體狗,本軟體將工作試驗版狀態”對話方塊。在軟體的啟動畫面中醒目的有紅色“試用版”三個字。就進入了“選擇公司帳套”。在進入軟體後。在 “關於速達3000 PRO”中同樣有紅色“試用版”三個字。

  該軟體靜態分析時列機(用的W32Dasm),IDA又太慢,所以只好直接動態分析了。經過仔細跟蹤來到CC3250.EXE的領空,繼續單步跟蹤,一路上有很多的花指令,但用點技巧也是很容易走出來的。直到:

0167:3257DBEB  PUSH    EAX
0167:3257DBEC  CALL    NEAR [ESI+18]          //F10走過時彈出對話方塊,F8進入
0167:3257DBEF  ADD      ESP,BYTE +10
0167:3257DBF2  PUSH    EAX
0167:3257DBF3  CALL    `CC3250MT!_exit`
0167:3257DBF8  POP      ECX
0167:3257DBF9  JMP      SHORT 3257DC1C
0167:3257DBFB  MOV      EDX,[325AD400]
0167:3257DC01  PUSH    EDX
0167:3257DC02  MOV      ECX,[325AD3FC]
  從3257DBEC進入後來到:

            .
            .
            .
0167:00401859  XOR      EAX,EAX
0167:0040185B  MOV      EDX,[EBP-38]
0167:0040185E  MOV      [FS:00],EDX
0167:00401865  JMP      00401C52
0167:0040186A  MOV      BYTE [00B25934],00
0167:00401871  CMP      BYTE [00B25934],00
0167:00401878  JNZ      NEAR 004019A1
0167:0040187E  MOV      BYTE [00B25934],01
0167:00401885  CALL    00939944
0167:0040188A  TEST    AL,AL
0167:0040188C  JZ      0040189A
0167:0040188E  MOV      BYTE [00B25934],00
0167:00401895  JMP      00401963
0167:0040189A  MOV      WORD [EBP-28],14
0167:004018A0  LEA      EAX,[EBP-08]
0167:004018A3  CALL    00401C5C
0167:004018A8  INC      DWORD [EBP-1C]
0167:004018AB  CALL    `SD3000PRO!@Dogtestpro@_ManCheckDlgDan$qqrv` //DOG
0167:004018B0  MOV      WORD [EBP-28],08
0167:004018B6  MOV      WORD [EBP-28],20
0167:004018BC  MOV      EDX,00942C1F
0167:004018C1  LEA      EAX,[EBP-0C]
0167:004018C4  CALL    00939C34
0167:004018C9  INC      DWORD [EBP-1C]
0167:004018CC  LEA      EDX,[EBP-0C]
0167:004018CF  LEA      EAX,[EBP-08]
0167:004018D2  CALL    00939FAC
0167:004018D7  PUSH    EAX
0167:004018D8  DEC      DWORD [EBP-1C]
0167:004018DB  LEA      EAX,[EBP-0C]
0167:004018DE  MOV      EDX,02
0167:004018E3  CALL    00939EC8
0167:004018E8  POP      ECX
0167:004018E9  TEST    CL,CL
0167:004018EB  JZ      004018FF
0167:004018ED  CALL    `SD3000PRO!@Dogtestpro@_GoldenSoftCheckdlgDan$qqrv`
0167:004018F2  TEST    AL,AL
0167:004018F4  JZ      0040194D
0167:004018F6  MOV      BYTE [00B25934],00
            .
            .
            .
0167:00401932  TEST    CL,CL
0167:00401934  JZ      0040194D
0167:00401936  XOR      EAX,EAX
0167:00401938  CALL    00427814
0167:0040193D  TEST    AL,AL
0167:0040193F  JZ      0040194D
0167:00401941  CALL    `SD3000PRO!@Dogtestpro@WriteNewInfo$qqrv`  //DOG
0167:00401946  MOV      BYTE [00B25934],00
0167:0040194D  DEC      DWORD [EBP-1C]
0167:00401950  LEA      EAX,[EBP-08]
0167:00401953  MOV      EDX,02
0167:00401958  CALL    00939EC8
0167:0040195D  MOV      WORD [EBP-28],00
0167:00401963  CMP      BYTE [00B25934],00
0167:0040196A  JZ      004019A1
0167:0040196C  MOV      WORD [EBP-28],38
0167:00401972  MOV      EDX,00942C23
            .
            .
            .

從上面我們很容易發現[00b25934]的多次出現,且鞭後都跟有
比較指令,實際上[00b25934]值是0時表示有狗。我們看看是哪
個地方改變了[00b25934]的值。我們下斷點監看到的寫操作。
等攔斷後來到:

0167:00401871  CMP      BYTE [00B25934],00
0167:00401878  JNZ      NEAR 004019A1      //此處如果讓它直接跳走,即成為正式版了
0167:0040187E  MOV      BYTE [00B25934],01  //如果上面沒有跳走,這裡把01改成00也能成為正式版
0167:00401885  CALL    00939944
0167:0040188A  TEST    AL,AL
0167:0040188C  JZ      0040189A
0167:0040188E  MOV      BYTE [00B25934],00
0167:00401895  JMP      00401963
0167:0040189A  MOV      WORD [EBP-28],14
0167:004018A0  LEA      EAX,[EBP-08]
0167:004018A3  CALL    00401C5C
0167:004018A8  INC      DWORD [EBP-1C]
0167:004018AB  CALL    `SD3000PRO!@Dogtestpro@_ManCheckDlgDan$qqrv`
0167:004018B0  MOV      WORD [EBP-28],08
0167:004018B6  MOV      WORD [EBP-28],20
0167:004018BC  MOV      EDX,00942C1F
0167:004018C1  LEA      EAX,[EBP-0C]
0167:004018C4  CALL    00939C34
0167:004018C9  INC      DWORD [EBP-1C]
0167:004018CC  LEA      EDX,[EBP-0C]
0167:004018CF  LEA      EAX,[EBP-08]
0167:004018D2  CALL    00939FAC
0167:004018D7  PUSH    EAX
0167:004018D8  DEC      DWORD [EBP-1C]
0167:004018DB  LEA      EAX,[EBP-0C]
0167:004018DE  MOV      EDX,02
0167:004018E3  CALL    00939EC8
0167:004018E8  POP      ECX
0167:004018E9  TEST    CL,CL
0167:004018EB  JZ      004018FF
0167:004018ED  CALL    `SD3000PRO!@Dogtestpro@_GoldenSoftCheckdlgDan$qqrv`
0167:004018F2  TEST    AL,AL
0167:004018F4  JZ      0040194D
0167:004018F6  MOV      BYTE [00B25934],00
0167:004018FD  JMP      SHORT 0040194D
0167:004018FF  MOV      WORD [EBP-28],2C
0167:00401905  MOV      EDX,00942C21

可見,改這個軟體只需一個位元組,而且測試三次的結算限制也沒了。下一篇我想寫寫SD-ERP網路版丟狗方法
和某著名工程預算軟體的丟狗方法。在下水平有限,想和各位打狗高手及
PJ界的前輩學習一下,不知有人願意否,如有請留言,我會及時和你聯絡!

                      -------青石

相關文章