反编译工具 : 总结了一下 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;

-- 官方地址 (需要) :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 命令;

-- 执行结果 :

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 ;

-- 官方网站 (需要) :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 ;

-- 反编译过程 :

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. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android(安卓)中the connection to adb is down 解决方法
  4. Android(安卓)驱动与应用
  5. Android中创建文件夹和文件的操作
  6. Android(安卓)欢迎页面的编写
  7. android Studio中关于Gradle的使用注解
  8. Android(安卓)资源文件中的符号含义与说明
  9. Android默认设置静态IP

随机推荐

  1. 自定义Dialog 实现 仿网易云音乐的隐私条
  2. android 实时获取 麦克风 音量大小
  3. Android 抢红包
  4. Android HAL基础
  5. Android 唯一识别码
  6. Android 解决沉浸式状态栏下,输入法弹出,布
  7. 从头开始学Android—Android Studio(一)
  8. Android仿小米商城底部导航栏(基于BottomN
  9. 布局(一)
  10. Android 从硬件到应用:一步一步向上爬 1 -