俠盜阿凡提FlashGet詳細破解過程,跟這個軟體加密方式不知象不象? (4千字)

看雪資料發表於2001-04-23

《FlashGet(JetCar Ver0.77) 破解實錄》
(轉載希望保持完整)
軟體:FlashGet(JetCar)
版本:0.77

前言:
JetCar是我用過最好的下載工具,最快可達到11K/秒(ISDN),
它是透過把一個檔案分成幾個部分同時下載可以成倍的提高速度,
下載速度可以提高100%到500%。JetCar可以建立不限數目的類別,
每個類別指定單獨的檔案目錄,不同的類別儲存到不同的目錄中去
,強大易用的管理功能包括支援拖拽,更名,新增描述,查詢,文
件名重複時可自動重新命名等等。而且可以在下載前管理軟體。兩種
版本均內建支援英語、簡體中文、繁體中文、西班牙語、俄語、法
語、日語、烏克蘭語、朝鮮語、葡萄牙語、丹麥語、德語、羅馬尼
亞語、義大利語、瑞典語、斯洛維尼亞語、匈牙利語、希臘語和加
泰羅尼亞語。
中國人的驕傲,巨好的民族軟體!!!
其實這個軟體是完全免費的,根本沒有破解的必要,但近來有
一些網友頻頻留言要我寫一篇破解教程,唉!盛情難卻,我唯有再
次操刀。
這個軟體註冊和不註冊主要區別在:註冊後“廣告欄會自動移
除”--僅僅是這樣。但這個軟體也是取用目前較流行的防破解手
法:即在輸入完註冊碼後並不立即進行比對 (先把註冊碼存放在①
檔案中②登錄檔中③記憶體中) ,而是在下一次軟體啟動的時候才作
比對,所以這也是一個很好的破解教材!
本軟體是取用第二種手法,即把註冊碼存放在登錄檔中:
\HKEY_CURRENT_USER\SoftWare\JetCar\JetCar\General的RegName
和RegPass,所以我第一時間想到的方法就是用攔登錄檔的API函式
:bpx RegOpenKeyA或bpx RegQueryValueExA,想在它進行註冊碼
比對時再把其一網打盡...^_^。天啊,原來這個軟體在啟動的時候
有不下數十處地方是呼叫這兩個函式的,這又給破解帶來了一些麻
煩,因為我不可能一個一個地去篩選,這樣做太笨了。所以我又想
到了破解利器W32DASM,因為它常常是SoftIce的好助手。費話小說,
開工吧!

破解工具:W32DASM 8.9X
SoftIce for Win9X 4.X

首先用W32DASM把JetCar反編譯,然後查詢字串:RegName(這個非常
關鍵),一會就搜尋到了:

* StringData ->"RegName"
|
:00410356 push 0049BC60

* StringData ->"General"
|
:0041035B push 0049B430
:00410360 mov ecx, esi ; 把你輸入的大名寫入
:00410362 call 00469650 ; \HKEY_CURRENT_USER\SoftWare\JetCar\JetCar\General的RegName
; 我怎麼知道?因為我Crack過嘛!

:00410367 mov edx, dword ptr [esp+0000012C]
:0041036E mov ecx, esi
:00410370 push edx

* Possible StringData Ref from Data Obj ->"RegPass"
|
:00410371 push 0049BC58

* Possible StringData Ref from Data Obj ->"General"
|
:00410376 push 0049B430 ; 把你輸入的註冊碼寫入
:0041037B call 00469650 ; \HKEY_CURRENT_USER\SoftWare\JetCar\JetCar\General的RegPass
:00410380 push FFFFFFFF
:00410382 push 00000030

**** "Thank you for registering FlashGet. Please restart the progr"
|
:00410384 push 0000EF82
:00410389 call 004116D0 ; 就是那個提示的視窗(叫你重新啟動)

既然上面的程式碼是把你輸入的名字和註冊碼寫入登錄檔中,那麼它肯
定還有一段程式碼是把你的名字和註冊碼從登錄檔中讀出來的,於是我
再次往下查詢RegName,果然不出所料,這次又找到了:

* StringData ->"RegName"
|
:004104BF push 0049BC60
:004104C4 lea eax, dword ptr [esp+14]

* StringData ->"General"
|
:004104C8 push 0049B430
:004104CD mov esi, ecx
:004104CF push eax
:004104D0 call 00472783 ; 從登錄檔中讀出你剛才輸入的大名
:004104D5 push 0049FC40

* StringData ->"RegPass"
|
:004104DA push 0049BC58
:004104DF lea ecx, dword ptr [esp+10]

* StringData ->"General"
|
:004104E3 push 0049B430
:004104E8 push ecx
:004104E9 mov ecx, esi
:004104EB mov [esp+34], 00000000
:004104F3 call 00472783 ; 從登錄檔中讀出你剛才輸入的註冊碼
:004104F8 mov edx, dword ptr [esp+0C]

那麼正確的註冊碼是什麼?它們又是在哪裡進行比對的?
哥們,先不要急,繼續往下看吧!

:0041057B push ecx ; 你輸入的大名
:0041057C push edx ; edx, 程式生成的
:0041057D mov ecx, esi
:0041057F call 00410620 ; 生成註冊碼的Call
; 有興趣的朋友可以跟進去研究研究
:00410584 mov eax, dword ptr [esp+0C] ; 你輸入的註冊碼
:00410588 mov ecx, dword ptr [esp+14] ; 正確的註冊碼 ^_^
:0041058C push eax
:0041058D push ecx
:0041058E call 00449F6E ; 註冊碼進行比對
:00410593 add esp, 00000008
:00410596 mov byte ptr [esp+28], bl
:0041059A test eax, eax ; 成功eax=0, 不成功eax=FFFFFFFF
:0041059C pop edi
:0041059D lea ecx, dword ptr [esp+10]
:004105A1 jne 004105DA ; 註冊失敗
; 也可直接把其改成9090 ^_^

現在大家應該一目瞭然嘛,如果還不明白,那我也沒辦法了!

再後整理:
1. 先執行 JetCar 0.77,然後在選單上選“幫助->移掉廣告橫幅”,
使用者名稱稱:000ye,註冊碼:78787878,按“確認”鍵,最後退出JetCar。
2. 用SoftIce 的 Symbol Loader 載入JetCar (這個不用我教吧)
3. 按 F8
4. bpx 0041058C
5. F5
6. 程式中斷,D ecx
7. 還不快快抄下來,正確的註冊碼是:05914NB7R3

浪費了大家的時間,真的不好意思!!!

000ye
2000.03.12

相關文章