導航:首頁 > 編程語言 > 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混淆編譯相關的資料

熱點內容
傳票翻打在電腦上下什麼app 瀏覽:39
db2查看資料庫字元集 瀏覽:449
小米私密文件移出後找不到 瀏覽:775
紅底白色的心是什麼app的標志 瀏覽:163
小冤家APP角色怎麼變回家長 瀏覽:822
夢幻西遊合寵模擬器網站是什麼 瀏覽:420
諾基亞930最新版本 瀏覽:201
ps製作主kv文件過大 瀏覽:884
車端面如何編程 瀏覽:279
win10u盤備份時間長 瀏覽:617
文件夾怎麼轉換為pdf 瀏覽:502
2008打開登錄密碼忘記了 瀏覽:771
蘋果7如何授權應用程序 瀏覽:899
怎樣把舊的文檔保存到桌面文件夾 瀏覽:827
wps雲數據如何恢復 瀏覽:496
微信發送過來文件 瀏覽:300
怎麼改合同網站 瀏覽:73
網路鬥地主記牌器怎麼實現的 瀏覽:377
ps鏡像文件製作教程 瀏覽:45
系統分頁文件大小設置多少 瀏覽:447

友情鏈接