軟體破解入門(暴力破解CrackMe)

來源:互聯網
上載者:User

標籤:http   os   使用   sp   檔案   on   代碼   bs   ad   

  所謂暴力破解,就是通過修改彙編代碼進而控製程序的運行流程,達到不需註冊碼也能正常使用軟體的目的。相對於解出演算法進而編寫註冊機,暴破的技術含量是比較低的。但也正是因為一本05年的雜誌上介紹“暴力破解”的文章,讓我入了這個大坑。近來想重拾調試器,就先從最簡單的CrackMe入手,熟練一下各工具方法。

      下載CrackMe3檔案(我用的是看雪《加密與解密》中的CFF CrackMe #3 程式  http://pan.baidu.com/s/1dD9v9x3 )。

 

1.查看此程式是否加殼。加殼的話還得進行脫殼處理。將CrackMe拖到PEID上,顯示用Delphi編寫。無殼,甚好。

 

3.開啟程式,看看註冊碼出現異常的時候有何提示。恩,輸入錯誤的註冊碼,確認。顯示了“Wrong Serial,try again!”。我們記下這一串字元,接下來用得到。



4.退出程式,開啟OllyDbg,並載入此程式。(當年用的是W32Dasm,屬於靜態反組譯碼軟體,支援WIN API,具有強大的串式參考功能。因此成為破解入門軟體的最佳選擇。這次用OllyDbg實施爆破,只是複習一下操作。爆破原理都是相同的)是OllyICE,是OllyDbg的漢化版。也一樣好用。

載入程式後,出現如下介面:



title上面的“模組 — crackme3”標明了程式領空,我們當前是在crackme的代碼內。

5.我們在反組譯碼視窗“右鍵——尋找——所有參考文本字串”:


然後會彈出一個文本字串的對話方塊,繼續“右鍵——尋找文本”:


 然後會彈出對話方塊,輸入前面記下來的那串“Wrong Serial,try again!”。其實為了方便,可以只輸入“Wrong”這個字串,畢竟程式裡帶“Wrong”的字元不會太多,如:

點擊“確定”後,會高亮尋找結果,此時在對應字串處“右鍵——反組譯碼視窗中跟隨”,會在反組譯碼視窗中跳到對應此串字元的彙編指令:

 



看到的指令,分析一下程式流程:輸入ID和註冊碼後,call調用子函數來判斷註冊碼是否正確(00440F51處,call 00403B2C處的子函數),如果不正確,一個jnz跳到00440F72,彈出“Wrong Serial ,try again!”,提醒說你丫註冊碼是錯的。

為了驗證我們的想法,我們在call的前面按F2下個斷點,然後一步步跟進,看看call了個什麼函數過來:


 然後F9讓程式跑起來,輸入假的ID “wwwwww” ,按下“註冊”。此時程式自然要去call子函數來驗證我們的註冊碼是否正確。可惜它還沒走到call的那一步,就停在了我們設的斷點上(可以看到資訊視窗中的堆棧內容“wwwww”,不知會不會存在緩衝區溢位?XD):


然後按下幾次F8單步步過,直到了00440F34 call指令,程式就要召喚子程式來檢驗註冊碼是否正確了!此時改為F7單步步入,跟蹤到所call的函數(,此函數地址在00403B2C處):


跟進去之後,這就是用來驗證註冊碼的程式(從 三個push壓入堆棧 開始,到 三個pop彈出堆棧+retn 結束):



從代碼中可以發現,程式將輸入的註冊碼與內建的註冊碼用cmp指令做了比較。(cmp指令執行後,將對標誌寄存器ZF產生影響。比如 CMP AX , BX ,當AX=BX時,ZF=1;AX!=BX時,ZF=0。)

也就是說,如果註冊碼與輸入的字串不相等,ZF=0。此時子程式返回,執行00440F39處的JNZ指令。因為輸入的註冊碼不對,ZF=0,開始執行JNZ,跳轉到00440F8C,彈出“Wrong Serial”對話方塊提示註冊碼錯誤。

這就是傳說中的“關鍵跳”,如果將JNZ(ZF=0時就跳轉)改為JE(ZF=1時就跳轉),得到的結果就會正好相反,即錯誤的註冊碼反而會提示註冊成功,對的註冊碼反而會提示錯誤。

6.那麼現在找出那兩個“關鍵跳”(輸入ID時call了一下,然後一個jnz。輸入註冊碼時又call了一下,再一個jnz。),如:



好,現在只剩下修改彙編代碼了。雙擊對應的JNZ指令,彈出“彙編於此處”的對話方塊。將只需將“jnz”改為“je”,點擊“彙編”即可。用同樣的方法修改另一處“jnz”:




修改完畢,“右鍵——複製到可執行檔——所有修改“:


在彈出的對話方塊中點擊“全部複製”:

然後在出現的新對話方塊中“右鍵——儲存檔案”,完畢。

此時開啟新儲存的檔案,隨意輸入一個ID和註冊碼,點擊“註冊”,即彈出“註冊成功”的對話方塊:



小結:本次主要是重溫了OllyDbg的操作。爆破無外乎就是改變程式的驗證流程,譬如將關鍵處的jne改為je,或者jmp,比較不優雅。更優雅的是揣摩出程式作者的驗證演算法,寫出記憶體補丁或者註冊機,這才是高大上的方法。無奈演算法一類的是我的軟肋,仍需努力啊。

軟體破解入門(暴力破解CrackMe)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.