新聞中心
apk直接可以 解壓,然后很容易的就可以反編譯出.java,找了找,果然,這一切只不過是 一分鐘的事兒:

成都創(chuàng)新互聯(lián)公司專注于網(wǎng)站建設(shè)|成都網(wǎng)站維護(hù)|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋成都茶藝設(shè)計(jì)等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身設(shè)計(jì)品質(zhì)網(wǎng)站。
1、得到classes.dex文件;直接用你機(jī)器上的解壓軟件打開.apk 文件,解壓出 classes.dex 文件。
2、還原.jar文件;這一步需要用到一個(gè)工具 dex2jar (谷歌的代碼庫(kù)里有 http://code.google.com/p/dex2jar/)
下載完了,解壓,然后把***步的 產(chǎn)物(即那個(gè)classes.dex文件)放到 dex2jar的解壓目錄里。
cmd命令行,目錄切換到dex2jar的目錄下:
“ dex2jar.bat classes.dex”
看到命令行的 “Done” 之后, dex2jar文件夾里 就會(huì)有“classes.dex.dex2jar.jar” 文件了,這個(gè)就是傳說中的jar包了。
3、查看.jar文件;這一步就是傳統(tǒng)的反編譯了,需要工具輔助,我這里用到的工具是jd-gui(http://java.decompiler.free.fr/?q=jdgui)
下載你的系統(tǒng)對(duì)應(yīng)的版本、解壓,你會(huì)看到一個(gè).exe文件,雙擊,選擇第二步生成的.jar, 好吧,你的項(xiàng)目是不是完全還原了呢?
非常簡(jiǎn)單的步驟就能讓代碼暴露。
那么,如何對(duì)我們的代碼混淆呢?
新建一個(gè) 2.3.3的項(xiàng)目,你會(huì)看到項(xiàng)目文件里有一個(gè)proguard.cfg 文件,google已經(jīng)幫我們做了這么多事,可惜是從2.3開始的,那我 悲催的項(xiàng)目(基于2.2的sdk) 該如何是好?
呵呵,其實(shí)不用,你只要 把 proguard.cfg 文件 拷貝到 你的 舊項(xiàng)目里就好了。
當(dāng)然這樣還不夠,因?yàn)?google是默認(rèn)不混淆項(xiàng)目的:
To enable ProGuard so that it runs as part of an Ant or Eclipse build, set the proguard.config property in the
google 告訴我們 還要 配置 default.properties.
嗯,把 proguard.config=proguard.cfg 加上,好了,再次生成 新的 .apk文件,然后用上面的方法 反編譯你的 項(xiàng)目,你會(huì)看到 aa bb cc 的包、aa bb cc 的類 和 aa bb cc 的變量名,方法名.
再看看 proguard.cfg 文件
- -optimizationpasses 5
- -dontusemixedcaseclassnames
- -dontskipnonpubliclibraryclasses
- -dontpreverify
- -verbose
- -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
- -keep public class * extends Android.app.Activity
- -keep public class * extends android.app.Application
- -keep public class * extends android.app.Service
- -keep public class * extends android.content.BroadcastReceiver
- -keep public class * extends android.content.ContentProvider
- -keep public class com.android.vending.licensing.ILicensingService
- -keepclasseswithmembernames class * {
- native
; - }
- -keepclasseswithmembernames class * {
- public
(android.content.Context, android.util.AttributeSet); - }
- -keepclasseswithmembernames class * {
- public
(android.content.Context, android.util.AttributeSet, int); - }
- -keepclassmembers enum * {
- public static **[] values();
- public static ** valueOf(java.lang.String);
- }
- -keep class * implements android.os.Parcelable {
- public static final android.os.Parcelable$Creator *;
- }
這里是 google默認(rèn)不混淆 Activity 、Service類的子類, 正如上面的截圖中看到的 所有activity的子類名稱是被保留的。想自定義混淆細(xì)節(jié)的話就琢磨琢磨這個(gè)配置文件吧!~
分享文章:關(guān)于如何對(duì)Android代碼進(jìn)行混淆的教程
文章起源:http://www.dlmjj.cn/article/dpcedjg.html


咨詢
建站咨詢
