java代碼反混套件 java代碼混淆,防止反編譯

怎么防止Java開發(fā)出來的程序被別人反編譯

防止Java開發(fā)出來的程序被別人反編譯有很多種方法,下面給你介紹幾種:

成都創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、漳平網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)、商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為漳平等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

1、隔離Java程序

最簡單的方法就是讓用戶不能夠訪問到Java Class程序,這種方法是最根本的方法,具體實現(xiàn)有多種方式。例如,開發(fā)人員可以將關(guān)鍵的Java Class放在服務(wù)器端,客戶端通過訪問服務(wù)器的相關(guān)接口來獲得服務(wù),而不是直接訪問Class文件。這樣黑客就沒有辦法反編譯Class文件。目前,通過接口提供服務(wù)的標(biāo)準(zhǔn)和協(xié)議也越來越多,例如 HTTP、Web Service、RPC等。但是有很多應(yīng)用都不適合這種保護(hù)方式,例如對于單機(jī)運(yùn)行的程序就無法隔離Java程序。

2、對Class文件進(jìn)行加密

為了防止Class文件被直接反編譯,許多開發(fā)人員將一些關(guān)鍵的Class文件進(jìn)行加密,例如對注冊碼、序列號管理相關(guān)的類等。在使用這些被加密的類之前,程序首先需要對這些類進(jìn)行解密,而后再將這些類裝載到JVM當(dāng)中。這些類的解密可以由硬件完成,也可以使用軟件完成。

3、轉(zhuǎn)換成本地代碼

將程序轉(zhuǎn)換成本地代碼也是一種防止反編譯的有效方法。因為本地代碼往往難以被反編譯。開發(fā)人員可以選擇將整個應(yīng)用程序轉(zhuǎn)換成本地代碼,也可以選擇關(guān)鍵模塊轉(zhuǎn)換。如果僅僅轉(zhuǎn)換關(guān)鍵部分模塊,Java程序在使用這些模塊時,需要使用JNI技術(shù)進(jìn)行調(diào)用。

4、代碼混淆

代碼混淆是對Class文件進(jìn)行重新組織和處理,使得處理后的代碼與處理前代碼完成相同的功能(語義)。但是混淆后的代碼很難被反編譯,即反編譯后得出的代碼是非常難懂、晦澀的,因此反編譯人員很難得出程序的真正語義。從理論上來說,黑客如果有足夠的時間,被混淆的代碼仍然可能被破解,甚至目前有些人正在研制反混淆的工具。但是從實際情況來看,由于混淆技術(shù)的多元化發(fā)展,混淆理論的成熟,經(jīng)過混淆的Java代碼還是能夠很好地防止反編譯。

不同保護(hù)技術(shù)比較希望能給大家?guī)韰⒖迹?/p>

JAVA反編譯軟件

由于JAVA語言安全性高、代碼優(yōu)化、跨平臺等特性,從1995年5月由SUN公司發(fā)布后,迅速取代了很多傳統(tǒng)高級語言,占據(jù)了企業(yè)級網(wǎng)絡(luò)應(yīng)用開發(fā)等諸多領(lǐng)域的霸主地位。

不過,JAVA最突出的跨平臺優(yōu)勢使得它不能被編譯成本地代碼,而要以中間代碼的形式運(yùn)行在虛擬機(jī)環(huán)境中,這使得JAVA的反編譯要比別的高級語言容易實現(xiàn),并且反編譯的代碼經(jīng)過優(yōu)化后幾乎可以與源代碼相媲美。

為了更好地保護(hù)知識產(chǎn)權(quán),避免本公司的智力成果輕易被人竊取,開發(fā)者有必要對反編譯工具深入了解,以便有針對性地采取保護(hù)措施。

目前,比較流行的JAVA反編譯工具有近30種,其中有三款堪稱精品:

一、 應(yīng)用廣泛的JAD

在眾多的JAVA反編譯工具中,有幾種非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和國產(chǎn)的JAVA源代碼反編譯專家。

JAD本身是一個命令行工具,沒有圖形界面,上述的這些工具大多是在JAD內(nèi)核的基礎(chǔ)之上加了一個圖形界面而已。這么多種產(chǎn)品的共同選擇,足可證明JAD在JAVA反編譯領(lǐng)域中的尊貴地位。

JAD是使用Microsoft Visual C++開發(fā)的,運(yùn)行速度非???,可以處理很復(fù)雜的JAVA編譯文件。眾多的參數(shù)使JAD可以靈活應(yīng)付多種加密手段,令反編譯的代碼更加優(yōu)化和易讀。由于JAD參數(shù)太多,沒必要一一解釋,其中有幾個最常用的如下(以JAD 1.5.8f版本為例):

-d

- 用于指定輸出文件的目錄

-s - 輸出文件擴(kuò)展名(默認(rèn)為: .jad),通常都會把輸出文件擴(kuò)展名直接指定為.java,以方便修改的重新編譯。

-8 - 將Unicode字符轉(zhuǎn)換為ANSI字符串,如果輸出字符串是中文的話一定要加上這個參數(shù)才能正確顯示。

最常用的反編譯指令如下所示:

Jad –d c:\javasource –s .java -8 javatest.class

這條指令將當(dāng)前目錄下的javatest.class反編譯為javatest.java并保存在c:\javasource目錄里,其中的提示輸出為中文,而不是Unicode代碼。

