《32BITFTP的破解實錄》===>讓程式成為我們的"序號產生器"
破解作者:yuppc
破解時間:2001年6月29日
破解難度:易
注:(轉載希望保持完整,文章歸CCG、BCG、FCG所有)
軟體概述:
1>軟體名:32bitFTP(V p9.30.06)
2>軟體作用(摘):介紹:這是一個強大的Internet工具,有著小巧的身體,但同樣有著完美的功能,是上傳/下載的FTP好工具.(支援命令模式,有豐富的狀態顯示)
3>評:這是一個非常好的網路軟體,
4>未註冊軟體只有三十天的使用期,但它也是共享版中較友善的軟體之一(啟動時有NAG框).
5>主頁:http://www.ElectraSoft.com/ or http://www.blkbox.com/~jonk/
email: FaxMail@ElectraSoft.com or jonk@blkbox.com
破解原因:昨天BCG老大要求我上傳兩個(關於"推箱子"遊戲)的檔案,我用IE傳著傳著就當機了(不明身份的原因:-).接著開始尋找上傳FTP軟體,得到了它,可是太可惡了,好象有人動過這個軟體(啟動時便顯示註冊碼,並註冊成功,但第二次啟動時又要求註冊,顯示註冊碼錯誤),好到軟體主頁去DOWNLOAD一個原版的,……!!
破解目的:為加入CCG奮鬥!(其實很多自我驗證的軟體都可以成為自身的序號產生器,只是看如何找到切入點了)
破解工具:
1>w32asm大老專版 ====>反彙編工具
2>SOFTice4.0 =====>動態除錯工具
3>Hex shop =====>十六進位制編輯器
4>Find 、Note =====>WINDOWS自帶的查詢工具
6>眼鏡一副 =====>(原因:程式的字太小,保護眼睛) (有人向我扔番茄,接住----吃)^>^
破解方法:靜態查詢、動態分析!(讓自我驗證的軟體都可以成為自身的序號產生器)
破解開始:
1>用W32asm開啟32bitFTP.exe,發現其呼叫檔案32bitftp.ini;
2>查詢檔案32bitftp.ini,並且發現了(它儲存了你使用時要登陸的FTP地址和……):
32bitftp.ini檔案部分內容(檔案位置C:\WINDOWS\):
[Configure] =======>主要的設定段
CurrentRegisterName=yuppc =====>註冊名
CurrentRegisterEmailAddr=one@one.net =====>註冊E-MAIL
CurrentEmailAddress=one@one.one =====>當前E-MAIL地址
CurrentUserStatus=3033353C3B3E =====>最近輸入的註冊碼(正確註冊後註冊碼存放位,可是明碼存放呀,不註冊可沒有呀)
CurrentUserTmpReg=06060417 =====>假註冊碼(未註冊時顯示的臨時註冊碼)
CurrentSession=ftp://202.xxx.xxx.xxx =====>最近連線的站點(絕密,哈)
CurrentViewer=
ThisProgramDir=D:\32BITFTP\ =======>安裝目錄
3>好很明顯了,開啟Loader,開始動態跟蹤;
4>輸入註冊名\假E-MAIL地址\假註冊碼,設斷hmemcpy進行跟蹤;
5>跟蹤到下面:
:004030F7 BF54154800 mov edi,
00481554 ======>真確註冊碼
:004030FC BE541E4800 mov esi,
00481E54 ======>假註冊碼
注:在這打命令---d edi,發現正確註冊碼3033353C3B3E;
6>其實到這就可以看到真假註冊碼了,但是……(我還要加入BCG呢,不能停)
接著看下面原始碼分析:
:00403101 33D2
xor edx, edx
:00403103 F3A6
repz cmpsb ======>迴圈比較
:00403105 0F85B2000000 jne 004031BD
=======>關鍵跳(1),不對就跳
:0040310B BF54154800 mov edi,
00481554 ======>正確註冊碼地址
:00403110 83C9FF
or ecx, FFFFFFFF
:00403113 F2
repnz
:00403114 AE
scasb
:00403115 F7D1
not ecx
:00403117 49
dec ecx ======>ECX是真確註冊碼字元個數
:00403118 BF541E4800 mov edi,
00481E54 =======>假註冊碼地址(重點A)
^^^^^^^^
:0040311D 8BD1
mov edx, ecx ====>真註冊碼字元個數傳到EDX中
:0040311F 83C9FF
or ecx, FFFFFFFF
:00403122 F2
repnz
:00403123 AE
scasb
:00403124 F7D1
not ecx
:00403126 49
dec ecx ========>ECX中是假註冊碼字元個數
:00403127 3BCA
cmp ecx, edx =====>假真註冊碼字元個數比較
:00403129 0F858E000000 jne 004031BD
====>關鍵跳(2),不對就跳
:0040312F BF541E4800 mov edi,
00481E54 ====>將輸入(假)註冊碼地址傳給EDI(重點B)
^^^^^^^^
:
:
7>接下來軟體開始呼叫檔案32BITFTP.INI,並且把輸入(假)註冊碼寫入檔案32BITFTP.INI(開始面有分析地址),以方便軟體啟動時的CRC校驗(關鍵呀).
:
:
* Possible StringData Ref from Data Obj ->"32BITFTP.INI" ===>磁碟檔案(C:\WINDOWS\32BITFTP.INI)
|
:0040313D 680CF94500 push 0045F90C
:
:
* Possible StringData Ref from Data Obj ->"CurrentUserStatus" ====>存放CODE的地方(上面提到過)
|
:00403157 68B0F94500 push 0045F9B0
:0040315C 83E103
and ecx, 00000003
* Possible StringData Ref from Data Obj ->"Configure" =====>(分支目的地)
|
:0040315F 6854F94500 push 0045F954
:00403164 F3
repz
:00403165 A4
movsb
:00403166 C705C03A480001000000 mov dword ptr [00483AC0], 00000001
* Reference To: KERNEL32.WritePrivateProfileStringA, Ord:02E5h =====>寫入呼叫
^^^^^^^^^^|^^^^^^^^^^^^^^^
:00403170 FF1524324400 Call dword ptr
[00443224]
* Possible StringData Ref from Data Obj ->"32bit FTP"
|
:00403176 683CFE4500 push 0045FE3C
* Possible StringData Ref from Data Obj ->"Thank you for registering "
====>成功註冊提示(+我們的目的地+)
|
:0040317B 68F0E64400 push 0044E6F0
8>知道我要做什麼了吧(想一下,如果軟體自動將正確的註冊碼寫如檔案32BITFTP.INI那有多棒);
9>動手(你的最愛):改動“關鍵跳(1)”、“重點A”、“重點B”
地址403105的0F85B2000000改為909090909090
===>不許跳
地址403118的BF541E4800改為BF54154800
====>改成真正註冊碼地址
地址40312F的BF541E4800改為BF54154800
====>改成真正註冊碼地址
10>執行程式進行註冊,成功註冊後開啟C:\WINDOWS\32bitFTP.ini檔案,看看[Configure]中的CurrentRegisterName和CurrentUserStatus,是不是註冊名和註冊嗎!
:-)
11>總結:如此以來,我們就可以用軟體自身作為序號產生器,任選註冊名了!!(其實很多自我驗證的軟體都可以成為自身的序號產生器,只是看如何找到切入點了)
12>收工.
--------------作者:yuppc----------2001.6.29