【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译

原创 2014年12月03日 20:43:36



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

-- 执行结果

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-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 命令;

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.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 文件;

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 https://blog.csdn.net/han1202012/article/details/41697821

Android安全攻防战,反编译与混淆技术完全解析(上)

我们都知道,Android程序打完包之后得到的是一个APK文件,这个文件是可以直接安装到任何Android手机上的,我们反编译其实也就是对这个APK文件进行反编译。Android的反编译主要又分为两个...
  • sinyu890807
  • sinyu890807
  • 2016-02-18 09:09:54
  • 98106

反编译并分析一个混淆的apk示例

洲洲贴吧抢楼机 这次我反编译的目标是
  • picone
  • picone
  • 2014-10-02 13:21:44
  • 1199

apk混淆打包与反编译破解及处理

前面有人写过了,我就直接引用了,大家就不乱找了。以后有问题再继续更新。 一.混淆打包、编译 1.Android 代码混淆。http://blog.csdn.net/zjclugger/articl...
  • qq_27985531
  • qq_27985531
  • 2016-03-17 14:21:06
  • 1758

【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译

反编译工具 : 总结了一下 linux, windows, mac 上的版本, 一起放到 CSDN 上下载;-- CSDN 下载地址 : octopus@octopus:~/decompiler$ t...
  • han1202012
  • han1202012
  • 2014-12-03 20:43:36
  • 5812

Android混淆编译、反混淆、反编译

混淆编译为了保护APK代码和架构,不轻易被外部人员反编译和破解,对发布的APK,所以必须进行代码混淆编译。 Java 是一种跨平台的、解释型语言,Java 源代码(.java文件)编译成中间“字节码...
  • u013082948
  • u013082948
  • 2016-08-12 21:29:36
  • 1053

Android APK之代码混淆与反编译

首先示例一个Android项目 , 里面包含所需要的混淆脚本以及 一些经常使用的第三方Jar包 问题1 : 如果你创建的项目里没有自带proguard.cfg这个混淆脚本,那...
  • codepython
  • codepython
  • 2015-09-11 22:09:40
  • 763

代码混淆—android被反编译的两种解决方案

最近在做一些android的项目,对apk文件能够被反编译这一情况有点头大,就花了点时间,研究了下关于apk被反编译的一些解决方法。        Java的字节码一般是非常容易反编译的,而...
  • online1989
  • online1989
  • 2011-12-10 00:03:22
  • 8606

apk反编译获取完整源码 及 apk反编译后的处理

一、工具准备:apktool , dex2jar , jd-gui 二、使用dex2jar + jd-gui 得到apk的java源码 1.用解压工具从 apk包中取出 classes.de...
  • wh_19910525
  • wh_19910525
  • 2012-08-28 13:47:34
  • 144130

Android对apk源码的修改--反编译+源码修改+重新打包+签名【附HelloWorld的修改实例】

文章以HelloWorld为例讲述了对apk源码进行修改的方法
  • lucherr
  • lucherr
  • 2014-10-09 09:01:50
  • 195736

APK的混淆与反编译

第 一章            APK反编译 在线反编译:http://www.ludaima.cn/android.html 原文链接:http://blog.csdn.net/vipzjyno1/...
  • uu00soldier
  • uu00soldier
  • 2017-01-18 09:41:51
  • 1187
收藏助手
不良信息举报
您举报文章:【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
举报原因:
原因补充:

(最多只允许输入30个字)