反编译工具 : 总结了一下 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 后缀文件转换成 .jar 文件;

-- 最新版本 : 目前最新版本 0.0.9.15;

-- 官方地址 (需要FQ) :http://code.google.com/p/dex2jar/ ;

-- 下载地址 (需要FQ) :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 命令;

-- 执行结果 :

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 :

-- 文件内容 :

-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 配置混淆文件 :

target=android-19proguard.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 命令;

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 ;

-- 官方网站 (需要FQ) :https://code.google.com/p/android-apktool/ ;

-- 新版本下载地址 :https://bitbucket.org/iBotPeaches/apktool/downloads ;

-- 老版本下载地址 (需要FQ) :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 ;

-- 反编译过程 :

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.apkI: 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$ lsaapt  apktool  apktool.jar  WheelView  WheelView.apk

-- 反编译结果 : 反编译结果都在 WheelView 目录中, res 中是相关资源文件, smali 中是 smali 汇编文件;




3. 重新编译


重新编译命令格式 : ./apktool b apk源目录 apk文件名称;

-- 执行命令 :./apktool b WheelView WheelView1.apk , 可以生成 WheelView1.apk 文件;

octopus@octopus:~/decompiler/linux/apktool$ lsaapt  apktool  apktool.jar  WheelView  WheelView.apkoctopus@octopus:~/decompiler/linux/apktool$ ./apktool b WheelView WheelView1.apkI: 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$ lsaapt  apktool  apktool.jar  WheelView  WheelView1.apk  WheelView.apk


更多相关文章

  1. [置顶] Android上传文件到Web服务器,PHP接收文件(二)
  2. Android新建项目报错android:icon="@drawable/ic_launcher"
  3. Android(安卓)Studio(七):项目从Eclipse到Android(安卓)Studio迁
  4. Android(安卓)APK瘦身之Android(安卓)Studio Lint (代码审查)
  5. Android中设置中文粗体的方法
  6. 编译用于Android的FFmpeg&x264
  7. 【Android(安卓)】Prebuilt预编译
  8. RadioButton和CheckBox自定义按钮图片的样式
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android 按钮点击事件监听的3重方式
  2. android 实现保存图片到相册
  3. android机制系列之七 Android Camera API
  4. 使用shape来定义控件的一些显示属性
  5. Android实现多线程下载图片的方法
  6. 使用Qt5.9开发Android 应用程序(Windows
  7. Android6.0修改设备设置中kernel信息
  8. 短视频PHP源码Android 打造专属的下拉刷
  9. Android Studio设置 标题栏隐藏, 状态栏
  10. Android ANR-Keydispatch timeout