ava代碼很容易被反編譯,以下使用proguard來保護我們的代碼
成都創新互聯是一家以成都網站建設、網頁設計、品牌設計、軟件運維、成都網站營銷、小程序App開發等移動開發為一體互聯網公司。已累計為混凝土攪拌站等眾行業中小客戶提供優質的互聯網建站和軟件開發服務。
proguard選項很多,容易迷糊,現在就把我的配置寫下來(實際使用中),以供參考
1.到下載proguard
2.準備好你的jar包,我在這里舉例叫做test.jar。
3.解壓proguard,執行 bin目錄下的proguardgui.bat。
如圖1
4.運行如圖,點擊左邊“input/output” 菜單,如圖2
5.點擊右邊的“add input” 加入我們要混的jar包,test.jar
點擊右邊的“add output” 填入我們要輸出的jar包(命名隨便),這里我寫 test_out.jar。
注意輸出的jar包,要自己手工填寫。
6.添加支持庫,下邊的 “Library jars,wars,ears .....” 那個框框。
點擊右邊的“add”。
說明一下,這里最好把你的myeclipse里java project里的libraries所有Library的jar包,copy到一個目錄,然后在這里加入這些jar包,myeclipse的環境支持jar包一般,如圖3
7.做完以上步驟后,應該如下圖4,這樣就差不多了
8.點擊“shrinking” ,設置成如圖5。(可根據需要設置,這里只是我的配置)
9.點擊“obfuscation” ,設置如圖6。(可根據需要設置,這里只是我的配置)
10.點擊“optimization” 設置如圖7。(可根據需要設置,這里只是我的配置)
11.點擊“process”,再點擊“save configuration”,在彈出的對話框中,輸入要保存的配置文件名稱(這里我的是test.pro),最后點擊“保存”。如圖8
至些圖形化的設置部分已經完成。
12.最后,添加要保留的類與方法。
用編輯器編輯剛才保存下來的“test.pro”,用記事本什么都可以,打開后大致應該是以下的樣子
-injars test.jar
-outjars test_out.jar
-libraryjars 'C:\Program Files (x86)\Java\jdk1.6.0_10\jre\lib\rt.jar'
-libraryjars lib\ant.jar
-libraryjars lib\aopalliance-1.0.jar
-libraryjars lib\commons-dbcp-1.4.jar
-libraryjars lib\commons-fileupload-1.2.1.jar
-libraryjars lib\commons-io-1.4.jar
.....設置的支持庫包,略
-dontskipnonpubliclibraryclassmembers
-dontshrink
-useuniqueclassmembernames
-keeppackagenames
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod
-keepparameternames
-ignorewarnings
....我們在這里加入要保持的類和方法,寫法如下,紅色部分是我們加的
-keep class org.bl.soa.components.constant.* {
public fields;
public methods;
*** set*(***);
*** get*();
}
-keep class org.bl.hibernate.* {
public fields;
public methods;
*** set*(***);
*** get*();
}
.....繼續加其他的要保留的類和方法,有多少寫多少。我是把test.jar里的所有類都加進來。
....后面還一些自動生成的配置,不用管它們。
....略
13.寫完后,保存。
重新打開progrard,執行 bin目錄下的proguardgui.bat。
點擊第一個選項“Proguard”,再點擊“Load configuration”,選擇我們剛才保存的“test.pro”進行加載。
如下圖
14.開始混代碼,點擊右邊“process”,再點擊“process!”,如下圖
15,在等待處理完成后,輸出的“test_out.jar”,就是混過的jar包,你可以用xjad反編看下效果。
16,如果在處理過程中有問題,一般會有提示,大部分一般都是缺少關聯類,如果少了相關類,在第7步的圖,把缺少的支持包加進來就可以了。
附上出處鏈接:
Jocky的下載和配置
OperaMasks上的下載鏈接已經失效,請移步CSDN自行搜索下載
1、下載完成后解壓得到名為org.apusic.jocky_1.0.3的文件夾,把這個文件夾放到eclipse根目錄的plugins文件夾下(myeclipse和eclipse同理)。
2、重啟eclipse,右鍵一個工程文件,出現Jocky選項說明OK。
3、一般是先進行設置-Jocky Settings,然后進行Jocky Now!。以下是settings界面
Enable Jocky多選框選中
Jocky build file是在項目創建一個xml文件,根據里面的配置進行混淆
Scramble level是進行混淆的代碼等級,有none、private、package、protected、public、all,將根據設置對java文件中的相應修飾符修飾的方法代碼進行混淆
Target VM是java虛擬機的版本,有1.4和1.5,一般選擇1.5
Output directory是輸出文件夾,在項目根目錄下
點擊確認會自動根據項目的設置生成xml文件
4、jocky_build.xml,實際上是一個ant build文件,由系統自動生成,有幾處需要說明
pathelement location="bin"/ pathelement location="XXX.jar"/這類標簽代表項目編譯所需的jar包,由于是自動生成一般不用理睬,如果出現找不到相關的package之類的報錯,那么有可能是location路徑有問題。如果你安裝系統時是用戶名設置成了中文名,并且使用了maven,maven的jar包的下載路徑設置成了默認${user}/.m2/repository/,那么jocky這里的路徑會出現問題,中文名的用戶名會亂碼或者消失,請修改maven配置xml文件修改下載路徑localRepository[自己指定的路徑]/localRepository 。
javac destdir="${jocky.output.dir}/bin" target="${target}" encoding="UTF-8" 代碼中如果有中文名,必須手動設定編碼,默認是沒有的。
src path="src"/ 設定源文件的目錄,因為有時候我們只想輸出src目錄下的部分包而不是全部。
混淆的工具很多,最常用的為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字符串混淆
URL標題:http://vcdvsql.cn/article10/hspsgo.html
成都網站建設公司_創新互聯,為您提供網站內鏈、全網營銷推廣、App設計、、面包屑導航、外貿網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