轉帖【夢醒時分t0db.myetang.com】翻譯的:【破解Autodesk AUTOCAD 14 狗加密 】 (15千字)

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

怎樣破解Autodesk AUTOCAD 14 法語版的狗加密
--------------------------------------------------------------------------------

translate by 夢醒時分
yinqun2000@263.net
http://t0db.myetang.com

級別:中級-高階

所需工具:

Soft ice 3.x
你自己最喜歡的 編輯器 (我一直用 Hexworkshop)
彙編知識 (至少是基礎)
Wdasm89 (並不特別需要)
大腦 (你有一個 , 是嗎 ? :p )
一些啤酒 :O ( 因為破解這個軟體是要很長時間的!)
一些音樂 ;)



歷史:

我是很久以前破解這個軟體的... ;O

它對我來說很難,而且浪費了我幾天時間.最難的部分就是找到檢查狗的地方而且我不是用下面我
教你的方法做的!那是一種很複雜的方法...我很蠢的破解了它,而且還常常崩潰!幾天前,我完成了
另一個序號產生器時覺得很煩.所以,我想到除了序號產生器的破解.那麼那個狗保護的Autocad 14?!啊!那
是狗保護!我討厭狗,而且在這方面幾乎沒有什麼經驗...

狗保護是最貴的保護方法,這個軟體的售價是$7000左右!(夠開一個網咖的了)




讓我們來破解它吧:)

BTW,我用好方法破解它大概用了 2 小時 (包括 反彙編: 最長的部分 :p) 這期間沒有當機 ;)

1)執行軟體 :)

好的.. 讓我們來看看這個目標,我安裝這個軟體非常慢.. 該死的光碟!假設它非常快吧!安裝好後,找
到安裝目錄.有一個 Acad.exe 的可執行檔案和其它很多dll檔案...我執行這個軟體,跳出一個對話方塊:

"ERREUR FATALE : Le system de securit?verrouillage materiel..."

這是法語, 意思是:

"FATAL ERROR : security system is missing! blablabla"

好的,它就是告訴我們最重要的硬體(*狗*)丟失!哈哈哈

那麼... 讓我們更深層的看看 ;) 我使用softice設定了在 LPT1上最常用的斷點: (BPIO -H 378 R).
我們停在了這兒:


0028:CE5AA885  88442405          MOV    [ESP+05],AL      ; 這兒.
0028:CE5AA889  66C746680100      MOV    WORD PTR [ESI+68],0001
0028:CE5AA88F  8A442405          MOV    AL,[ESP+05]
0028:CE5AA893  884615            MOV    [ESI+15],AL
0028:CE5AA896  884614            MOV    [ESI+14],AL
0028:CE5AA899  5E                POP    ESI
0028:CE5AA89A  83C404            ADD    ESP,04
0028:CE5AA89D  C3                RET
0028:CE5AA89E  CC                INT    3
0028:CE5AA89F  CC                INT    3
0028:CE5AA8A0  83EC04            SUB    ESP,04
0028:CE5AA8A3  56                PUSH    ESI
0028:CE5AA8A4  8B74240C          MOV    ESI,[ESP+0C]
0028:CE5AA8A8  56                PUSH    ESI
0028:CE5AA8A9  E832000000        CALL    CE5AA8E0
0028:CE5AA8AE  668B465C          MOV    AX,[ESI+5C]
0028:CE5AA8B2  83C404            ADD    ESP,04
0028:CE5AA8B5  6689442406        MOV    [ESP+06],AX
0028:CE5AA8BA  8A4658            MOV    AL,[ESI+58]
0028:CE5AA8BD  243F              AND    AL,3F
0028:CE5AA8BF  88442405          MOV    [ESP+05],AL
0028:CE5AA8C3  8A442405          MOV    AL,[ESP+05]
0028:CE5AA8C7  668B542406        MOV    DX,[ESP+06]
0028:CE5AA8CC  EE                OUT    DX,AL
0028:CE5AA8CD  5E                POP    ESI
0028:CE5AA8CE  83C404            ADD    ESP,04
0028:CE5AA8D1  C3                RET

我們是在 chat_to_dongle routine. 而且如果我們看下面的data部分,我們看到:SENTINELXXX...
這是什麼啊?! 你應該知道有什麼公司提供這種加狗的服務如: Hasp, Sentinel, DesKEY,
Activator/Unikey 還有許多其它的.

因此,我們可以推斷碰到的是一個 SENTINEL 狗加密!我們現在在 SENTINEL.VXD 檔案... 回到文章
中來,我們停在這兒:

0028:CE5AA885  88442405            MOV    [ESP+05],AL  ;  這裡..
0028:CE5AA889  66C746680100        MOV    WORD PTR [ESI+68],0001
0028:CE5AA88F  8A442405            MOV    AL,[ESP+05]
0028:CE5AA893  884615              MOV    [ESI+15],AL
0028:CE5AA896  884614              MOV    [ESI+14],AL

我們要看是關於可執行檔案的CALL,所以我們要按三四次F12,我們會在這兒:

0028:CE5B35D6  50            PUSH    EAX
0028:CE5B35D7  55            PUSH    EBP
0028:CE5B35D8  57            PUSH    EDI
0028:CE5B35D9  E8D2FEFFFF    CALL    CE5B34B0    ; 我們的 call :)
0028:CE5B35DE  C06C241F01    SHR    BYTE PTR [ESP+1F],01  ;回到這兒.
0028:CE5B35E3  83C40C        ADD    ESP,0C
0028:CE5B35E6  0AD8          OR      BL,AL
0028:CE5B35E8  664E          DEC    SI
0028:CE5B35EA  75E1          JNZ    CE5B35CD
0028:CE5B35EC  C0EB01        SHR    BL,01
0028:CE5B35EF  6A64          PUSH    64
0028:CE5B35F1  57            PUSH    EDI
0028:CE5B35F2  E8C979FFFF    CALL    CE5AAFC0
0028:CE5B35F7  8A44241B      MOV    AL,[ESP+1B]
0028:CE5B35FB  83C408        ADD    ESP,08
0028:CE5B35FE  2401          AND    AL,01
0028:CE5B3600  50            PUSH    EAX
0028:CE5B3601  55            PUSH    EBP
0028:CE5B3602  57            PUSH    EDI
0028:CE5B3603  E8A8FEFFFF    CALL    CE5B34B0
0028:CE5B3608  83C40C        ADD    ESP,0C
0028:CE5B360B  0AD8          OR      BL,AL
0028:CE5B360D  66BE0300      MOV    SI,0003
0028:CE5B3611  6A64          PUSH    64
0028:CE5B3613  C06C241701    SHR    BYTE PTR [ESP+17],01
0028:CE5B3618  57            PUSH    EDI

在 CALL 中:

