不需要對源代碼混淆。class有這種功能的,在J2ME中混淆是必須的,結果跟你說的一樣,不過原理不是你那么走的,混淆以后的class反編譯也會讓人看不懂,全部變成了a,b,c,d這樣的名字。
創(chuàng)新互聯(lián)公司專注于潮州網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供潮州營銷型網(wǎng)站建設,潮州網(wǎng)站制作、潮州網(wǎng)頁設計、潮州網(wǎng)站官網(wǎng)定制、微信小程序服務,打造潮州網(wǎng)絡公司原創(chuàng)品牌,更為您提供潮州網(wǎng)站排名全網(wǎng)營銷落地服務。
混淆的工具很多,最常用的為retroguard.
Java 代碼編譯后生成的 .class 中包含有源代碼中的所有信息(不包括注釋),尤其是在其中保存有調(diào)試信息的時候。所以一個按照正常方式編譯的 Java .class 文件可以非常輕易地被反編譯。反編譯工具有很多種,其中非常強大的一種是 jad。
為了避免出現(xiàn)這種情況,保護開發(fā)者的勞動,又有一種叫做 Java 混淆器的工具被開發(fā)出來。Java 混淆器的作用是對編譯好的代碼進行混淆,使得其無法被反編譯或者反編譯后的代碼混亂難懂。Java 混淆器也有很多種,其中比較強大的一種是 RetroGuard(只說比較強大是因為我對其功效還是有些懷疑的)。
這里我介紹一下 RetroGuard 的使用方法。
將下載的 .tar.gz 或者 .zip 文件解壓。有用的只有 retroguard.jar 一個文件,其它的是源代碼和文檔。
RetroGuard 是針對 jar 文件做混淆的。使用之前需要先配置一下??梢允止ぞ庉嬇渲梦募?,更好的方法是使用 RetroGuard 提供的 GUI 工具來生成配置文件。使用方法如下:
java -classpath retroguard.jar;xxx.jar;yyy.zip;... RGgui
然后在 GUI 的 Wizard 中設置各個參數(shù)。上面的 -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 的內(nèi)容代表了整個包對外表現(xiàn)的接口。若某個內(nèi)容不想為外界訪問,就不應該設置為 public 的。
2、若包中某個類使用了 java.lang.Class 或者 java.lang.ClassLoader 中的某個方法加載了一個類,若這個類在包外,不需要特別處理;若這個類在包內(nèi),則需要保留這個類的類名,否則混淆后會找不到這個類。
3、在包中的所有調(diào)試信息(源文件名、行號、變量/參數(shù)信息等等)應全部刪除。
混淆代碼 是為了防止class文件被反編譯用的 但是程序的功能還是正常的 和你正常運行一樣
如果連變量名都混淆了,就是說所有有具體意義的英文變量名都用a,b,c,x,y等等來表示,那這是不可能還原的,因為電腦也不可能知道你這個a實際上代表了你的年齡而那個c代表了你老婆的胸圍!
但如果只是個事混淆,那網(wǎng)上倒有不少工具可以格式化源代碼!自己搜一搜吧!推薦一款編輯器,IntelliJ,很不錯,值得一提的是,我用過的眾多編輯器中,這款編輯器的代碼格式化功能最強大!
一般走代碼混淆就是為了保護源代碼,讓別人不至于通過反編譯輕易的獲得源代碼