天天看點

[轉載]談軟體的破解與保護

目前中國軟體業所面臨的迫切問題。目前絕大多數軟體都采取了加密技術來應對,本文分析了軟體破解中幾個重要的專業術語和常見的軟體破解方法,并具體介紹了軟加密和硬加密技術。

關鍵詞:知識産權,軟體加密,軟體破解

1、引言 

    開發軟體時,尤其當用到商業用途時,注冊碼和激活碼是非常重要的,未注冊的使用者會加上某些限制,如使用天數,延遲,未注冊畫面等等。但是現在的軟體破解技術十分強大,各種國内外大型軟體都有注冊機制,卻同時也不斷地被破解,國家一再加大力度,打擊非法軟體出版物,扶持正版軟體,但實際效果并不理想。大多的軟體商選擇了購買加密産品或者加密技術來保護自己的軟體,軟體保護一般分為軟加密和硬加密。 

2、常見的軟體破解方法 

也可見後面連結:http://tech.sina.com.cn/s/s/2006-06-23/061020983.shtml

    首先我們來了解一下破解中幾個重要的專業術語。 

    (1)斷點,所謂斷點就是程式被中斷的地方,中斷就是由于有特殊事件發生,計算機暫停目前的任務,轉而去執行另外的任務,然後再傳回原先的任務繼續執行。解密的過程就是等到程式去擷取我們輸人的注冊碼并準備和正确的注冊碼相比較的時候将它中斷下來,然後我們通過分析程式,找到正确的注冊碼。 

    (2)領空,所謂程式的領空,就是程式自己的領土地盤,也就是我們要破解的程式自己程式碼所處的位置。每個程式的編寫都沒有固定的模式,是以我們要在想要切人程式的時候中斷程式,就必須不依賴具體的程式設定斷點,也就是我們設定的斷點應該是每個程式都會用到的東西。 

    (3)API,即Application Programming Interface的簡寫,我們叫應用程式程式設計接口,是一個系統定義函數的大集合,它提供了通路作業系統特征的方法。API包含了幾百個應用程式調用的函數,這些函數執行所有必須的與作業系統相關的操作,如記憶體配置設定、向螢幕輸出和建立視窗等,WINDOWS程式以API為基礎來實作和系統打交道。無論什麼樣的應用程式,其底層最終都是通過調用各種API函數來實作各種功能的。 

    了解了以上三個專業術語後,我們看下基本的軟體破解方法。 

    2.1 暴力破解法。這是最常見的也是最簡單的破解方法,破解者直接利用編輯工具<例如ULTRAEDIT-32>對可執行檔案進行修改,也就是說通過修改可屬性程式的源檔案來達到破解目的。某些元件在驗證使用者注冊資訊和注冊碼時候,如果使用者輸人的資訊與軟體通過的算法生成的注冊碼相等,程式就會注冊成功,否則就會注冊失敗。 

    2.2 利用算法注冊機。算法注冊機是要在分析了軟體的注冊碼算法的基礎上,制作出來的一種可以自動生成軟體注冊碼的程式。是以軟體的算法很重要,一般軟體作者自己也編寫,友善軟體的銷售使用。這類軟體加密的特點是一個注冊碼隻能在一台電腦上使用,像和電腦進行了一對一的綁定。使用步驟是首先運作試用的軟體,得到本台機器的軟體機器碼,再用算法注冊機算号注冊,然後用算法注冊機直接算出合适的注冊碼,最後用算出來的注冊碼直接注冊。 

    2.3 利用記憶體破解。我們知道所有正在運作的程式的資料,全部都要加載到記憶體中去,軟體在進行注冊碼認證的時候會有個比較的過程,是以我們隻須知道所要破解軟體的注冊碼的記憶體位址,就達到目的了。這種方法的優點是無須花大力氣掌握軟體注冊碼的算法,非常節省編寫記憶體注冊機的時間。步驟是先加載記憶體注冊機,再通過它去獲得記憶體中軟體的真實注冊碼,或修改記憶體中軟體相關的某些資料,來達到破解軟體的目的。主要有2種方式,第一種直接從記憶體中得到注冊碼,第二種在記憶體中模拟已注冊程式的運作環境。 

    2.4 更新檔破解法和檔案注冊法。更新檔破解法是指用相關的更新檔程式來修改軟體,以達到破解軟體的目的。此方法一般是破解軟體的驗證注冊碼或時間,基本上都是修改原程式的判斷語句。比如程式試用期是一個月,就可以把這個修改掉,來達到無限使用的目的。檔案注冊法就是把軟體的注冊内容放到一個檔案裡,以友善自己或别人用它來注冊,主要有系統資料庫導人和注冊檔案導人兩種方式。 

