破解網路鼴鼠(NetMoles Downloader 2.4)

看雪資料發表於2003-08-05

  剛剛註冊進來,連發了幾個貼子。原來做破解,都只有筆記,沒有認真寫文章。近來在單位的BBS上主持了一個類似版面,才動手寫了幾篇。用完了就沒有了。;-)

  這個比較簡單,權當灌水。


  這是個流媒體下載軟體。近來StreamBox屢屢失手,到Google上找了一下流媒體工具,倒回來這個東東。裝上試了試,果然比StreamBox強,順利地下載回來2首前者搞不定的mp3。

  選擇“系統/註冊”選單項,彈出註冊對話方塊。在使用者名稱中輸“softworm”,註冊碼亂輸一個“78787878”,報告“註冊碼不正確,註冊失敗”。
  
  幫助檔案中沒提未註冊版有什麼功能限制,但下面的狀態列上有:只能下載20個檔案。

1. 用language2000看了看執行程式NetMoles.exe,報告是用VC寫的,用Aspack壓縮。儘管看雪很推崇手動脫殼,我還是首選用現成的脫殼軟體。用Caspr,順利地脫掉了。

2. 用IDA Pro反編譯NetMoles.exe,IDA會報“不明的編譯器型別”。脫殼的程式常常這樣,不用理它。使用與VC相關的符號檔案,結果只用上了十來個。這就不對了,看看NetMoles.exe的節(section)資訊,包含執行程式碼的名為“CODE”,這顯然是Borland的編譯器做的(VC的為“text”)。看來language2000要麼出了什麼錯,要麼是把殼程式碼使用的程式語言報出來了。
  把BCB和Delphi的符號檔案用上去,這回識別出數千個名字。

3. 用SoftIce載入NetMoles.exe,在入口點不能停下。用PEEditor修改CODE節的屬性:從0xC0000040改為0xE0000020。好了,現在可以停下了。

4. 下一步應該是SoftIce與IDA Pro結合,研究程式碼了。這種註冊碼保護,一般有兩個方向,或者看亂輸那個序列號被如何使用,或者從錯誤資訊入手,看看是在哪裡判定註冊碼錯誤的。

  可是且慢,不妨先偷個懶。根據以往的經驗,使用BCB或Delphi的程式設計者,往往會誤用Borland的庫函式進行明碼比較。這種情況遇到過多次,這一位也許也會犯同樣的錯誤,先試試吧。那個比較函式叫LStrCmp。

  在IDA Pro中搜尋“LStrCmp”,在4043C0處:

  4043C0 _fastcall System::_linkproc_ LstrCmp(void) proc near

  在此地址設上斷點。這個函式大概是在一個單獨的執行緒中執行的,會不斷地斷下,所以必須設為條件斷點:

  :bpx 4043C0 if(eax!=0)&(edx!=0) do "d eax"

  其中eax和edx是兩個指標,分別指向用於比較的字串,這裡只有在二者均不為零的情況下才觸發斷點,並用“d eax”顯示其中一個緩衝區的內容。

  先禁止斷點,回到原程式,在輸入使用者名稱和註冊碼後,啟用斷點。OK,SoftIce彈出後,緩衝區中的內容為一長串字元,一看就是註冊碼。再看看edx指向的那個緩衝區,正是先輸入的“78787878”。就是它了。

  清除斷點,輸入以下資料:

  使用者名稱稱: softworm
  註冊碼:xxxxxxxxxxxxxxxxx(隱去)

  不到一支菸的工夫就搞定了。


相關文章