CrackCode2000使用介紹

看雪資料發表於2015-11-15

以前我們寫序號產生器時,一般都要了解程式的演算法,之後用匯編語言或 C 語言來把演算法還原,這樣做一個序號產生器一般都有要花不少的時間,而且要對組合語言和編程有比較高的要求,所以對於初學者來說,是一件很難的事情,對於不少的初學者 ,有時他們能在記憶體中找到註冊碼,但卻沒有能力寫出序號產生器來,這大大削弱了他 們的破解積極性,但還有更可惡的事,就是目前有不少的程式,它的註冊碼都與硬 件有關,就是在每一臺機上安裝都有一個機身碼,要把這個機身碼 E-MAIL 給作者,作者把收到的機身碼用註冊程式算出註冊碼後再寄回給使用者,這樣做使得軟體的防 複製方面加強了,但造成了不少使用者的麻煩,因為只要使用者一重灌系統或升級主機板 ,就要重新去註冊了。對於這種程式,一般初學者只能在記憶體中找到自己機器的注 冊碼,但這種註冊碼到了其它的機器上又不能用了,而自己又沒有辦法寫出序號產生器來,為了解決這方面的問題,我寫了一個小軟體,它可以從另一程式記憶體中取出注 冊碼來,顯示出來,而不需要你去了解註冊程式的演算法,但它的應用面是很有限的, 只能對付符合以下條件的軟體:

一、必須在記憶體中或在暫存器中可以找到正確的註冊碼;

二、被取註冊碼的軟體不能反跟蹤程式;

三、被取註冊碼的軟體的比較部分程式是靜態的存在的;

四、註冊碼比較程式只作比較註冊碼使用。

好了,講了這麼多,不如來個例子說明一下如何使用它吧!哦對了,大家還不知那 個東西是什麼呢?它叫 CrackCode2000 啊!

以下是一個軟體的註冊碼比較程式,大家不要問我怎麼樣得到了,大家只要聽下去 就可以了。

015F:004149D2  8A06                MOV       AL,[ESI]   這裡放你的輸入的註冊碼

015F:004149D4  84C0                TEST      AL,AL

015F:004149D6  740D                JZ        004149E5

015F:004149D8  8A11                MOV       DL,[ECX]   這裡放正確的註冊碼

015F:004149DA  41                  INC       ECX

015F:004149DB  46                  INC       ESI

015F:004149DC  3AC2                CMP       AL,DL

015F:004149DE  751F                JNZ       004149FF

015F:004149E0  803900              CMP       BYTE PTR [ECX],00

015F:004149E3  75ED                JNZ       004149D2

015F:004149E5  803900              CMP       BYTE PTR [ECX],00

015F:004149E8  7515                JNZ       004149FF

015F:004149EA  803E00              CMP       BYTE PTR [ESI],00

015F:004149ED  7510                JNZ       004149FF

015F:004149EF  B801000000          MOV       EAX,00000001   最後正確就把 EAX=1

015F:004149F4  5F                  POP       EDI

015F:004149F5  5E                  POP       ESI

015F:004149F6  5D                  POP       EBP

015F:004149F7  5B                  POP       EBX

015F:004149F8  81C460030000        ADD       ESP,00000360

015F:004149FE  C3                  RET

好了,大家在 Winsoftice 下以下的命令可以看到:

:d esi

0167:0041F1F8 34 38 34 38 34 38 34 38-34 38 34 38 00 00 00 00  484848484848....

0167:0041F208 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

0167:0041F218 04 0D 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

0167:0041F228 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

0167:0041F238 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

0167:0041F248 00 00 00 00 00 00 00 00-00 C0 00 00 0A 04 00 00  ................

0167:0041F258 04 00 00 00 0A 00 00 00-01 00 00 00 90 03 CA 00  ................

0167:0041F268 00 00 00 00 D0 03 CA 00-00 00 00 00 00 00 00 00  ................

:d ecx