3、常見的軟體保護方法 

    3.1注冊碼。軟體的注冊碼一般都是一機一個,不能重複。下面我們來看看如何實作的。 

    第一步根據硬碟卷标和CPU序列号,生成機器碼,首先編寫public static string GetDiskVolumeSerialNum-ber()函數取得裝置硬碟的卷标号,其次編寫public static string getCpu()函數獲得CPU的序列号,最後生成機器碼,函數如下: 

    String Number; String public static string getsoftNum() 

{strNum-=getCpu+GetDiskVolumeSerial-strsoftNum=strNum.Substring(0, 24);//從生成的字元串中取出前24個字元做為機器碼return strsoftNum; } 

    第二步根據機器碼生成注冊碼,需要編寫public static string getRegistNum()函數來實作。 

第三步。檢查注冊狀況,若沒有注冊,可自定義試用天數,延遲,未注冊畫面等等,可編寫private void CheckRegist0 Cpl數來實作。 

    3.2軟加密。所謂軟加密就是不依靠特别硬體來實作的對軟體的保護技術。目前國際上比較通用的軟體都采取軟加密的方式,例如微軟的windows系統、防毒軟體等,它的最大優勢在于極低的加密成本。目前主要有密碼法、計算機硬體校驗法、鑰匙盤法等。目前比較流行的是使用外殼,外殼分為壓縮殼和加密殼,其中壓縮殼的保護性比較弱,是以一般采用加密殼,其原理是利用堆棧平衡原理,修改程式人口處代碼,使其跳轉到殼代碼執行解密程式,将原程式代碼解密後跳回原程式的OEP繼續執行。目前比較強的加密殼采用的是動态解密代碼、SMC , IAT加密技術,程式在運作過程中動态解密代碼,執行完畢後立刻删除,并且對IAT加密,當需要調用API時用解密算法算出API的實際位址來調用,更有甚者,殼裡有殼。目前常見的比較強的5大殼有:

( 1 ) EncryptPE,其特點是對IAT加密比較強,

( 2 ) ASProtect,其特點是采用多層SEH,很容易把人轉暈,

( 3 ) ACProtect,其特點是采用stolen code的辦法,

( 4 ) Armadillo,其特點是雙程序互相檢測,(5)themida,其特點是采用虛拟機技術。好的加密效果在于讓盜版者在破解被保護的軟體時,付出巨大的代價,耗費極大的時間精力,最終被迫放棄攻擊。 

    3.3硬加密。硬加密就是我們所說的加密狗或加密鎖,是一種插在計算機USB口或并口上的軟硬體結合的加密産品,目前絕大部分都是USB口形式,是基于硬體保護技術,其目的是通過對軟體與資料的保護防止知識産權被非法使用,是保證高檔軟體在市場生命周期中免受盜版侵害的功能強大的工具。加密狗一般都有幾十或幾百位元組的非易失性存儲空間可供讀寫,現在較新的狗内部還包含了單片機。軟體開發者可以通過接口函數和軟體狗進行資料交換,來檢查軟體狗是否插在接口上。加密狗内置的單片機裡包含有專用于加密的算法軟體,該軟體被寫人單片機後,就不能再被讀出。這樣,就保證了加密狗硬體不能被複制。同時,加密算法是不可預知、不可逆的。加密算法可以把一個數字或字元變換成一個整數,如DConvert (6)=67876,DConvert(X)=34567 0 

4、結束語 

    軟體破解和軟體加密就是矛和盾的關系,好的加密效果在于讓盜版者在破解被保護的軟體時,付出巨大的代價,耗費極大的時間精力,最終被迫放棄攻擊。最後我們要認識到軟體破解是不道德的,是違法《計算機軟體保護條例》的,現如今軟體的大衆化、市場化,低價化,也讓我們有機會有能力去使用正版軟體,是以我們要提高覺悟,力所能及的不使用盜版,以實際行動支援中國的軟體行業發展。

繼續閱讀