`

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

 
阅读更多



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


分享到:
评论

相关推荐

    Android APK反编译及代码混淆详解(附图)

    在学习Android开发的过程中,往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行...

    Android如何防止apk程序被反编译

    作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。 Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个...

    APK反编译工具

    APK反编译工具(代码混淆过或者用第三方加固工具的Apk,反编译无法看到源代码)里面用教程,最后将smali 转java。

    安卓APK混淆加固重签名工具1.6.0

    安卓APK资源混淆加密重签名工具,可以对安卓APK文件的代码和资源文件进行混淆加密处理,可以对安卓APK文件进行加固,对代码和资源...9.支持防止反编译功能,可以有效防止一些主流的APK反编译工具对APK文件进行反编译

    非常好用的android反编译工具apk反编译工具

    非常好用的android反编译工具,apk反编译工具。解压到任何目录,可以直接使用。

    android混淆编译代码 防止反编译

    Android如何防止apk程序被反编译 亲自测试 完美混淆

    jadx-gui-1.4.7.zip android端 apk反编译神器

    android端 apk反编译神器 超级好用 exe文件打开选中需要反编译的apk即可自动反编译 而且还有反混淆功能 找了好久都没有找到最新的 终于下载了一个最新版本 跟大家交个朋友 解压直接可用!!! jadx用过都说好 资源...

    安卓APK混淆加密重签名工具1.5.0

    安卓APK资源混淆加密重签名工具,可以对安卓APK文件的代码和资源文件进行混淆加密处理,可以对安卓APK文件进行加固,...9.支持防止反编译功能,可以有效防止一些主流的APK反编译工具对APK文件进行反编译 解压密码1234

    jadx-gui-1.4.6.zip android端 apk反编译神器

    android端 apk反编译神器 超级好用 exe文件打开选中需要反编译的apk即可自动反编译 而且还有反混淆功能 找了好久都没有找到最新的 终于下载了一个最新版本 跟大家交个朋友 解压直接可用!!! jadx用过都说好 资源...

    android_最新_反编译工具.7z

    准备一个测试apk(eclipse或androidstudio打包,混淆文件为eclipse或androidstudio默认带的),如Test_android.apk,复制一个副本重命名为Test_android.zip,然后解压,你就可以看到一些东西了,不过这种方式看到的大...

    android混淆与签名与反编译方法

    包括android工程源码混淆方法、apk签名方法和apk反编译方法

    jadx-gui-1.4.5.zip android端 apk反编译神器

    android端 apk反编译神器 超级好用 exe文件打开选中需要反编译的apk即可自动反编译 而且还有反混淆功能 找了好久都没有找到最新的 下载了一个最新版本 跟大家交个朋友 解压直接可用 jadx用过都说好 小白一键反编译 ...

    jadx-gui-1.4.4.zip android端 apk反编译神器

    android端 apk反编译神器 超级好用 exe文件打开选中需要反编译的apk即可自动反编译 而且还有反混淆功能 找了好久都没有找到最新的 下载了一个最新版本 跟大家交个朋友 解压直接可用 jadx用过都说好 小白一键反编译 ...

    jadx-gui-1.4.3.zip android端 apk反编译神器

    android端 apk反编译神器 超级好用 exe文件打开选中需要反编译的apk即可自动反编译 而且还有反混淆功能 找了好久都没有找到最新的 下载了一个最新版本 跟大家交个朋友 解压直接可用 jadx用过都说好 小白一键反编译 ...

    apk文件反编译工具

    android项目在发布的时候为了安全,首先要混淆文件,软后使用反编译工具查看是否混淆成功。这个是我在发布前使用的反编译工具,非常好用。

    apk反编译工具

    android apk反编译工具 可以用来反编译别人未经代码混淆的apk。可以用来做技术研究使用。请勿用于其它用途。

    Apk反编译工具包

    APK反编译说明: 1.用到的工具有三个: (1)apktool.主要负责反编译,得到apk的资源文件,像图片、xml、语言,颜色等等。也可以重新打apk包。 (2)dex2jar.主要将classes.dex,编译为jar包。 (3)jd-gui.主要是将...

    APK防反编译技术

    我们的APK实际上就是一个ZIP压缩文件,里面包含有一个classes.dex,我们编译后生成的程序代码就...由于这些APK反编译工具的存在,我们迫切地希望能有方法去防止别人来反编译我们的APK,从而保护自己的商业机密和利益。

Global site tag (gtag.js) - Google Analytics