十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
不需要對(duì)源代碼混淆。class有這種功能的,在J2ME中混淆是必須的,結(jié)果跟你說的一樣,不過原理不是你那么走的,混淆以后的class反編譯也會(huì)讓人看不懂,全部變成了a,b,c,d這樣的名字。
10年積累的成都網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有港北免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
光混淆java代碼還不夠嗎?xml就讓它明碼放那里好了。或者用annotation來配置依賴關(guān)系,這樣xml少很多。
一、java web項(xiàng)目混淆
proguard4.8工具,說是支持war的,可混淆過后少了classes目錄了,自然成功不了。網(wǎng)上搜的過程不詳說了,最后找著--“J2EE-web工程ProGuard代碼混淆07_28”,網(wǎng)址:
根據(jù)提示一步步完成。
把web項(xiàng)目打成jar包后用proguard進(jìn)行混淆,然后把混淆過后的class目錄替換發(fā)布包war中的對(duì)應(yīng)目錄,啟動(dòng)運(yùn)行是正常的。
主要注意利用proguard生成xxx.pro文件,然后手動(dòng)加工-keep class WebRoot.WEB-INFO.lib.* 等項(xiàng)目中不需要混淆的包和類。
二、java web項(xiàng)目打成.exe
沒找到免費(fèi)的,這搜到個(gè)收費(fèi)的--Jinstall,試了下功能挺好,
可以加密、集成jdk、tomcat,如果數(shù)據(jù)庫是mysql也集成,其他數(shù)據(jù)庫的話要設(shè)置數(shù)據(jù)庫的url.
Jocky的下載和配置
OperaMasks上的下載鏈接已經(jīng)失效,請(qǐng)移步CSDN自行搜索下載
1、下載完成后解壓得到名為org.apusic.jocky_1.0.3的文件夾,把這個(gè)文件夾放到eclipse根目錄的plugins文件夾下(myeclipse和eclipse同理)。
2、重啟eclipse,右鍵一個(gè)工程文件,出現(xiàn)Jocky選項(xiàng)說明OK。
3、一般是先進(jìn)行設(shè)置-Jocky Settings,然后進(jìn)行Jocky Now!。以下是settings界面
Enable Jocky多選框選中
Jocky build file是在項(xiàng)目創(chuàng)建一個(gè)xml文件,根據(jù)里面的配置進(jìn)行混淆
Scramble level是進(jìn)行混淆的代碼等級(jí),有none、private、package、protected、public、all,將根據(jù)設(shè)置對(duì)java文件中的相應(yīng)修飾符修飾的方法代碼進(jìn)行混淆
Target VM是java虛擬機(jī)的版本,有1.4和1.5,一般選擇1.5
Output directory是輸出文件夾,在項(xiàng)目根目錄下
點(diǎn)擊確認(rèn)會(huì)自動(dòng)根據(jù)項(xiàng)目的設(shè)置生成xml文件
4、jocky_build.xml,實(shí)際上是一個(gè)ant build文件,由系統(tǒng)自動(dòng)生成,有幾處需要說明
pathelement location="bin"/ pathelement location="XXX.jar"/這類標(biāo)簽代表項(xiàng)目編譯所需的jar包,由于是自動(dòng)生成一般不用理睬,如果出現(xiàn)找不到相關(guān)的package之類的報(bào)錯(cuò),那么有可能是location路徑有問題。如果你安裝系統(tǒng)時(shí)是用戶名設(shè)置成了中文名,并且使用了maven,maven的jar包的下載路徑設(shè)置成了默認(rèn)${user}/.m2/repository/,那么jocky這里的路徑會(huì)出現(xiàn)問題,中文名的用戶名會(huì)亂碼或者消失,請(qǐng)修改maven配置xml文件修改下載路徑localRepository[自己指定的路徑]/localRepository 。
javac destdir="${jocky.output.dir}/bin" target="${target}" encoding="UTF-8" 代碼中如果有中文名,必須手動(dòng)設(shè)定編碼,默認(rèn)是沒有的。
src path="src"/ 設(shè)定源文件的目錄,因?yàn)橛袝r(shí)候我們只想輸出src目錄下的部分包而不是全部。
混淆的工具很多,最常用的為retroguard.
Java 代碼編譯后生成的 .class 中包含有源代碼中的所有信息(不包括注釋),尤其是在其中保存有調(diào)試信息的時(shí)候。所以一個(gè)按照正常方式編譯的 Java .class 文件可以非常輕易地被反編譯。反編譯工具有很多種,其中非常強(qiáng)大的一種是 jad。
為了避免出現(xiàn)這種情況,保護(hù)開發(fā)者的勞動(dòng),又有一種叫做 Java 混淆器的工具被開發(fā)出來。Java 混淆器的作用是對(duì)編譯好的代碼進(jìn)行混淆,使得其無法被反編譯或者反編譯后的代碼混亂難懂。Java 混淆器也有很多種,其中比較強(qiáng)大的一種是 RetroGuard(只說比較強(qiáng)大是因?yàn)槲覍?duì)其功效還是有些懷疑的)。
這里我介紹一下 RetroGuard 的使用方法。
將下載的 .tar.gz 或者 .zip 文件解壓。有用的只有 retroguard.jar 一個(gè)文件,其它的是源代碼和文檔。
RetroGuard 是針對(duì) jar 文件做混淆的。使用之前需要先配置一下??梢允止ぞ庉嬇渲梦募?,更好的方法是使用 RetroGuard 提供的 GUI 工具來生成配置文件。使用方法如下:
java -classpath retroguard.jar;xxx.jar;yyy.zip;... RGgui
然后在 GUI 的 Wizard 中設(shè)置各個(gè)參數(shù)。上面的 -classpath 中應(yīng)該列出要混淆的 jar 所依賴的所有的包。
RGgui 的詳細(xì)使用方法可以看 RetroGuard 的文檔 docs.html。
配置文件生成后,就可以運(yùn)行 RetroGuard 進(jìn)行混淆了。使用方法如下:
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。
在生成配置文件時(shí)需要注意的是:
1、所有 public 的類名、方法名、變量名應(yīng)該全部保留。因?yàn)樗性O(shè)置為 public 的內(nèi)容代表了整個(gè)包對(duì)外表現(xiàn)的接口。若某個(gè)內(nèi)容不想為外界訪問,就不應(yīng)該設(shè)置為 public 的。
2、若包中某個(gè)類使用了 java.lang.Class 或者 java.lang.ClassLoader 中的某個(gè)方法加載了一個(gè)類,若這個(gè)類在包外,不需要特別處理;若這個(gè)類在包內(nèi),則需要保留這個(gè)類的類名,否則混淆后會(huì)找不到這個(gè)類。
3、在包中的所有調(diào)試信息(源文件名、行號(hào)、變量/參數(shù)信息等等)應(yīng)全部刪除。