二、 源碼開放的JODE

JODE是全球最大的開源項目網(wǎng)站Sourceforge.net的成員,在所有的JAVA反編譯器中,JODE的反編譯效果是最好的,尤其是對付一些常見的加密手段,例如混淆技術(shù)等,更是出類拔粹。

JODE本身也是純JAVA開發(fā)的,最近越來越多的JAVA反編譯軟件也選擇JODE來做它們的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit’s JavaInsight plugin等。

JODE是一個可運(yùn)行的JAR文件,在windows環(huán)境下雙擊即可運(yùn)行。

需要特別說明的是,JODE不是通過常規(guī)的Open-File的方式來加載JAVA編譯后的類文件(*.class)或是類包(*.jar)的, 而是通過在Options菜單中的Set Classpath來實現(xiàn)的,單獨的類文件可以將它的上一級目錄作為Classpath輸入,然后再選擇Reload Classpath即可。

新加入的類包或是類的名字會在左側(cè)窗口出現(xiàn),雙擊類包名可以展開目錄樹結(jié)構(gòu),雙擊需要反編譯的類名則在右上角的窗口中直接顯示反編譯后的源代碼。

三、 獨樹一幟的DAVA

DAVA不是一個獨立的JAVA反編譯器,而是JAVA代碼優(yōu)化工具Soot的一部分。Soot和JODE一樣是純JAVA開發(fā)的,也是一個獨立的JAR包,但卻不能通過雙擊直接運(yùn)行,而是象JAD一樣在命令行狀態(tài)運(yùn)行。

Soot對環(huán)境變量的配置要求非常嚴(yán)格,通常情況下要對CLASSPATH做如下設(shè)置:

Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;

其中的c:\sootdir\是下載的soot類包放置的路徑,CLASSPATH末尾的.;代表了當(dāng)前目錄,如果不加上這個的話Soot經(jīng)常會報一個找不到類的錯誤。

DAVA是作為Soot的一個參數(shù)使用的,通常的用法如下:

Java soot.Main –f dava –d c:\javasource javatest

注意最后的類名不用帶.class后綴,因為它默認(rèn)是處理class文件,這個操作與前述的JAD的參數(shù)效果相同。

DAVA采取了流程優(yōu)化的方式進(jìn)行反編譯,與傳統(tǒng)反編譯思路不盡相同,但卻對改變流程類的加密方法有獨特的反編譯效果。

上述的三種工具各有千秋,但效果都非常不錯。經(jīng)測試,它們基本上都可以把JDK自帶的一些例程完全反編譯,然后不加任何修改可再編譯成功,并能正常運(yùn)行!

幾種java反編譯軟件的安裝以及使用總結(jié)

下面是在網(wǎng)上找的幾種反編譯軟件的安裝以及使用:

一、JD-JUI

官網(wǎng)下載鏈接:

下載之后解壓,

點擊“jd-gui.exe”運(yùn)行:

直接將".jar"文件拖入進(jìn)去即可查看里邊的“.class”文件,如上圖所示。

二:Luyten

官網(wǎng)下載鏈接:

點擊“l(fā)uyten-0.5.3.exe”下載,下載之后點擊運(yùn)行,運(yùn)行后的界面如圖所示,同樣也是講“.jar”文件拖入進(jìn)入即可。

三、在eclipse中安裝反編譯工具

準(zhǔn)備工作:

“jad.exe”下載:

“net.sf.jadclipse_3.3.0.jar”下載:

jad.exe”下載:

“net.sf.jadclipse_3.3.0.jar”下載:

然后將“net.sf.jadclipse_3.3.0.jar”拷貝到eclipse的plugins目錄下,再刪除eclipse的configuration目錄下“org.eclipse.update”文件,這一步很重要!

重啟eclipse,點擊window-Preference-Java,你會發(fā)現(xiàn)里邊多了一個插件“JadClipse”,

選中這個插件,將下圖中紅圈圈的地方的地址填寫為你 “jad.exe”文件的地址

還沒有配置完,先不要close,

點擊General-Editors-File Associations 后,進(jìn)入下邊的界面

設(shè)置.class 文件默認(rèn)打開方式:

設(shè)置.class without source文件的默認(rèn)打開方式,

需要注意的是,“JadClipse Class File Viewer”這個一開始是沒有的,需用添加,如下圖所示:

接下來在eclipse中查看反編譯后的代碼:(這種方法可能不合適,但是能夠查看)

新建一個EJB project,右鍵“import”,選中"EJB JAR file",導(dǎo)入你的jar包,F(xiàn)inish

在項目下找你要查看的反編譯的文件即可,如果你遇到了下邊的這種情況

關(guān)閉這個文件后再次打開,就可以查看了(我的是這樣,所以我感覺這個方法不太好,但別的方法又不知道怎么查看):

有錯誤或者有更好的方法,希望大家在下邊留言指出

JAVA 有對源代碼進(jìn)行混淆的混淆器么

不需要對源代碼混淆。class有這種功能的,在J2ME中混淆是必須的,結(jié)果跟你說的一樣,不過原理不是你那么走的,混淆以后的class反編譯也會讓人看不懂,全部變成了a,b,c,d這樣的名字。

文章題目:java代碼反混套件 java代碼混淆,防止反編譯
鏈接分享:http://muchs.cn/article8/dohdsop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT移動網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)建站網(wǎng)站維護(hù)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計