《32BITFTP的破解實錄》==>讓程式成為我們的"序號產生器"-->申請BCG第二篇 (5千字)

看雪資料發表於2001-06-29

《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

相關文章