導航:首頁 > 編程語言 > java混淆編譯

java混淆編譯

發布時間:2024-12-30 04:08:03

javaweb項目做混淆的詳細步驟

混淆的工具很多,最常用的為retroguard.
Java 代碼編譯後生成的 .class 中包含有源代碼中的所有信息(不包括注釋),尤其是在其中保存有調試信息的時候。所以一個按照正常方式編譯的 Java .class 文件可以非常輕易地被反編譯。反編譯工具有很多種,其中非常強大的一種是 jad。
為了避免出現這種情況,保護開發者的勞動,又有一種叫做 Java 混淆器的工具被開發出來。Java 混淆器的作用是對編譯好的代碼進行混淆,使得其無法被反編譯或者反編譯後的代碼混亂難懂。Java 混淆器也有很多種,其中比較強大的一種是 RetroGuard(只說比較強大是因為我對其功效還是有些懷疑的)。

這里我介紹一下 RetroGuard 的使用方法。
將下載的 .tar.gz 或者 .zip 文件解壓。有用的只有 retroguard.jar 一個文件,其它的是源代碼和文檔。
RetroGuard 是針對 jar 文件做混淆的。使用之前需要先配置一下。可以手工編輯配置文件,更好的方法是使用 RetroGuard 提供的 GUI 工具來生成配置文件。使用方法如下:
java -classpath retroguard.jar;xxx.jar;yyy.zip;... RGgui
然後在 GUI 的 Wizard 中設置各個參數。上面的 -classpath 中應該列出要混淆的 jar 所依賴的所有的包。
RGgui 的詳細使用方法可以看 RetroGuard 的文檔 docs.html。
配置文件生成後,就可以運行 RetroGuard 進行混淆了。使用方法如下:
java -classpath xxx.jar;yyy.zip;... RetroGuard vvv-unofb.jar vvv.jar vvv.rgs vvv.log
其中 vvv-unofb.jar 是未混淆的 jar 文件,vvv.jar 是混淆後生成的 jar 文件,vvv.rgs 是配置文件,vvv.log 是日誌文件。預設的配置文件名稱為 script.rgs,預設的日誌文件名稱為 retroguard.log。

在生成配置文件時需要注意的是:
1、所有 public 的類名、方法名、變數名應該全部保留。因為所有設置為 public 的內容代表了整個包對外表現的介面。若某個內容不想為外界訪問,就不應該設置為 public 的。
2、若包中某個類使用了 java.lang.Class 或者 java.lang.ClassLoader 中的某個方法載入了一個類,若這個類在包外,不需要特別處理;若這個類在包內,則需要保留這個類的類名,否則混淆後會找不到這個類。
3、在包中的所有調試信息(源文件名、行號、變數/參數信息等等)應全部刪除。

⑵ Java項目源碼為什麼要做代碼混淆

一般走代碼混淆就是為了保護源代碼,讓別人不至於通過反編譯輕易的獲得源代碼

⑶ 如何混淆Java編譯後的類或jar,或將jar編譯成exe,使人無法反編譯獲得源代碼

所謂的將class或者jar打包成exe,其實就是講java的運行環境和自己寫的java類及jar用軟體處理後,在用戶點擊exe文件時,該exe文件會進行java運行環境的安裝和class文件的部署

⑷ javacompile混淆器怎麼混淆後的class文件還是可以被反編譯出來呢求高手指點....

混淆的作用復並不是使制class文件不能被反編譯
混淆的作用是使反編譯的代碼更難讓人閱讀,比如一些計算金錢的敏感邏輯里有如下的代碼(新金額=舊金額*某個倍率):
double newMoney=oldMoney*rate;
如果這樣的代碼直接編譯成class文件,別人反編譯這個class文件就能很清楚的看到金錢的計算關系,混淆後代碼可能就變成這樣的了:
double a=b*c;
這樣的代碼別人即使反編譯了,也是很難看懂其中的邏輯關系的

⑸ java混淆器是做什麼的

用java寫的代碼 編譯後成為.class文件 但是這個class文件可以被反編譯查看到源代碼
如果代碼作者不希望源專代碼被別人看屬到 就利用混淆器把源代碼混淆 但是程序功能還是正常的,編譯後供別人使用,當別人反編譯class文件想查看源代碼時發現的是被混淆後的代碼,雖然這些混淆後的代碼也可以分析出來但是很困難
舉個例子
class Person
{
private String name;
private int age;
public Person( String n, int a ){
name = n;
age = a;
}
}
混淆後
class OOOOo{
private String oooo;
private int ooo;
public OOOOo( String oo, int o){
oooo = oo;
ooo = o;
}
}

⑹ JAVA 有對源代碼進行混淆的混淆器么

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

閱讀全文

與java混淆編譯相關的資料

熱點內容
編程貓怎麼做你畫我猜 瀏覽:567
jsp向servlet傳遞數據 瀏覽:269
桌面出現一個文件夾怎麼刪除 瀏覽:563
山寨iphone5s拆機 瀏覽:303
關閉win7自動升級wi10 瀏覽:100
iphone6圖片編輯軟體 瀏覽:105
核桃編程今年怎麼樣 瀏覽:395
手機怎麼打開dwg文件 瀏覽:505
ps文件建立的兩種方式 瀏覽:934
mfc配置文件管理 瀏覽:640
如何恢復被徹底刪除的文件 瀏覽:327
教程錄制 瀏覽:940
右鍵新建添加word 瀏覽:34
word恢復文件如何打開 瀏覽:103
85版本下級元素結晶 瀏覽:424
添加網路列印機不列印 瀏覽:720
蘋果6s手機字典用不了 瀏覽:962
射手播放器字幕文件夾 瀏覽:60
如何查看cad原文件的字體 瀏覽:260
蘋果平板型號a1395 瀏覽:116

友情鏈接