混淆代碼 是為了防止class文件被反編譯用的 但是程序的功能還是正常的 和你正常運(yùn)行一樣
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了潢川免費(fèi)建站歡迎大家使用!
如果連變量名都混淆了,就是說所有有具體意義的英文變量名都用a,b,c,x,y等等來表示,那這是不可能還原的,因?yàn)殡娔X也不可能知道你這個(gè)a實(shí)際上代表了你的年齡而那個(gè)c代表了你老婆的胸圍!
但如果只是個(gè)事混淆,那網(wǎng)上倒有不少工具可以格式化源代碼!自己搜一搜吧!推薦一款編輯器,IntelliJ,很不錯(cuò),值得一提的是,我用過的眾多編輯器中,這款編輯器的代碼格式化功能最強(qiáng)大!
java知識(shí)點(diǎn)不多,但是有一些經(jīng)常會(huì)被我們忽略
1.java是強(qiáng)類型的語言,數(shù)組也是對(duì)象,一旦確定數(shù)組的類型,里面就只能存放一個(gè)類型的數(shù)據(jù)。
2.新建的對(duì)象都被存放到堆上,如果沒有引用,會(huì)很快垃圾回收。
3.java沒有全局變量和方法這個(gè)概念,全局方法,被加上static關(guān)鍵字,全局的變量是,static final
4.java是值傳遞,對(duì)于primitive基本類型,是拷貝數(shù)值,對(duì)于復(fù)雜對(duì)象類型是拷貝引用,操作會(huì)影響原來額數(shù)據(jù)。
5.實(shí)例變量聲明在類內(nèi),局部變量聲明在方法內(nèi),局部變量使用前必須被初始化。
6.方法的覆蓋不能降低開放的權(quán)限。
7.判斷是否繼承,需要判斷是否有is-a關(guān)系。
8.有一個(gè)方法是抽象方法,類也必須是抽象類,抽象類可以有抽象方法也可以有非抽象的方法。
9.在java中,程序員會(huì)在意兩個(gè)區(qū)域,對(duì)象存在的空間堆,方法和變量存在空間棧,變量存在于哪一個(gè)空間要看他的類型而定,實(shí)例變量屬于對(duì)象,存在于堆,局部變量又叫棧變量(包括方法參數(shù)和內(nèi)部的變量)。
10.對(duì)象局部變量是一個(gè)引用類型,會(huì)放在棧上。
11.對(duì)于java來說所有的引用類型的大小都是固定的,
12.new 對(duì)象時(shí)候,第一件事情是去執(zhí)行他的父類的構(gòu)造函數(shù),一直到object的構(gòu)造函數(shù),叫做構(gòu)造函數(shù)調(diào)用鏈條。
13.局部變量的生存周期是方法的堆棧區(qū)存在,既是方法被調(diào)用期間,使用范圍是方法的內(nèi)部。
14.對(duì)象的銷毀一定是沒有引用指向的時(shí)候,會(huì)被垃圾回收器回收,
三個(gè)主要的方式:
1.方法里面的局部對(duì)象變量在方法結(jié)束后
2.唯一的引用指向其他的對(duì)象
3.引用設(shè)為null
15.靜態(tài)方法不能調(diào)用非靜態(tài)的變量和方法,靜態(tài)變量的值對(duì)于所有的對(duì)象都是相同的。
很多小伙伴想要學(xué)習(xí)java技術(shù),可以加java學(xué)習(xí)q u n :116 804 208 ,每天晚上在線直播教學(xué),想要在線學(xué)習(xí)的伙伴可以加進(jìn)來,不是想要學(xué)習(xí)的就不要加了。
不需要對(duì)源代碼混淆。class有這種功能的,在J2ME中混淆是必須的,結(jié)果跟你說的一樣,不過原理不是你那么走的,混淆以后的class反編譯也會(huì)讓人看不懂,全部變成了a,b,c,d這樣的名字。
一、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目錄下的部分包而不是全部。
混淆也只能是對(duì)方法名,變量名稱進(jìn)行混淆;內(nèi)部代碼也只能是對(duì)字符串進(jìn)行混淆,以及壓縮等。