0028:CE5B35D6  50                  PUSH    EAX
0028:CE5B35D7  55                  PUSH    EBP
0028:CE5B35D8  57                  PUSH    EDI
0028:CE5B35D9  E8D2FEFFFF          CALL    CE5B34B0
0028:CE5B35DE  C06C241F01          SHR    BYTE PTR [ESP+1F],01
0028:CE5B35E3  83C40C              ADD    ESP,0C
0028:CE5B35E6  0AD8                OR      BL,AL
0028:CE5B35E8  664E                DEC    SI
0028:CE5B35EA  75E1                JNZ    CE5B35CD
0028:CE5B35EC  C0EB01              SHR    BL,01
0028:CE5B35EF  6A64                PUSH    64
0028:CE5B35F1  57                  PUSH    EDI
0028:CE5B35F2  E8C979FFFF          CALL    CE5AAFC0
0028:CE5B35F7  8A44241B            MOV    AL,[ESP+1B]
0028:CE5B35FB  83C408              ADD    ESP,08
0028:CE5B35FE  2401                AND    AL,01
0028:CE5B3600  50                  PUSH    EAX
0028:CE5B3601  55                  PUSH    EBP
0028:CE5B3602  57                  PUSH    EDI
0028:CE5B3603  E8A8FEFFFF          CALL    CE5B34B0
0028:CE5B3608  83C40C              ADD    ESP,0C
0028:CE5B360B  0AD8                OR      BL,AL
0028:CE5B360D  66BE0300            MOV    SI,0003
0028:CE5B3611  6A64                PUSH    64
0028:CE5B3613  C06C241701          SHR    BYTE PTR [ESP+17],01
0028:CE5B3618  57                  PUSH    EDI
0028:CE5B3619  E8A279FFFF          CALL    CE5AAFC0
0028:CE5B361E  83C408              ADD    ESP,08
0028:CE5B3621  C0EB01              SHR    BL,01
0028:CE5B3624  8A442413            MOV    AL,[ESP+13]
0028:CE5B3628  2401                AND    AL,01
0028:CE5B362A  50                  PUSH    EAX
0028:CE5B362B  55                  PUSH    EBP
0028:CE5B362C  57                  PUSH    EDI
0028:CE5B362D  E87EFEFFFF          CALL    CE5B34B0
0028:CE5B3632  C06C241F01          SHR    BYTE PTR [ESP+1F],01
0028:CE5B3637  83C40C              ADD    ESP,0C
0028:CE5B363A  0AD8                OR      BL,AL
0028:CE5B363C  664E                DEC    SI
0028:CE5B363E  75E1                JNZ    CE5B3621
0028:CE5B3640  6A05                PUSH    05
0028:CE5B3642  80E380              AND    BL,80
0028:CE5B3645  68DF000000          PUSH    000000DF
0028:CE5B364A  57                  PUSH    EDI
0028:CE5B364B  FF5718              CALL    [EDI+18]
0028:CE5B364E  83C40C              ADD    ESP,0C
0028:CE5B3651  B900000000          MOV    ECX,00000000
0028:CE5B3656  80FB01              CMP    BL,01
0028:CE5B3659  5D                  POP    EBP
0028:CE5B365A  83D1FF              ADC    ECX,-01
0028:CE5B365D  5F                  POP    EDI
0028:CE5B365E  6683E103            AND    CX,03
0028:CE5B3662  5E                  POP    ESI
0028:CE5B3663  668BC1              MOV    AX,CX
0028:CE5B3666  5B                  POP    EBX
0028:CE5B3667  83C404              ADD    ESP,04
0028:CE5B366A  C3                  RET

Ok,看看下面的程式碼並不能幫助我們什麼 :( 我看過幾篇關於狗加密的教程.我們做
的這幾步,應該是已經完成了.我想,在CALL後面,會有一個關於狗的 CMP ,如果值是
和狗相同,那麼就透過,否則就會加上一個錯誤的旗標...... 但是,我們是不幸運的,
這裡不是那麼簡單!的.透過和程式碼遊戲(跟蹤call,尋找一些比較的程式碼),我按很多
次 F12 ,但是找不到一點好東西!

BTW,我無從這該死的Sentinel的VXD中出來!按住 F12,可是什麼都沒有變!VDX使我
陷入困境了......我希望回到 Acad.exe 檔案中!我不希望破解狗硬體,大多數的時候,
狗保護的弱點一般都是在目標本身!

我試了 BPIO -h 378 R
讓我們在 I/O-port 上試試其它的斷點 :

378  已經試過了
3BC  這個 ;)
278  這個也是 ;o)

OK,執行軟體,但是卻沒有攔截 ;( 我的天啊!

因為它是一個 VDX ,所以我也試了 bpx CreateFileA ,但是走不了多久......
那麼,為什麼不反彙編它呢?運氣好說不定能找到一些在字串中找到一些關於出錯
的資訊(不要做夢了,那是不可能有的!!:p)現在你能用工具中的啤酒了 ;) 因為我們
要花很長時間去反彙編!!!! 那就是我為什麼不用IDA的原因了! BTW, 我們的目標可
執行檔案大概是 7.24 mb!好了,現在你知道為什麼要花這麼多時間了吧..

喝過酒後,一覺醒來.

經過這麼長的時間,終於反彙編好了! 首先,儲存結果!我們不希望再等那麼多時間,不是
嗎?如果你的電腦當機或者其它原因,你只有再等那麼多時間了!再喝一次酒,呵呵!
完了嗎? Ok!

我們愚蠢的想法是去找字串,運氣不佳,沒有,其實是意料之中 :p 那麼讓我們想想!
我們怎樣攻擊它呢? 我們看看 Import 表吧!看看狗到底呼叫了什麼函式 :) 我們可以找
到一個 "l33t0" API 函式!哈哈,我想會有一些好東西了, 我們來看看核心......

太太太好了 :) 我找到一些有趣的東西了:

DeviceIoControl

