【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
反編譯工具 : 總結(jié)了一下 linux, windows, mac 上的版本, 一起放到 CSDN 上下載;
-- CSDN 下載地址 :?http://download.csdn.net/detail/han1202012/8221787
octopus@octopus:~/decompiler$ tree -L 2 . ├── linux │?? ├── apktool │?? ├── dex2jar-0.0.9.15 │?? └── jd-gui ├── mac │?? ├── apktool │?? ├── dex2jar-0.0.9.15 │?? └── jd-gui-0.3.5.osx.i686.dmg ├── windows │?? ├── apkTool │?? ├── dex2jar-0.0.9.15 │?? └── jd-gui.exe └── 源碼└── apktool-source.zip10 directories, 4 files
一. 反編譯 至 Java 源碼?
1. 工具介紹
dex2jar 簡介 : 將 .dex 或者 .class 后綴文件轉(zhuǎn)換成 .jar 文件;
-- 最新版本 : 目前最新版本 0.0.9.15;
-- 官方地址 (需要翻墻) :?http://code.google.com/p/dex2jar/ ;
-- 下載地址 (需要翻墻) :?http://code.google.com/p/dex2jar/downloads/list;
jd-gui 簡介 : 使用該工具可以查看 .jar 中的 java 代碼;
-- 官網(wǎng)地址?:?http://jd.benow.ca/ ;
2. 反編譯過程?
(1) Ubuntu 系統(tǒng)反編譯
a. 獲取 .dex 后綴文件 : 修改 apk 文件后綴, 獲取 class.dex 文件;
b. 執(zhí)行反編譯 : 將 classes.dex 拷貝到 dex2jar 目錄下, 執(zhí)行?./d2j-dex2jar.sh classes.dex 命令;
-- 執(zhí)行結(jié)果 :?
octopus@octopus:~/decompiler/linux/dex2jar-0.0.9.15$ ./d2j-dex2jar.sh classes.dex dex2jar classes.dex -> classes-dex2jar.jar
c. jd-gui 中查看源碼 : 將 classes-dex2jar.jar 文件拖入 jd-gui 中, 查看源碼;
3. 混淆代碼
注意 : 如果不使用簽名文件進(jìn)行打包的話, 直接從 eclipse 中拷貝的文件是無法混淆的;
(1) 配置混淆文件?
編輯 progard.cfg :?
-- 文件內(nèi)容 :?
-optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*#組件相關(guān)的類不進(jìn)行混淆, 保留 -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 * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService# 所有類中的 native 方法不混淆 -keepclasseswithmembernames class * {native <methods>; }# 對(duì)全部類的指定方法的方法名不進(jìn)行混淆 -keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet); }#對(duì)全部類的指定方法的方法名不進(jìn)行混淆 -keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet, int); }# 保留 Activity 子類 -keepclassmembers class * extends android.app.Activity {public void *(android.view.View); }# 對(duì)枚舉類型enum的全部類的下面指定方法的方法名不進(jìn)行混淆 -keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String); }# 實(shí)現(xiàn)了 Parcelable 序列化接口的類不混淆 -keep class * implements android.os.Parcelable {public static final android.os.Parcelable$Creator *; }
--?project.properties 配置混淆文件 :?
target=android-19 proguard.config=proguard.cfg
(2) 打包 apk 文件 (創(chuàng)建新的 keystore)
a. 設(shè)置打包項(xiàng)目 : 右鍵點(diǎn)擊工程 選擇 Android Tools --> Export Signed Application Package 選項(xiàng), 彈出以下對(duì)話框, 選擇要打包的程序, 設(shè)置好后點(diǎn)擊 Next;
b. 創(chuàng)建 keystore : 選擇 Create new keystore, 選擇一個(gè)文件, 然后設(shè)置 keystore 的用戶名 和 密碼;
-- Location : keystore 文件;
-- Password : 密碼;
-- Confirm : 確認(rèn)密碼, 重新輸入密碼;
c. 輸入 keystore 詳細(xì)信息 :?
-- Alias : 別名;
-- Password : 別名密碼;
-- Confirm : 確認(rèn)密碼;
-- Validity(years) : 有效期限, 推薦 25 年;
-- First and Last Name : 開發(fā)者姓名;
下面的參數(shù)可以不填寫
-- Orgnizational Unit : 組織名稱;
-- Orgnization : 組織;
-- City or Location : 城市;
-- State or Provience : 省 或者 州;
-- Country Code : 國家;
d. 選擇 apk 文件并打包 : 點(diǎn)擊 finish 按鈕后打包完畢;
(3) 打包 apk 文件 (使用現(xiàn)有的 keystore 文件)
a. 選擇打包的工程 : 右鍵點(diǎn)擊工程, 選擇 Android Tools --> Export Signed Application Package 選項(xiàng);
b. 選擇簽名文件 : 輸入簽名文件密碼;
c. 輸入別名密碼 :?
d. 打包 apk : 選擇要打包的 apk 文件 :?
(4) 驗(yàn)證混淆效果?
反編譯 : 將 apk 文件后綴改為 .zip, 之后取出 classes.dex 文件 到 dex2jar 根目錄中, 執(zhí)行?./d2j-dex2jar.sh classes.dex 命令;
octopus@octopus:~/decompiler/linux/dex2jar-0.0.9.15$ ./d2j-dex2jar.sh classes.dex dex2jar classes.dex -> classes-dex2jar.jar
在 jd-gui 中查看 Java 代碼 :?
二. Apktools 反編譯?
1. Apktools 介紹
Apktools 簡介 :?
-- 最新版本 : 2.0.0 ;
-- 官方網(wǎng)站 (需要翻墻) :?https://code.google.com/p/android-apktool/ ;
-- 新版本下載地址 :?https://bitbucket.org/iBotPeaches/apktool/downloads ;
-- 老版本下載地址 (需要翻墻) :?https://code.google.com/p/android-apktool/downloads/list ;
需要下載的文件 :?
-- apktool jar 包 :?apktool1.5.2.tar.bz2
-- apktool 引導(dǎo)工具 (Linux) :?apktool-install-linux-r05-ibot.tar.bz2
--?apktool 引導(dǎo)工具 (mac)?:?apktool-install-macosx-r05-ibot.tar.bz2
--?apktool 引導(dǎo)工具 (wondows)?:?apktool-install-windows-r05-ibot.tar.bz2
2. 反編譯
將下載的文件放到一個(gè)文件中 :?
反編譯 : 將 apk 文件放入上面的目錄, 執(zhí)行命令?./apktool d WheelView.apk ;
-- 反編譯過程 :?
octopus@octopus:~/decompiler/linux/apktool$ ./apktool d WheelView.apk I: Baksmaling... I: Loading resource table... I: Loaded. I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: /home/octopus/apktool/framework/1.apk I: Loaded. I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Done. I: Copying assets and libs... octopus@octopus:~/decompiler/linux/apktool$ ls aapt apktool apktool.jar WheelView WheelView.apk
-- 反編譯結(jié)果 : 反編譯結(jié)果都在 WheelView 目錄中, res 中是相關(guān)資源文件, smali 中是 smali 匯編文件;
3. 重新編譯?
重新編譯命令格式 : ./apktool b apk源目錄 apk文件名稱;
-- 執(zhí)行命令 :?./apktool b WheelView WheelView1.apk , 可以生成 WheelView1.apk 文件;
octopus@octopus:~/decompiler/linux/apktool$ ls aapt apktool apktool.jar WheelView WheelView.apk octopus@octopus:~/decompiler/linux/apktool$ ./apktool b WheelView WheelView1.apk I: Checking whether sources has changed... I: Smaling... I: Checking whether resources has changed... I: Building resources... I: Building apk file... octopus@octopus:~/decompiler/linux/apktool$ ls aapt apktool apktool.jar WheelView WheelView1.apk WheelView.apk
總結(jié)
以上是生活随笔為你收集整理的【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【IOS 开发】Objective -
- 下一篇: 【IOS 开发】Object - C 数