0167:0066F3E4 58 51 4D 50 5A 43 57 58-54 45 52 53 00 01 08 00  XQMPZCWXTERS....

0167:0066F3F4 9A EE 8B 17 E3 A4 00 00-10 00 E0 2C 00 00 00 01  ...........,....

0167:0066F404 00 03 00 00 00 00 00 00-80 01 AB 01 8D 01 9C 01  ................

0167:0066F414 00 00 AB 01 8D 01 00 00-80 01 9C 01 8C 01 A4 01  ................

0167:0066F424 8D 01 9C 01 8C 01 A4 01-8D 01 04 00 00 00 B6 0C  ................

0167:0066F434 00 A9 52 FB 83 2A D1 78-21 88 73 DA A2 0B F0 59  ..R..*.x!.s....Y

0167:0066F444 65 CC 37 9E E6 4F B4 1D-44 ED 16 BF C7 6E 95 3C  e.7..O..D....n.<

0167:0066F454 ED 44 BF 16 6E C7 3C 95-CC 65 9E 37 4F E6 1D B4  .D..n.<..e.7O...

見到了吧!那個 XQMPZCWXTERS 就是正確的註冊碼了,但如果我們用以前的方法來寫序號產生器, 就要去分析前面的程式了,但我們今次不是用這種方法來製作,而是用 CRACKCODE 來做,這樣大家可以見到用 CRACKCODE 來做序號產生器實在是太方便了,太簡單了! 好,我們為 CRACKCODE 來寫一個 INI 檔案吧!

第一種寫法(這是一種不提倡的寫法!):

記憶體直接定址的方法:

[Options]

CommandLine=Axplorer.exe   這是被取註冊碼的 EXE 檔名

Mode=0      採用模式 0 讀取註冊碼

First_Break_Address=4149D2   程式的中斷地址,它和 ICE 中見到的是一樣的

First_Break_Address_Code=8A   中斷程式的 1 Byte 程式碼,這個 8A 就是 015F:004149D2 8A

