混淆的工具很多,最常用的為retroguard.
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)香格里拉免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
Java 代碼編譯后生成的 .class 中包含有源代碼中的所有信息(不包括注釋),尤其是在其中保存有調(diào)試信息的時候。所以一個按照正常方式編譯的 Java .class 文件可以非常輕易地被反編譯。反編譯工具有很多種,其中非常強大的一種是 jad。
為了避免出現(xiàn)這種情況,保護(hù)開發(fā)者的勞動,又有一種叫做 Java 混淆器的工具被開發(fā)出來。Java 混淆器的作用是對編譯好的代碼進(jìn)行混淆,使得其無法被反編譯或者反編譯后的代碼混亂難懂。Java 混淆器也有很多種,其中比較強大的一種是 RetroGuard(只說比較強大是因為我對其功效還是有些懷疑的)。
這里我介紹一下 RetroGuard 的使用方法。
將下載的 .tar.gz 或者 .zip 文件解壓。有用的只有 retroguard.jar 一個文件,其它的是源代碼和文檔。
RetroGuard 是針對 jar 文件做混淆的。使用之前需要先配置一下??梢允止ぞ庉嬇渲梦募玫姆椒ㄊ鞘褂?RetroGuard 提供的 GUI 工具來生成配置文件。使用方法如下:
java -classpath retroguard.jar;xxx.jar;yyy.zip;... RGgui
然后在 GUI 的 Wizard 中設(shè)置各個參數(shù)。上面的 -classpath 中應(yīng)該列出要混淆的 jar 所依賴的所有的包。
RGgui 的詳細(xì)使用方法可以看 RetroGuard 的文檔 docs.html。
配置文件生成后,就可以運行 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。
在生成配置文件時需要注意的是:
1、所有 public 的類名、方法名、變量名應(yīng)該全部保留。因為所有設(shè)置為 public 的內(nèi)容代表了整個包對外表現(xiàn)的接口。若某個內(nèi)容不想為外界訪問,就不應(yīng)該設(shè)置為 public 的。
2、若包中某個類使用了 java.lang.Class 或者 java.lang.ClassLoader 中的某個方法加載了一個類,若這個類在包外,不需要特別處理;若這個類在包內(nèi),則需要保留這個類的類名,否則混淆后會找不到這個類。
3、在包中的所有調(diào)試信息(源文件名、行號、變量/參數(shù)信息等等)應(yīng)全部刪除。
我們在上面的程序中看到了一句沒有用的代碼,就是在MM類里的System.out.println("xxx");。沒有人關(guān)心基類MM是怎么看帥哥,因為它只是一個模版,所以我們干脆就不要這句代碼,而且我們連{}也不要了,直接改寫這個方法為public abstract void toSeeGG();,那么這個方法稱做抽象方法(abstract method)?;怣M對我們來說沒有實現(xiàn)的必要,于是我們把class MM{...}改寫為abstract class MM{...},那么這個類叫做抽象類(abstract class)。我們不禁要問,那么抽象類能不能含有非抽象的函數(shù)呢。答曰:可以。但是這在實際中沒有什么用處,唯一用到的地方是:1,main()函數(shù),用來測試你的類;2,考試中。那么我們還要問,子類可以不覆寫父類中抽象方法行不行?答曰:如果子類也是abstract,那么可以,否則不行。
比抽象類做的更徹底的是接口(注意,這里的接口是JAVA中真正意義的接口,非上文一開始的接口,也既行為)。接口被設(shè)計出來的目的就是要讓你繼承的。等………,這是第一章,只讓大家知道一些概念就行了,上面我們說的太多了。
BRUCE是個徹底的NN大師,我們接下來看到他把JAVA的低效率問題說的是那么的理所當(dāng)然,以至于我們看完后情不自禁也要說:
恩,JAVA就應(yīng)該這樣做,讓C++見鬼去吧。面向?qū)ο?,于是所有東東都是對象,有對象便有對象的產(chǎn)生和毀滅。程序運行的時候,對象產(chǎn)生在內(nèi)存中。內(nèi)存分配有三種策略,分別是靜態(tài)的,棧式的(stack),和堆式的(heap)。C++使用前兩種策略,JAVA僅使用后者。兩者有什么區(qū)別呢?喜歡尋根究底的朋友請參考本站JSP/JAVA分壇的“棧存儲(stack)和堆存儲(heap)的區(qū)別 ”,我們只要記住,后者在內(nèi)存中的尋址要花更長的時間,因此JAVA的效率低。但是JAVA提供了根據(jù)heap特點產(chǎn)生的垃圾回收機(jī)制。垃圾回收機(jī)制完成這樣的任務(wù),當(dāng)你的對象不在使用的時候它會自動察覺并消滅。你不用再擔(dān)心發(fā)生內(nèi)存泄露了。而這是每個C++程序員最頭疼的事情。所以,你選擇吧,是要安全還是要效率。
其實第一章接下來講的東西對于初學(xué)者來說已經(jīng)并不重要了,以上你的知識你明白了之后,在接下來的學(xué)習(xí)上你會輕松很多。我建議你不要看的那么清晰了。我想我們應(yīng)該開始,馬上進(jìn)入第二章了。
以上是云棲社區(qū)小編為您精心準(zhǔn)備的的內(nèi)容,在云棲社區(qū)的博客、問答、公眾號、人物、課程等欄目也有 的相關(guān)內(nèi)容,歡迎繼續(xù)使用右上角搜索按鈕進(jìn)行搜索java , 對象 , class , 方法 , 抽象 , mm , 一個 , java覆寫 易混淆 抓關(guān)鍵詞理解課文、抓關(guān)鍵詞理解句子、閱讀理解關(guān)鍵詞、論文關(guān)鍵詞一般幾個、關(guān)鍵詞一般有幾個,以便于您獲取更多的相關(guān)知識。
不需要對源代碼混淆。class有這種功能的,在J2ME中混淆是必須的,結(jié)果跟你說的一樣,不過原理不是你那么走的,混淆以后的class反編譯也會讓人看不懂,全部變成了a,b,c,d這樣的名字。
混淆代碼 是為了防止class文件被反編譯用的 但是程序的功能還是正常的 和你正常運行一樣
如果連變量名都混淆了,就是說所有有具體意義的英文變量名都用a,b,c,x,y等等來表示,那這是不可能還原的,因為電腦也不可能知道你這個a實際上代表了你的年齡而那個c代表了你老婆的胸圍!
但如果只是個事混淆,那網(wǎng)上倒有不少工具可以格式化源代碼!自己搜一搜吧!推薦一款編輯器,IntelliJ,很不錯,值得一提的是,我用過的眾多編輯器中,這款編輯器的代碼格式化功能最強大!
一、java web項目混淆
proguard4.8工具,說是支持war的,可混淆過后少了classes目錄了,自然成功不了。網(wǎng)上搜的過程不詳說了,最后找著--“J2EE-web工程ProGuard代碼混淆07_28”,網(wǎng)址:
根據(jù)提示一步步完成。
把web項目打成jar包后用proguard進(jìn)行混淆,然后把混淆過后的class目錄替換發(fā)布包war中的對應(yīng)目錄,啟動運行是正常的。
主要注意利用proguard生成xxx.pro文件,然后手動加工-keep class WebRoot.WEB-INFO.lib.* 等項目中不需要混淆的包和類。
二、java web項目打成.exe
沒找到免費的,這搜到個收費的--Jinstall,試了下功能挺好,
可以加密、集成jdk、tomcat,如果數(shù)據(jù)庫是mysql也集成,其他數(shù)據(jù)庫的話要設(shè)置數(shù)據(jù)庫的url.
本文名稱:java代碼混淆,java代碼混淆器
文章出自:http://aaarwkj.com/article44/dsspehe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、Google、App開發(fā)、建站公司、企業(yè)網(wǎng)站制作、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)