【Android 应用开发】 Android APK 反编译 混淆 重编译
2014-12-04 00:32
597 查看
反编译工具 : 总结了一下 linux, windows, mac 上的版本, 一起放到 CSDN 上下载;
-- CSDN 下载地址 :
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
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.zip
10 directories, 4 files
-- 最新版本 : 目前最新版本 0.0.9.15;
-- 官方地址 (需要翻墙) : http://code.google.com/p/dex2jar/ ;
-- 下载地址 (需要翻墙) : http://code.google.com/p/dex2jar/downloads/list;
jd-gui 简介 : 使用该工具可以查看 .jar 中的 java 代码;
-- 官网地址 : http://jd.benow.ca/ ;
![](http://img.blog.csdn.net/20141203172422485?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
b. 执行反编译 : 将 classes.dex 拷贝到 dex2jar 目录下, 执行 ./d2j-dex2jar.sh classes.dex 命令;
-- 执行结果 :
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
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 中, 查看源码;
![](http://img.blog.csdn.net/20141203172923004?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
-- 文件内容 :
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
-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 * 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>;
}
# 对全部类的指定方法的方法名不进行混淆
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
#对全部类的指定方法的方法名不进行混淆
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
# 保留 Activity 子类
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# 对枚举类型enum的全部类的下面指定方法的方法名不进行混淆
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# 实现了 Parcelable 序列化接口的类不混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-- project.properties 配置混淆文件 :
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
target=android-19
proguard.config=proguard.cfg
![](http://img.blog.csdn.net/20141203193038467?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
b. 创建 keystore : 选择 Create new keystore, 选择一个文件, 然后设置 keystore 的用户名 和 密码;
-- Location : keystore 文件;
-- Password : 密码;
-- Confirm : 确认密码, 重新输入密码;
![](http://img.blog.csdn.net/20141203193256062?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
c. 输入 keystore 详细信息 :
-- Alias : 别名;
-- Password : 别名密码;
-- Confirm : 确认密码;
-- Validity(years) : 有效期限, 推荐 25 年;
-- First and Last Name : 开发者姓名;
下面的参数可以不填写
-- Orgnizational Unit : 组织名称;
-- Orgnization : 组织;
-- City or Location : 城市;
-- State or Provience : 省 或者 州;
-- Country Code : 国家;
![](http://img.blog.csdn.net/20141203193631921?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
d. 选择 apk 文件并打包 : 点击 finish 按钮后打包完毕;
![](http://img.blog.csdn.net/20141203194115291?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141203194931453?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
b. 选择签名文件 : 输入签名文件密码;
![](http://img.blog.csdn.net/20141203195205765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
c. 输入别名密码 :
![](http://img.blog.csdn.net/20141203195310490?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
d. 打包 apk : 选择要打包的 apk 文件 :
![](http://img.blog.csdn.net/20141203195356890?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
octopus@octopus:~/decompiler/linux/dex2jar-0.0.9.15$ ./d2j-dex2jar.sh classes.dex
dex2jar classes.dex -> classes-dex2jar.jar
在 jd-gui 中查看 Java 代码 :
![](http://img.blog.csdn.net/20141203194331698?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
-- 最新版本 : 2.0.0 ;
-- 官方网站 (需要翻墙) : 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 引导工具 (Linux) : apktool-install-linux-r05-ibot.tar.bz2
-- apktool 引导工具 (mac) : apktool-install-macosx-r05-ibot.tar.bz2
-- apktool 引导工具 (wondows) : apktool-install-windows-r05-ibot.tar.bz2
![](http://img.blog.csdn.net/20141203202438953?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
反编译 : 将 apk 文件放入上面的目录, 执行命令 ./apktool d WheelView.apk ;
-- 反编译过程 :
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
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
-- 反编译结果 :
反编译结果都在 WheelView 目录中, res 中是相关资源文件, smali 中是 smali 汇编文件;
![](http://img.blog.csdn.net/20141203202756619?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bGlhbmdoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
-- 执行命令 : ./apktool b WheelView WheelView1.apk , 可以生成 WheelView1.apk 文件;
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
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
转自:http://blog.csdn.net/shulianghan/article/details/41697821
-- CSDN 下载地址 :
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
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.zip
10 directories, 4 files
一. 反编译 至 Java 源码
1. 工具介绍
dex2jar 简介 : 将 .dex 或者 .class 后缀文件转换成 .jar 文件;-- 最新版本 : 目前最新版本 0.0.9.15;
-- 官方地址 (需要翻墙) : http://code.google.com/p/dex2jar/ ;
-- 下载地址 (需要翻墙) : http://code.google.com/p/dex2jar/downloads/list;
jd-gui 简介 : 使用该工具可以查看 .jar 中的 java 代码;
-- 官网地址 : http://jd.benow.ca/ ;
2. 反编译过程
(1) Ubuntu 系统反编译
a. 获取 .dex 后缀文件 : 修改 apk 文件后缀, 获取 class.dex 文件;b. 执行反编译 : 将 classes.dex 拷贝到 dex2jar 目录下, 执行 ./d2j-dex2jar.sh classes.dex 命令;
-- 执行结果 :
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
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. 混淆代码
注意 : 如果不使用签名文件进行打包的话, 直接从 eclipse 中拷贝的文件是无法混淆的;(1) 配置混淆文件
编辑 progard.cfg :-- 文件内容 :
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
-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 * 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>;
}
# 对全部类的指定方法的方法名不进行混淆
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
#对全部类的指定方法的方法名不进行混淆
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
# 保留 Activity 子类
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# 对枚举类型enum的全部类的下面指定方法的方法名不进行混淆
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# 实现了 Parcelable 序列化接口的类不混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-- project.properties 配置混淆文件 :
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
target=android-19
proguard.config=proguard.cfg
(2) 打包 apk 文件 (创建新的 keystore)
a. 设置打包项目 : 右键点击工程 选择 Android Tools --> Export Signed Application Package 选项, 弹出以下对话框, 选择要打包的程序, 设置好后点击 Next;b. 创建 keystore : 选择 Create new keystore, 选择一个文件, 然后设置 keystore 的用户名 和 密码;
-- Location : keystore 文件;
-- Password : 密码;
-- Confirm : 确认密码, 重新输入密码;
c. 输入 keystore 详细信息 :
-- Alias : 别名;
-- Password : 别名密码;
-- Confirm : 确认密码;
-- Validity(years) : 有效期限, 推荐 25 年;
-- First and Last Name : 开发者姓名;
下面的参数可以不填写
-- Orgnizational Unit : 组织名称;
-- Orgnization : 组织;
-- City or Location : 城市;
-- State or Provience : 省 或者 州;
-- Country Code : 国家;
d. 选择 apk 文件并打包 : 点击 finish 按钮后打包完毕;
(3) 打包 apk 文件 (使用现有的 keystore 文件)
a. 选择打包的工程 : 右键点击工程, 选择 Android Tools --> Export Signed Application Package 选项;b. 选择签名文件 : 输入签名文件密码;
c. 输入别名密码 :
d. 打包 apk : 选择要打包的 apk 文件 :
(4) 验证混淆效果
反编译 : 将 apk 文件后缀改为 .zip, 之后取出 classes.dex 文件 到 dex2jar 根目录中, 执行 ./d2j-dex2jar.sh classes.dex 命令;[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
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 ;
-- 官方网站 (需要翻墙) : 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 引导工具 (Linux) : apktool-install-linux-r05-ibot.tar.bz2
-- apktool 引导工具 (mac) : apktool-install-macosx-r05-ibot.tar.bz2
-- apktool 引导工具 (wondows) : apktool-install-windows-r05-ibot.tar.bz2
2. 反编译
将下载的文件放到一个文件中 :反编译 : 将 apk 文件放入上面的目录, 执行命令 ./apktool d WheelView.apk ;
-- 反编译过程 :
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
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
-- 反编译结果 :
反编译结果都在 WheelView 目录中, res 中是相关资源文件, smali 中是 smali 汇编文件;
3. 重新编译
重新编译命令格式 : ./apktool b apk源目录 apk文件名称;-- 执行命令 : ./apktool b WheelView WheelView1.apk , 可以生成 WheelView1.apk 文件;
[plain] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
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
转自:http://blog.csdn.net/shulianghan/article/details/41697821
相关文章推荐
- 【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
- 【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
- 【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
- 工欲善其事,必先利其器 软件工具开发关键词 protractor自动化测试工具 RegexBuddy正则 CodeSmith,LightSwitch:代码生成 CheatEngine:玩游戏修改内存值必备神器 ApkIDE:Android反编译工具 Reflector:反编译dll动态链接库
- [置顶] Android开发之反编译、apk重新打包、apk混淆、apk对齐与不对齐、jar混淆、proguard
- Android应用之个人应用软件开发【全套程序展示及APK下载】
- 反编译Android APK 源代码和资源文件防止反编译详解
- android APK反编译与再编译
- 使用 Android快速开发框架 Afinal 0.3 快速开发网络应用相关APK
- android开发:如何通过反编译修改apk
- Android APK反编译 && user版本push应用到系统
- Android开发学习笔记:反编译APK文件
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类
- Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源
- Android应用开发系列(2)——HelloWorld, APK生成
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类
- android 应用 Ant脚本自动编译、打包、代码混淆、签名、安装等
- Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源
- Android 开发系列:Apk反编译