標籤:

破解一款軟體,你需要學習什麼知識

破解一款軟體,你需要學習什麼知識

想要做為一名好的技術人員或者網路安全人員,有一些黑客技術我們必須都要學會的,黑客不全是說危害安全的,重要的是在人的使用,黑客技術給互聯網帶來了巨大的挑戰,但是作為一名黑客或者網路維護人員,我們必須懂得怎麼破解病毒,或者破解他人對社會有危害的軟體,下面就是我們要說破解的技術。

首先,把需要破解軟體的相關 .class 文件反編譯到一個新建目錄下。現在大部分軟體都把編譯後的 .class 文件用 jar 打包。如果是這種情況,找到相應的 .jar 文件,使用 win zip (或其他 zip 工具)把 .jar 文件打開,解壓到一個 temp 目錄下,再進行反編譯。有的軟體使用了許多第三方類庫,安裝目錄下會有很多 jar 文件,如 xerces.jar, log4j.jar, j dom.jar, 等等。這些文件一般都不會含有軟體的註冊確認信息,可以略過。

反編譯後的文件建議使用 .java 後綴名,這樣可以使用你最喜歡的IDE來進行編輯。另外,不管用哪個反編譯器,你應當熟悉如何使用。

2、找出破解入口 一個軟體一般會有成百上千個 .class 文件,我們不可能每一個都研究一下。在這麼多文件中,和註冊有關的文件一般只有幾個,多的也不會超過一打。這一步的目的就是在所有的文件中把和註冊有關的文件分離出來,使我們可以集中精力研究軟體的加解密邏輯。 軟體的註冊方法各不相同,一般不會超過以下幾種可能:輸入序列號或是密匙來註冊。

(如 Alloy look and feel, J shrink),使用 license 文件(如J builder)。有的軟體會跳出一個窗口讓你輸入這些信息(如 J shrink),有的是直接調用某個方法(如 Alloy look and feel)。這些都提示了程序的加密解密的入口。 例如 faceless 的 PDF Lib,

註冊的方法是直接調用方法 PDF.set License Key(String),所以反編譯出來的 PDF.java 就是破解的入口。如果軟體運行時跳出一個對話框來輸入註冊碼,就應該先找出顯示這個對話框的類作為入口。如果是使用註冊文件,就應當試著找出讀取這個註冊文件的代碼作為入口。 還有一個常用的方法是在所有反編譯出的代碼中搜索某個字串,如「license」。

3、研究認證代碼 從第二步找出的入口入手,我們可以通過研究反編譯出的源代碼一步步找出軟體的認證邏輯。比如輸入的序列號是如何被處理和比較的,這個過程用了那些加密解密的類等等。不同的軟體使用不同的方法,沒有一定之規。有的調用 native dll 來進行認證,有的使用 Java 自帶的類。

例如 Alloy Look And Feel,序列號中包括了用戶的 email 地址一些隨機字串,以及相應的 CRC 值。確認序列號的時候,重新計算字串的 CRC 值,再和原來的比較,如果符合就通過。 有的序列號或是認證文件使用了 PKI 進行加密解密。這種加密方法使用私人密匙加密認證信息,在軟體中再使用公開密匙獲得明碼進行確認。

由於私人密匙一般不會被包括在軟體中,所以這種加密方法即使知道了加解密的邏輯也無法生成註冊機。一般只要不是使用這類方法,在研究反編譯的代碼後,都可以自己寫出註冊機來。 很多軟體的註冊認證過程使用了位運算符(bit operator: |, &, ^, and ~)。所以相關的知識是必不可少的。

研究源代碼的過程需要極大的耐心。由於反編譯出的代碼沒有注釋,邏輯一般不很直觀。特別是現在的軟體大部分都使用混淆器混淆過,使的源代碼更加難以理解。可以一邊讀代碼一邊加入自己的注釋。我一般愛使用 IDEA 來讀源程序,當讀懂了某個變數或是方法後,使用IDEA的 re factor 功能把變數或是方法改成有意義的名字,這樣越到後來代碼越容易讀懂。

最後一步就是破解了。一般有兩種方法:自己寫註冊機和修改反編譯代碼來跳過認證的部分。如果可以,我一般喜歡寫一個註冊機,這樣對軟體本身沒有任何影響。可是有的時候只能通過修改源代碼來破解,如上問題到的用PKI加密(Simon Lei 說可以通過公共密匙算出私人密匙,不過我還沒有搞懂具體怎麼做。希望有人能給出具體的指導)的軟體。

以及用 native dll 來確認註冊信息的軟體。 如果是自己寫註冊機,首先要明白認證信息是如何確認的,再把相應的邏輯反過來就是產生認證信息的過程。這部分需要 Java 的編程知識即可。 修改源代碼相對要簡單許多,具體方法如下: 編輯:找出用來確認註冊信息的類,編輯它的反編譯出的類源代碼,把具體的認證邏輯跳過,加入自己的代碼使得認證永遠成功。

注意有時需要設定類變數的值來表示認證通過。 編譯:編譯修改過的代碼,注意要在 class path 中包括軟體的 .class 或是 .jar 文件來使編譯器能找到其他編譯需要的類。 假設原來的 class 文件都放在一個叫 mysoft ware.jar 的文件中,修改的認證類是:License.java,那麼編譯時應該用: java –class path mysoft ware.jar –d c: emp dire License.java 。

重新打包:編譯成功後用把新生成的 .class 文件覆蓋原來的 .class 文件。如果原來的類是在一個 jar 文件中,也要把新的文件覆蓋併入到這個 jar 文件中。

總之, 破解軟體的方法根據軟體認證的方法不同而不同,以上介紹的只是一個基本步驟。 真正破解某個軟體時需要自己動腦筋找到最好的方法。一個軟體的保護機制象是一條鏈,由許多環組成的。破解時只要找出這些環中最弱的一環加以攻擊,不需要浪費力氣在其他環上。比如 Scott Lai 兄的 J builder 註冊機就是在仔細解讀 Bor land 加密機制後,利用其原有的代碼來生成註冊文件。希望對大家學習一些技術有用。

我們樂意在廣交四方好友,如有好的建議請聯繫深圳大銀猿軟體科技。

m?????


推薦閱讀:

為長征五號量身打造的文昌發射中心,究竟有啥不一樣?
MIT2018全球十大突破性技術發布!雲從科技入榜
如果發明了時光機,可能改變過去的事嗎?
聯發科技為什簡稱不叫聯發而叫聯發科?
索尼為什麼不賣電腦了?

TAG:科技 |