從沒有看過,但是名稱,聽起來非常好,不是嗎?
呵呵!去除所有的斷點只在softice中輸入: 'bc *' 和: 'BPX DeviceIocontrol'

現在執行我們的軟體! 哈哈,它攔截下來了 :) 按F12,我們跳出了dll檔案來到了ACAD.exe
:) 讓我們和程式碼玩耍吧.......

先看程式碼, 我按F12幾次直到在一個好位置.下面是來自我的winice.log 的一部分:

:bl
00) BPX KERNEL32!DeviceIoControl  // Damn good :)

Break due to BPX KERNEL32!DeviceIoControl
Break due to BPX KERNEL32!DeviceIoControl
Break due to BPX KERNEL32!DeviceIoControl
Break due to BPX KERNEL32!DeviceIoControl
Break due to BPX KERNEL32!DeviceIoControl
Break due to BPX KERNEL32!DeviceIoControl

// 你在這可以看到我在找到好地方之前被攔截下來多少次
// 你用這個 bpx 的時候,你按 F5 3 次,一會有攔截下來,
// 你再按兩次後停在了這兒 :

025F:0098B1AF  668B442402      MOV    AX,[ESP+02] ; EAX = 一些值
025F:0098B1B4  83C404          ADD    ESP,04
025F:0098B1B7  C20800          RET    0008
025F:0098B1BA  8D9B00000000    LEA    EBX,[EBX+00000000]
025F:0098B1C0  33C0            XOR    EAX,EAX
025F:0098B1C2  8A442408        MOV    AL,[ESP+08]
025F:0098B1C6  83F801          CMP    EAX,01
025F:0098B1C9  7415            JZ      0098B1E0
025F:0098B1CB  83F802          CMP    EAX,02
025F:0098B1CE  7456            JZ      0098B226
025F:0098B1D0  83F803          CMP    EAX,03
025F:0098B1D3  0F8497000000    JZ      0098B270
025F:0098B1D9  C20800          RET    0008

// 透過 RET 後,我們落在這兒:

025F:006ABE9A  0FBFC0              MOVSX  EAX,AX  ; 呵呵 :)
025F:006ABE9D  83F8FF              CMP    EAX,-01  ; EAX = FFFF ?!
025F:006ABEA0  7405                JZ      006ABEA7 ; 跳轉到 6abea7
025F:006ABEA2  25FFFF0000          AND    EAX,0000FFFF
025F:006ABEA7  5F                  POP    EDI
025F:006ABEA8  C3                  RET    ; 返回 ....

// 這是最重要的部分 :

025F:006ABD94  83C404              ADD    ESP,04
025F:006ABD97  85C0                TEST    EAX,EAX
025F:006ABD99  7C36                JL      006ABDD1
025F:006ABD9B  8D44240C            LEA    EAX,[ESP+0C]
025F:006ABD9F  50                  PUSH    EAX
025F:006ABDA0  E8DB000000          CALL    006ABE80
025F:006ABDA5  83C404              ADD    ESP,04
025F:006ABDA8  85C0                TEST    EAX,EAX
025F:006ABDAA  7C25                JL      006ABDD1
025F:006ABDAC  686071A700          PUSH    00A77160
025F:006ABDB1  E8CA000000          CALL    006ABE80
025F:006ABDB6  83C404              ADD    ESP,04
025F:006ABDB9  85C0                TEST    EAX,EAX
025F:006ABDBB  7C14                JL      006ABDD1
025F:006ABDBD  68F470A700          PUSH    00A770F4
025F:006ABDC2  E8B9000000          CALL    006ABE80
025F:006ABDC7  83C404              ADD    ESP,04
025F:006ABDCA  3DFDDC0000          CMP    EAX,0000DCFD ; eax= DCFD?
025F:006ABDCF  7408                JZ      006ABDD9    ; 好! 狗
025F:006ABDD1  47                  INC    EDI          ; 鎖住了 :)
025F:006ABDD2  83FF04              CMP    EDI,04
025F:006ABDD5  7EA3                JLE    006ABD7A
025F:006ABDD7  EB17                JMP    006ABDF0    ; 知道嗎?
025F:006ABDD9  8B0D8871A700        MOV    ECX,[00A77188] ;狗在這兒
025F:006ABDDF  6633F6              XOR    SI,SI
025F:006ABDE2  A18471A700          MOV    EAX,[00A77184]
025F:006ABDE7  8B1481              MOV    EDX,[EAX*4+ECX]
025F:006ABDEA  C70202000000        MOV    DWORD PTR [EDX],00000002
025F:006ABDF0  8B0D8471A700        MOV    ECX,[00A77184]  ;沒有狗:/
025F:006ABDF6  A18871A700          MOV    EAX,[00A77188]
025F:006ABDFB  8B1488              MOV    EDX,[ECX*4+EAX]
025F:006ABDFE  8D0C88              LEA    ECX,[ECX*4+EAX]
025F:006ABE01  8B1D8471A700        MOV    EBX,[00A77184]
025F:006ABE07  8B02                MOV    EAX,[EDX]
025F:006ABE09  35A9B50000          XOR    EAX,0000B5A9
025F:006ABE0E  03C3                ADD    EAX,EBX
025F:006ABE10  A3A471A700          MOV    [00A771A4],EAX
025F:006ABE15  8B11                MOV    EDX,[ECX]
025F:006ABE17  833A00              CMP    DWORD PTR [EDX],00
025F:006ABE1A  752F                JNZ    006ABE4B
025F:006ABE1C  E81F010000          CALL    006ABF40
025F:006ABE21  35A9B50000          XOR    EAX,0000B5A9
025F:006ABE26  3D564AFFFF          CMP    EAX,FFFF4A56
025F:006ABE2B  741E                JZ      006ABE4B