First_Break_Address_Code_Lenth=2  中斷行程式碼的長度(單位: byte

Save_Code_Address=66F3E4   存放註冊碼的記憶體地址

第二種寫法(這種值得推薦!)

暫存器間接定址的方法:

[Options]

CommandLine=test.exe   這是被取註冊碼的 EXE 檔名(化名)

Mode=0     取用模式 0 讀取註冊碼

First_Break_Address=4149D2  程式的中斷地址,它和 ICE 中見到的是一樣的

First_Break_Address_Code=8A  中斷程式的 1 Byte 程式碼,這個 8A 就是 015F:004149D2 8A

First_Break_Address_Code_Lenth=2 中斷行程式碼的長度(單位: byte

Save_Code_Address=ECX   存放註冊碼的記憶體地址,這個 ECX 是從 015F:004149D8

     的,大家見到了吧!這和上前的方法相差就只是這句,

     當你使用了這句,就不怕軟體是否被壓縮過了。

注意:

      目前 CRACKCODE2000 對所中斷地址的程式碼長度已經是無有要求的,只要把長度寫進 INI

就可以了!

015F:004149D2  8A06                MOV       AL,[ESI]    本行程式碼為 2 Bytes

015F:004149DA  41                  INC       ECX         本行程式碼為 1 Byte

015F:004149E0  803900              CMP       BYTE PTR [ECX],00  本行程式碼為 3 Bytes

生成後儲存為 CRACKCODE.INI 檔案,把 CRACKCODE.EXE CRACKCODE.INI 一起 copy 到被註冊的 軟體的安裝目錄下,執行 CRACKCODE.EXE 。哦!被取註冊碼的軟體也執行了,到註冊的視窗去,輸入一個名字,隨便輸入註冊碼,按確定,哦!跳出一個顯示窗來,裡面出現了你想要的正確註冊碼了。是不是覺得很神奇呢!來試一試你就知道了!

好了,下面我再為大家顯示 CrackCode2000 的另一種工作模式吧!

下面是 Decompile Winhelp 的序號產生器的寫法,這個軟體是加了殼的軟體,我們來看一看加了殼 的軟體對於 CrackCode2000 是否有影響 , 現在我把它註冊碼的部分那出來給大家看一看吧!而且它的註冊碼和硬體是有關係的,所以要想別人可以註冊,就一定要寫出序號產生器了!

下面就是它的比較程式了:

015f:0040e4a9  8d45c0              lea       eax,[ebp-40]

015f:0040e4ac  8d55ac              lea       edx,[ebp-54]

015f:0040e4af  8a08                mov       cl,[eax]     ds:eax 放的是你輸入的註冊碼

015f:0040e4b1  3a0a                cmp       cl,[edx]     ds:edx 放的是正確的註冊碼   

015f:0040e4b3  7516                jnz       0040e4cb

015f:0040e4b5  84c9                test      cl,cl

015f:0040e4b7  746e                jz        0040e527

015f:0040e4b9  8a4801              mov       cl,[eax+01]

015f:0040e4bc  3a4a01              cmp       cl,[edx+01]

015f:0040e4bf  750a                jnz       0040e4cb

015f:0040e4c1  83c002              add       eax,02

015f:0040e4c4  83c202              add       edx,02

015f:0040e4c7  84c9                test      cl,cl

015f:0040e4c9  75e4                jnz       0040e4af

015f:0040e4cb  745a                jz        0040e527

winsoftice 裡下以下命令可以見到:

:d ds:eax

0167:006DF33C 34 34 34 34 34 34 34 34-34 34 34 34 34 34 00 00  44444444444444..

0167:006DF34C 80 00 BC 58 C8 F3 6D 00-7E 51 46 00 8C 29 47 00  ...X..m.~QF..)G.

0167:006DF35C 1C F3 6D 00 14 00 00 00-00 00 78 83 F5 10 00 00  ..m.......x.....

0167:006DF36C 00 00 00 00 A0 0E 08 00-00 00 00 00 00 00 00 00  ................

:d ds:edx

0167:006DF328 32 39 34 46 41 41 38 36-33 30 44 30 35 39 00 58  294FAA8630D059.X

0167:006DF338 80 00 00 00 34 34 34 34-34 34 34 34 34 34 34 34  ....444444444444

0167:006DF348 34 34 00 00 80 00 BC 58-C8 F3 6D 00 7E 51 46 00  44.....X..m.~QF.

0167:006DF358 8C 29 47 00 1C F3 6D 00-14 00 00 00 00 00 78 83  .)G...m.......x.

好了,來段 INI 檔案把幫它做一個序號產生器吧!

[Options]

CommandLine=Decompile Winhelp.exe  這是被取註冊碼的 EXE 檔名

Mode=0      採用模式 0 讀取註冊碼

First_Break_Address=40E4AF   程式的中斷地址,它和 ICE 中見到的是一樣的

First_Break_Address_Code=8A   中斷程式的 1 Byte 程式碼,這個 8A 就是 015f:0040e4af 8A

