又到畢業季了,大家的論文準備的怎么樣了,下文是軟體的破解與保護,一起來看看吧!
1、引言
開發軟體時,尤其當用到商業用途時,註冊碼和激活碼是非常重要的,未註冊的用戶會加上某些限制,如使用天數,延遲,未註冊畫面等等。但是現在的軟體破解技術十分強大,各種國內外大型軟體都有註冊機制,卻同時也不斷地被破解,國家一再加大力度,打擊非法軟體出版物,扶持正版軟體,但實際效果並不理想。大多的軟體商選擇了購買加密產品或者加密技術來保護自己的軟體,軟體保護一般分為軟加密和硬加密。
2、常見的軟體破解方法
首先我們來了解一下破解中幾個重要的專業術語。
(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()函式來實現。