--------------------------- 8< ---------------------- 擷取 :p

Ok,我首先想到的是改變:

025F:006ABDCA  3DFDDC0000    CMP    EAX,0000DCFD ; 是 eax= DCFD ?
025F:006ABDCF  7408          JZ      006ABDD9  ; 好的! 狗鎖住了

成為:

025F:006ABDCA  3DFDDC0000    CMP  EAX,0000DCFD     
025F:006ABDCF  EB08          JMP  006ABDD9 ;不管 EAX 了,我跳 :p

但是,EAX 的值很重要,否則是會崩潰的:( 我們也看到了很多處都呼叫了 EAX 暫存器
,檢查了好幾次哦!那麼,我們只有暴力使 EAX 的值等於 DCFD 了!

你還不清除嗎,新手?EAX的值為什麼要等於 DCFD?你沒看到:CMP EAX,0000DCFD
嗎?先在大家都清楚了吧!

我們到哪去修改目標呢?想想什麼時候對 AX 賦值的?我清理一下記憶體,整理出下面這段
程式碼:

025F:0098B1AF  668B442402      MOV    AX,[ESP+02] ; EAX = 一些值.
025F:0098B1B4  83C404          ADD    ESP,04
025F:0098B1B7  C20800          RET    0008
025F:0098B1BA  8D9B00000000    LEA    EBX,[EBX+00000000]
025F:0098B1C0  33C0            XOR    EAX,EAX
025F:0098B1C2  8A442408        MOV    AL,[ESP+08]
025F:0098B1C6  83F801          CMP    EAX,01
025F:0098B1C9  7415            JZ      0098B1E0
025F:0098B1CB  83F802          CMP    EAX,02
025F:0098B1CE  7456            JZ      0098B226
025F:0098B1D0  83F803          CMP    EAX,03
025F:0098B1D3  0F8497000000    JZ      0098B270
025F:0098B1D9  C20800          RET    0008


'是的!就是你說過的那個地方! *SLAP*!!

呵呵,我們只要使EAX的值永遠等於DCFD就行了,程式碼就變成:

66B8FDDC      MOV    AX,DCFD ; 你知道這是幹什麼,對嗎? ;)
90              NOP            ; 一個 NOP 就是什麼都不幹!
C20800        RET    0008    ; 不變

Ok,很簡單吧? BTW 當你修改的時候不要忘了把程式碼倒一下,比如: B8FDCD 是 CDFD,
你應該知道我是什麼意思,對嗎?不??

現在給你的目標打上補丁,執行試試看!

下面就是說軟體破解的非常成功,我就不翻譯了.
                                           
                           
原文作者:ACiD BuRN [ECLiPSE / Immortal Descendants]

-=-=-=-=-=-=-=-=-=-=-=-[EOF]-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=夢經第四期-=-=-=-=-=-=-=-

相關文章