First_Break_Address_Code_Lenth=2  中斷行程式碼的長度(單位: byte

Save_Code_Address=EDX    存放註冊碼的記憶體地址

生成後儲存為 CRACKCODE.INI 檔案,把 CRACKCODE.EXE CRACKCODE.INI 一起 copy 到被註冊的 軟體的安裝目錄下,執行 CRACKCODE.EXE 。哦!被取註冊碼的軟體也執行了,到註冊的視窗去,隨便輸入足夠數量的註冊碼,按確定,哦!跳出一個顯示窗來,裡面出現了你想要的正 確註冊碼了。是不是覺得很神奇呢!來試一試你就知道了!大家現在可以見到,用暫存器尋 址是多麼好的一件事啊!

下面我們再來看一看 CrackCode2000 的另一個工作模式吧!以下是關於美萍網管大師 3.1 的註冊

機的寫法:

大家看一看這個軟體的比較程式吧!

015f:00460759  8bd8                mov       ebx,eax

015f:0046075b  b87c074600          mov       eax,0046077c

015f:00460760  e81f000000          call      00460784

015f:00460765  3bd8                cmp       ebx,eax        這裡的 ebx 就是放你臺機器

015f:00460767  7507                jnz       00460770       的正確的註冊碼了

015f:00460769  b801000000          mov       eax,00000001

015f:0046076e  5b                  pop       ebx

015f:0046076f  c3                  ret

好我們來寫序號產生器了:

[Options]

CommandLine=scon.exe    這是被取註冊碼的 EXE 檔名

Mode=1      採用模式 1 讀取註冊碼

First_Break_Address=460765   程式的中斷地址,它和 ICE 中見到的是一樣的

First_Break_Address_Code=3B   中斷程式的 1 Byte 程式碼,這個 3B 就是 015f:00460765 3B

First_Break_Address_Code_Lenth=2  中斷行程式碼的長度(單位: byte

Save_Code_Address=EBX    存放註冊碼的記憶體地址

大家看到了嗎?今次 CrackCode2000 使用了模式 1 來讀取了,因為今次的註冊碼不是直接用 ASCII 的形式放在記憶體中的,而是用數值的形式放在暫存器處的,所以這時就要用模式 1 了。 生成後儲存為 CRACKCODE.INI 檔案,把 CRACKCODE.EXE CRACKCODE.INI 一起 copy 到被註冊的 軟體的安裝目錄下,執行 CRACKCODE.EXE 。哦!被取註冊碼的軟體也執行了,哦!軟體一執行 註冊碼就出來了!哈哈。。。。。。

好了,我們再來進一步地研究 CrackCode 的加強模式吧!這是正式版本才具有的,二重斷點讀取註冊碼,這是 CrackCode 的增強模式,它可以使用二次重點的方法,來達到的目的,大 家可能還不瞭解為什麼要這樣做吧!好,讓我們看一看下面這個軟體,你就明白這是多麼 的重要啊!

下面的實現例子是大家熟悉的 Winzip7.0 !好了開始吧!我們找到了它的比較程式了:

015f:00457920  8a06                mov       al,[esi]      輸入的註冊碼

015f:00457922  46                  inc       esi          

015f:00457923  8a27                mov       ah,[edi]      正確的註冊碼

015f:00457925  47                  inc       edi

015f:00457926  38c4                cmp       ah,al

015f:00457928  74f2                jz        0045791c

015f:0045792a  2c41                sub       al,41

015f:0045792c  3c1a                cmp       al,1a

015f:0045792e  1ac9                sbb       cl,cl

015f:00457930  80e120              and       cl,20

015f:00457933  02c1                add       al,cl

015f:00457935  0441                add       al,41

015f:00457937  86e0                xchg      ah,al

015f:00457939  2c41                sub       al,41

015f:0045793b  3c1a                cmp       al,1a

015f:0045793d  1ac9                sbb       cl,cl

015f:0045793f  80e120              and       cl,20

015f:00457942  02c1                add       al,cl

015f:00457944  0441                add       al,41

015f:00457946  38e0                cmp       al,ah

015f:00457948  74d2                jz        0045791c

我們在 winsoftice 中下以下的命令:

:d ds:esi

0167:0047D958 34 38 34 38 34 38 34 38-34 38 00 00 00 00 00 00  4848484848......

0167:0047D968 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

0167:0047D978 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

:d ds:edi

0167:0072F41C 43 39 36 32 30 35 45 42-00 00 01 00 00 00 0A 00  C96205EB........

0167:0072F42C D0 00 36 18 DA F4 0C 00-2C 20 0C 00 CE 1F 1A 84  ..6....., ......

0167:0072F43C 3F 19 5C 84 97 0F 47 04-00 00 0A 00 00 00 0A 00  ?.\...G.........

看到了嗎?那 ds:edi 放的就是你要的東西啊!

好了,我們先試一試用普通模式 0 來寫序號產生器吧!

[Options]

CommandLine=winzip32.exe   這是被取註冊碼的 EXE 檔名

Mode=0      採用模式 1 讀取註冊碼

First_Break_Address=457923   程式的中斷地址,它和 ICE 中見到的是一樣的

First_Break_Address_Code=8A   中斷程式的 1 Byte 程式碼,這個 3B 就是 015f:00460765 3B

First_Break_Address_Code_Lenth=2  中斷行程式碼的長度(單位: byte

Save_Code_Address=EDI    存放註冊碼的記憶體地址

生成後儲存為 CRACKCODE.INI 檔案,把 CRACKCODE.EXE CRACKCODE.INI 一起 copy 到被註冊的 軟體的安裝目錄下,執行 CRACKCODE.EXE 。哦! winzip 會說很多的 dll 找不到,不能正常執行。

哦!發生了什麼事啊!好我們用 winsoftice 在那 cs:457923 下一個斷點,重新執行 winzip 哦!我們的 winsoftice 不斷地中斷,原來 winzip 的設計很特殊性,它會用比較註冊碼的程式來載入其它的 dll ,所以 CrackCode 的跟蹤就不能正常地進行下去了。

好吧!我們再看一看程式吧!經過分析我們知道,上面的比較程式是由下面的程式呼叫去

做比較註冊碼的工作的。

015f:00407c14  50                  push      eax

015f:00407c15  57                  push      edi

015f:00407c16  e8ab000000          call      00407cc6       帶過這個 Call 在上面的

015f:00407c1b  59                  pop       ecx    0167:0072F41C 址中註冊

015f:00407c1c  be58d94700          mov       esi,0047d958   碼就出來了。

015f:00407c21  59                  pop       ecx

015f:00407c22  8d85c0feffff        lea       eax,[ebp-0140]

015f:00407c28  56                  push      esi

015f:00407c29  50                  push      eax

015f:00407c2a  e8d1fc0400          call      00457900       這個 Call 就是呼叫比較

015f:00407c2f  f7d8                neg       eax            註冊碼的 Call 了。

015f:00407c31  1bc0                sbb       eax,eax

015f:00407c33  59                  pop       ecx

015f:00407c34  40                  inc       eax

015f:00407c35  59                  pop       ecx

015f:00407c36  a37cb04700          mov       [0047b07c],eax

本來我們可以在上面出現了註冊之後就找一箇中斷地址中斷用模式 0 去取註冊啊!但有一點你們切記,那是到了萬不得意時才使用的,我們要儘可能地用暫存器定址。所以我們使用增強模式來解決這個問題。好了,我們在出現了註冊碼和呼叫比較註冊碼程式的 Call 之間 找一個地址,但經過分析我選取 015f:00407c1c 這個地址,當然你也可以選擇其它的。 下面大家看一看 INI 檔案是如何寫的:

[Options]

CommandLine=winzip32.exe   這是被取註冊碼的 EXE 檔名

Mode=2      採用增強模式 2 讀取註冊碼

First_Break_Address=407C1C   程式的中斷地址 1 ,它和 ICE 中見到的是一樣的

First_Break_Address_Code=BE   中斷程式的 1 Byte 程式碼,這個 3B 就是 015f:00407c1c BE

First_Break_Address_Code_Lenth=5  中斷行程式碼的長度(單位: byte  

Second_Break_Address=457923   程式的中斷地址 2 ,它和 ICE 中見到的是一樣的

Second_Break_Address_Code_Lenth=2  中斷行程式碼的長度(單位: byte

Save_Code_Address=EDI    存放註冊碼的記憶體地址

生成後儲存為 CRACKCODE.INI 檔案,把 CRACKCODE.EXE CRACKCODE.INI 一起 copy 到被註冊的 軟體的安裝目錄下,執行 CRACKCODE.EXE 。哦!被取註冊碼的軟體也執行了,哦!軟體一執行 註冊碼就出來了!哈哈。。。。。。

作者: Ru Feng

相關文章