`

【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安卓app反编译apk反编译教程.zip_android反编译smali

    本教程将围绕"android安卓app反编译apk反编译教程"这一主题,详细讲解如何进行APK反编译,以及涉及到的相关知识点。 首先,我们要理解什么是APK反编译。APK是Android应用的安装包,包含了应用的所有资源、代码和元...

    AndroidKiller Windows下的Apk反编译工具特别好用.7z

    在移动应用开发与安全分析领域,AndroidKiller是一款在Windows环境下广泛使用的Apk反编译工具,它为开发者和安全研究人员提供了强大的逆向工程能力。本文将详细介绍AndroidKiller的功能、使用方法以及其在Apk分析中...

    android apk反编译

    在Android应用开发中,APK文件是应用程序的打包格式,包含了所有运行所需代码、资源和配置文件。"Android APK反编译"是一个针对APK文件进行逆向工程的过程,旨在揭示其内部工作原理,理解代码逻辑,或者进行二次开发...

    Android APK反编译文件

    在Android应用开发中,APK文件是应用程序的打包格式,包含了所有运行在Android设备上的代码、资源和配置信息。本文将深入探讨“Android APK反编译文件”这一主题,包括如何进行反编译,以及反编译过程中的关键知识点...

    Androidapk反编译之androidAPK有效加密方法.pdf

    Android APK 反编译之有效防止破解和反编译加密方法主要包括混淆代码、防二次打包和 DEX、RES、SO 库等文件加密等。通过这些方法,我们可以有效防止 Android APK 被破解和反编译,保护 Android APP 的安全。

    android_apk反编译工具

    在Android应用开发中,APK文件是应用程序的打包格式,它包含了所有运行所需资源和代码。然而,出于安全和隐私考虑,APK文件通常被混淆和加密,使得直接查看源码变得困难。为了分析、学习或者调试APK,开发者有时需要...

    android apk 反编译Android APK反编译得到Java源代码和资源文件.docx

    - 这个命令将把APK反编译并解压到指定的输出文件夹中,包含所有的资源文件,如图片、布局XML、字符串资源等。 4. 如果需要重新打包APK,只需在同一个命令行窗口输入`apktool b c:\***文件夹`,这里`c:\***文件夹`...

    android反编译,apk反编译步骤及工具

    3. **Apktool**: Apktool是一个强大的Android APK反编译工具,可以解压APK,反编译资源文件(如XML布局),并将它们重新打包回APK。它不直接反编译Java代码,但可以与dex2jar和JD-GUI等工具结合使用。 4. **...

    APK反编译方法以及使用方法_android开发

    APK反编译是Android开发中的一个重要环节,它主要用于软件逆向工程,安全分析,漏洞检测,以及学习和研究其他应用的实现方式。本篇将详细介绍APK反编译的方法和使用过程。 首先,我们需要了解APK的结构。APK是...

    apk反编译工具

    APK反编译工具是Android应用开发者和安全研究人员常用的软件,用于查看和分析APK文件的内部结构。这些工具能够将APK中的二进制XML和.dex(Dalvik执行)文件转换成人类可读的形式,便于理解应用的工作原理、提取资源...

    Android APK 反编译工具附带教程

    有时,开发者或者安全研究人员为了学习、分析或调试其他人的应用程序,会使用APK反编译工具。这个“Android APK 反编译工具附带教程”就是为此目的提供的一份指南。 首先,我们要理解什么是APK反编译。反编译是将已...

    android apk反编译完整工具与详细反编译步骤

    在Android应用开发中,APK文件是应用程序的打包格式,其中包含了所有的代码、资源和元数据。有时,为了分析、调试或学习其他应用的实现,开发者可能会需要对APK进行反编译。本文将详细讲解如何使用完整的APK反编译...

    Android反编译APK查看

    在Android开发领域,有时我们需要对已有的APK应用进行反编译来查看其源代码、资源文件或了解其工作原理。这通常是出于学习、调试、安全分析或逆向工程的目的。本文将详细介绍如何使用名为JD-GUI的工具来实现Android ...

    android反编译工具(dex2jar,apk2java)

    在Android应用开发中,有时需要对已有的APK文件进行逆向工程,以理解其工作原理、学习技术或排查问题。这就是反编译工具的作用。本文将详细介绍两款常用的Android反编译工具——dex2jar和apk2java,以及如何利用它们...

    Android APK反编译工具集合

    在Android开发领域,APK反编译是一种常见的技术手段,用于理解、分析或者修改已有的应用程序。本资源包集合提供了一系列的Android APK反编译工具,帮助开发者或安全研究人员深入洞察APK文件的内部结构,了解其工作...

    APK反编译工具

    在Android应用开发领域,了解如何对APK进行反编译是非常重要的技能,这有助于开发者学习他人的代码实现、分析恶意软件行为或者进行二次开发。本资源包提供的是一套完整的APK反编译工具集合,包括apktool、auto-sign...

    安卓android apk 反编译步骤

    安卓Android APK反编译是开发者或逆向工程师为了查看、分析或修改APK内部代码和资源的一种技术。以下是一个详细的步骤,帮助你理解如何进行这个过程: 1. **准备工作**:首先,你需要下载两个关键工具,分别是`dex2...

    apk反编译软件

    在Android应用开发领域,APK反编译是一个重要的技术环节,它涉及到软件安全、逆向工程和代码分析等多个方面。本文将深入探讨“apk反编译软件”这一主题,包括其概念、用途、常用工具以及相关知识。 首先,我们要...

    Android APK 反编译软件

    在Android应用开发中,APK文件是应用程序的打包格式,类似于Windows中的.exe可执行文件。APK反编译是将已编译的APK文件还原为源代码或可理解的中间语言,以便开发者分析、修改或学习应用的工作原理。本文将深入探讨...

    Android-apk反编译工具

    在Android开发领域,APK反编译是一种常见的技术手段,用于理解APK应用程序的工作原理、逆向工程或安全分析。本文将深入探讨Android APK反编译工具及其应用。 首先,我们要明白什么是APK。APK是Android应用程序的...

Global site tag (gtag.js) - Google Analytics