如何破解Windows系統(tǒng)軟件?
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
一、破解的關(guān)鍵是什么? 我個人認(rèn)為,破解的關(guān)鍵就是找到最恰當(dāng)?shù)臄帱c。水平的高低也就在于誰能在最快的時間找到最有價值的斷點。 什么是斷點? 就是破解者人為地讓程序在執(zhí)行過程中暫時停下來(也叫斷下來)的那個代碼地址。 要找到斷點,就要涉及到一個工具和一些技術(shù)。工具通常就是OD,OD這個軟件的作用就是能夠讓軟件以匯編的形式呈現(xiàn),如果你能看懂匯編語言,你就能夠看懂這個軟件的編程流程了。 所以,破解者不僅要會使用OD這個工具,還要會一些匯編知識。 好在,要求不高,難度不大,你基本上一個小時就可以學(xué)會。 OD還有一個重要的作用,就是你可以在某個地址下斷點,當(dāng)軟件執(zhí)行到這句代碼的時候就會自動斷下來,這就是上面說的斷點。 但是問題來了,一個軟件的編寫有成千上萬條代碼,你到底該在那一句代碼處下斷點呢? 呵呵,如何有效的下斷點,就是我們學(xué)破解的最關(guān)鍵的技術(shù)。 相信你會聽說過中文搜索關(guān)鍵字、API函數(shù)、消息函數(shù)、F12暫停法、按鈕事件等等方法,其實這些方法的目的都是一樣的,就是下斷點。 那你可能要問了,什么叫做最有價值的斷點?所謂最有價值的斷點,就是距離軟件驗證真假的最近的位置。 我舉個例子,比如有一個軟件需要你輸入用戶名和密碼進行驗證,如果正確就提示登錄成功,錯誤提示登錄失敗。那么,我們該如何下斷點呢? 第一種方法:在軟件讀取我們輸入的假的用戶名和密碼的代碼處下斷,我們也叫做驗證前下斷。怎么下斷呢?如果軟件不是重啟驗證的,你對讀取輸入框的API函數(shù)進行下斷就可以了。 附帶說一句,我們的軟件在編寫時會大量使用WINDOWS系統(tǒng)庫里的API函數(shù)來實現(xiàn)功能,包括彈窗、讀取文本、寫入文本、比較真假碼等等。 所以,你要熟悉一些基本的API函數(shù)的功能。如果軟件是重啟驗證的,你對讀取文件、注冊表的API函數(shù)下斷就可以了。 附帶說一句,所謂重啟驗證,就是你只需要第一次屬于注冊碼,以后啟動軟件的時候就不需要再次輸入了,軟件會自動讀取你之前輸入的注冊碼信息然后進行驗證。 第二種方法:在軟件進行真假碼比較的時候下斷,我們也叫做驗證中下斷,這個斷點就NB了,也就是最有價值了,因為如果軟件編寫者沒有對數(shù)據(jù)進行加密的話,你會直接看到真碼。 那怎么下斷呢?你可能會想到用有比較功能的API函數(shù)或者命令。 呵呵,事實求是說,因為軟件的程序中有大量的比較命令,你很難找準(zhǔn),所以這個方法很少用。當(dāng)然,易語言除外,因為它有一個特殊的文本比較通殺命令 test edx,3。 第三種方法:在軟件進行錯誤提示的時候下斷,我們也叫做驗證后下斷,這個斷點是最常用的,也是非常有效的。 那么哪些是錯誤提示的,比如出現(xiàn)“登錄失敗”這樣的文字、出現(xiàn)一個錯誤提示的對話框、出現(xiàn)一個提示需要繳費的窗口等,那么當(dāng)你看到這些錯誤提示的時候,你該如何下斷呢? 比如出現(xiàn)文字,你就可以用搜索字符串的方法,當(dāng)然要注意的是,你可能什么也搜不到? 原因一般有兩個: 一是你沒有在程序領(lǐng)空搜索,最簡單的解決辦法是你先在OD里用CTRL+G命令輸入401000后,再搜索。 二是軟件的作者對字符串進行了加密處理,你暫時沒有辦法了。比如出現(xiàn)提示的對話框或者窗口,你就可以使用API函數(shù)下斷。 當(dāng)然,我個人還特別喜歡用設(shè)置窗口標(biāo)題的API函數(shù)SetWindowText,往往會給你在黑暗中帶來驚喜。 二、殼是什么? 殼就是軟件的防護服。我們這么說吧,軟件作者寫好了程序,但是怕別人分析破解他的程序代碼,就在原有的程序上加了一個防護服就是殼。 所以,殼的作用就是保護軟件,它本身沒有軟件的功能,所以殼是沒有必要破解的,你需要的最多就是脫殼,或者就是繞過殼即可。當(dāng)然,現(xiàn)在的殼也很厲害,比如VM的殼,它的作用是讓軟件原有的代碼在OD里面變的雜亂無章,令你無從下手。 但是,也別太失望。因為當(dāng)絕大多數(shù)加了殼的軟件運行起來后,它在OD里面會自動解碼,源代碼又恢復(fù)正常了。 所以,當(dāng)你遇到有殼的程序,不用費力的必須先脫殼,你可以在OD里面先把軟件運行起來,然后到程序領(lǐng)空(大部分是401000處),然后你再用常規(guī)的辦法(搜字符串、API斷點)來分析下斷點。另外需要注意的是,對于有殼的程序,你修改了源代碼后是無法保存的,你需要做個內(nèi)存補丁,其實也很簡單,有專門的工具。 三、還要注意什么? 當(dāng)你看完了以上兩點,你覺得你能破解軟件了嗎?呵呵,還差一點。就是反反調(diào)試技術(shù)。 現(xiàn)在的軟件作者都很聰明,他們也有一些反破解的技術(shù),他們除了加殼以外,還會增加一些反調(diào)試的技術(shù)來對付你, 比如他會寫一段代碼專門檢測你是否正在使用OD這個工具,發(fā)現(xiàn)了,就直接讓軟件退出。比如他會寫一段代碼專門檢測你是否修改了源程序,發(fā)現(xiàn)了,就直接藍屏。比如他會寫一段代碼專門檢測你是否跳過了注冊窗口,發(fā)現(xiàn)了,就直接格盤。 那怎么辦?很簡單,好好學(xué)習(xí),多練,攻防的技術(shù)是沒有止境的!
隨口說了以上幾點看法,希望給新手一點啟發(fā)。 補充說明一下: 1、真想學(xué)破解,建議先在自己的電腦上安裝一個虛擬機,在虛擬機上進行破解練習(xí),尤其是想練手一些商業(yè)軟件,避免被格盤、藍屏、安裝木馬等,別怨軟件作者,畢竟是你在別人沒有同意的情況下動了人家的身子,算是懲罰。 2、以上說的是所有軟件的通用破解方法,但是對于不同語言編寫的軟件還有破解的不同捷徑,所以你還要學(xué)習(xí)一下不同語言的破解小妙招。 對于易語言程序,可以使用文本比較通殺命令(test edx,3)、窗口置換(push 10001)、按鈕事件(FF55FC5F5E)、易語言分析插件(E-Debug.dll、EWND.dll)等方法。 對于DELPHI程序,可以使用按鈕事件特征碼(740E8BD38B83????????FF93????????)、DarkDe分析工具。 對于VB程序,可以使用按鈕事件特征碼(816C24)、VBDecompiler分析工具。當(dāng)然VB的API函數(shù)有特殊的書寫方式,比如彈出對話框,用的命令是rtcMsgBox,而不是其他語言常用的MessageBox。所以對于VB的程序要注意API函數(shù)的特殊性。 對于VC程序,可以使用按鈕事件特征碼(sub eax,0a),要注意的是和MFC編寫的程序有點區(qū)別。 3、如果你學(xué)了一段時間后,發(fā)現(xiàn)還是有很多軟件破不了,千萬別灰心,因為太正常了,要記住編寫軟件的作者也不是笨蛋,尤其是商業(yè)軟件,一定是陷阱重重的,如果一個破解新手都能輕易破解了,人家還混個啥? 所以說學(xué)習(xí)是無止境的。你在學(xué)習(xí)如何破解軟件,人家也在學(xué)習(xí)如何防破解軟件,樂趣就在于相互之間的不斷對抗和技術(shù)提升。 再多說一句話,“學(xué)習(xí)逆向破解的目的不是黑別人的軟件,而是要提升軟件的保護能力”。 閱讀原文:原文鏈接 該文章在 2025/4/3 18:32:22 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |