android源碼被混淆了還原方法為:
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),鎮(zhèn)平企業(yè)網(wǎng)站建設(shè),鎮(zhèn)平品牌網(wǎng)站建設(shè),網(wǎng)站定制,鎮(zhèn)平網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,鎮(zhèn)平網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
1、得到 classes.dex文件;直接用機(jī)器上的解壓軟件 打開(kāi) .apk 文件,解壓出 classes.dex 文件。
2、還原.jar文件;這一步需要用到一個(gè)工具 dex2jar (谷歌的代碼庫(kù)里有)下載完了,解壓,然后把第一步的 產(chǎn)物(即那個(gè)classes.dex文件)放到 dex2jar的解壓目錄(解壓目錄里 有 dex2jar.bat 文件,檢查一下,沒(méi)有的話(huà)說(shuō)明目錄不對(duì))。
3、查看.jar文件;這一步就是傳統(tǒng)的 反編譯 了,需要工具輔助,這里用到的工具是jd-gui()下載系統(tǒng)對(duì)應(yīng)的版本,解壓,(xp系統(tǒng))會(huì)看到一個(gè) .exe文件,沒(méi)錯(cuò)就是 單文件綠色版,雙擊,選擇 第二步 生成的 .jar,即可。
一、java web項(xiàng)目混淆
proguard4.8工具,說(shuō)是支持war的,可混淆過(guò)后少了classes目錄了,自然成功不了。網(wǎng)上搜的過(guò)程不詳說(shuō)了,最后找著--“J2EE-web工程ProGuard代碼混淆07_28”,網(wǎng)址:
根據(jù)提示一步步完成。
把web項(xiàng)目打成jar包后用proguard進(jìn)行混淆,然后把混淆過(guò)后的class目錄替換發(fā)布包war中的對(duì)應(yīng)目錄,啟動(dòng)運(yùn)行是正常的。
主要注意利用proguard生成xxx.pro文件,然后手動(dòng)加工-keep class WebRoot.WEB-INFO.lib.* 等項(xiàng)目中不需要混淆的包和類(lèi)。
二、java web項(xiàng)目打成.exe
沒(méi)找到免費(fèi)的,這搜到個(gè)收費(fèi)的--Jinstall,試了下功能挺好,
可以加密、集成jdk、tomcat,如果數(shù)據(jù)庫(kù)是mysql也集成,其他數(shù)據(jù)庫(kù)的話(huà)要設(shè)置數(shù)據(jù)庫(kù)的url.
不可能100%,因?yàn)榇嬖诓煌拇a會(huì)被編繹解釋成一樣的代碼這種情況,所以還原時(shí)沒(méi)辦法知道當(dāng)初是怎么寫(xiě)的
混淆的工具很多,最常用的為retroguard.
Java 代碼編譯后生成的 .class 中包含有源代碼中的所有信息(不包括注釋?zhuān)?,尤其是在其中保存有調(diào)試信息的時(shí)候。所以一個(gè)按照正常方式編譯的 Java .class 文件可以非常輕易地被反編譯。反編譯工具有很多種,其中非常強(qiáng)大的一種是 jad。
為了避免出現(xiàn)這種情況,保護(hù)開(kāi)發(fā)者的勞動(dòng),又有一種叫做 Java 混淆器的工具被開(kāi)發(fā)出來(lái)。Java 混淆器的作用是對(duì)編譯好的代碼進(jìn)行混淆,使得其無(wú)法被反編譯或者反編譯后的代碼混亂難懂。Java 混淆器也有很多種,其中比較強(qiáng)大的一種是 RetroGuard(只說(shuō)比較強(qiáng)大是因?yàn)槲覍?duì)其功效還是有些懷疑的)。
這里我介紹一下 RetroGuard 的使用方法。
將下載的 .tar.gz 或者 .zip 文件解壓。有用的只有 retroguard.jar 一個(gè)文件,其它的是源代碼和文檔。
RetroGuard 是針對(duì) jar 文件做混淆的。使用之前需要先配置一下??梢允止ぞ庉嬇渲梦募?,更好的方法是使用 RetroGuard 提供的 GUI 工具來(lái)生成配置文件。使用方法如下:
java -classpath retroguard.jar;xxx.jar;yyy.zip;... RGgui
然后在 GUI 的 Wizard 中設(shè)置各個(gè)參數(shù)。上面的 -classpath 中應(yīng)該列出要混淆的 jar 所依賴(lài)的所有的包。
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 是日志文件。缺省的配置文件名稱(chēng)為 script.rgs,缺省的日志文件名稱(chēng)為 retroguard.log。
在生成配置文件時(shí)需要注意的是:
1、所有 public 的類(lèi)名、方法名、變量名應(yīng)該全部保留。因?yàn)樗性O(shè)置為 public 的內(nèi)容代表了整個(gè)包對(duì)外表現(xiàn)的接口。若某個(gè)內(nèi)容不想為外界訪(fǎng)問(wèn),就不應(yīng)該設(shè)置為 public 的。
2、若包中某個(gè)類(lèi)使用了 java.lang.Class 或者 java.lang.ClassLoader 中的某個(gè)方法加載了一個(gè)類(lèi),若這個(gè)類(lèi)在包外,不需要特別處理;若這個(gè)類(lèi)在包內(nèi),則需要保留這個(gè)類(lèi)的類(lèi)名,否則混淆后會(huì)找不到這個(gè)類(lèi)。
3、在包中的所有調(diào)試信息(源文件名、行號(hào)、變量/參數(shù)信息等等)應(yīng)全部刪除。
如果連變量名都混淆了,就是說(shuō)所有有具體意義的英文變量名都用a,b,c,x,y等等來(lái)表示,那這是不可能還原的,因?yàn)殡娔X也不可能知道你這個(gè)a實(shí)際上代表了你的年齡而那個(gè)c代表了你老婆的胸圍!但如果只是個(gè)事混淆,那網(wǎng)上倒有不少工具可以格式化源代碼!自己搜一搜吧!推薦一款編輯器,IntelliJ,很不錯(cuò),值得一提的是,我用過(guò)的眾多編輯器中,這款編輯器的代碼格式化功能最強(qiáng)大!
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)說(shuō)明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)生成,有幾處需要說(shuō)明
pathelement location="bin"/ pathelement location="XXX.jar"/這類(lèi)標(biāo)簽代表項(xiàng)目編譯所需的jar包,由于是自動(dòng)生成一般不用理睬,如果出現(xiàn)找不到相關(guān)的package之類(lèi)的報(bào)錯(cuò),那么有可能是location路徑有問(wèn)題。如果你安裝系統(tǒng)時(shí)是用戶(hù)名設(shè)置成了中文名,并且使用了maven,maven的jar包的下載路徑設(shè)置成了默認(rèn)${user}/.m2/repository/,那么jocky這里的路徑會(huì)出現(xiàn)問(wèn)題,中文名的用戶(hù)名會(huì)亂碼或者消失,請(qǐng)修改maven配置xml文件修改下載路徑localRepository[自己指定的路徑]/localRepository 。
javac destdir="${jocky.output.dir}/bin" target="${target}" encoding="UTF-8" 代碼中如果有中文名,必須手動(dòng)設(shè)定編碼,默認(rèn)是沒(méi)有的。
src path="src"/ 設(shè)定源文件的目錄,因?yàn)橛袝r(shí)候我們只想輸出src目錄下的部分包而不是全部。