Android 逆向ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )相关的知识,希望对你有一定的参考价值。

文章目录

前言

之前写的 ApkTool 相关博客 :





一、ApkTool 简介



参考 【Android 安全】DEX 加密 ( 常用 Android 反编译工具 | apktool | dex2jar | enjarify | jd-gui | jadx ) 一、apktool 博客章节 ;

官网地址 : https://ibotpeaches.github.io/Apktool/

文档地址 : https://ibotpeaches.github.io/Apktool/documentation/





二、ApkTool 解包和打包



ApkTool 的最重要的两个作用是 解包 和 打包 ;

  • 解包 : 拿到 APK 文件 , 如果按照 zip 格式解压出来 , xml 文件都是乱码 ; APK 文件打包时 , 会将 xml 文件进行压缩转为二进制文件 , 以减小体积 ; 解包时 , 必须使用 ApkTool 解包工具 , 将二进制数据格式的 xml 文件转为 文本 xml 文件 , 才能获取刻度的 xml 文件 ;
  • 打包 : 将使用 ApkTool 工具解包后的零散文件 , 再次打包成 APK 文件 ,

如果 APK 文件进行了加固处理 , 那么解包无法获取正确的 dex / so / 资源文件 , 无法进行重打包 ;

重打包操作 : 使用 ApkTool 工具 , 将 APK 解包 , 修改或注入 so 文件 , 然后再进行重打包 ;



1、使用 apktool 解包


执行 java -jar apktool_2.4.1.jar d demo.apk -o demo 命令 ,

java -jar apktool_2.4.1.jar d demo.apk -o demo

其中 d 后面是 要反编译的 apk 文件 ,

-o demo 的含义是 将反编译结果输出到 demo 目录中 ;

反编译过程 :

查看其中的 androidManifest.xml 文件 , 可以看到真实的文件内容 ;



2、使用 apktool 打包


将反编译后的文件 重新打包 ;

java -jar apktool_2.4.1.jar b demo -o demo_repackage.apk

b demo 是指定 要打包 demo 目录 ;

-o demo_repackage.apk 是指定新打包的 应用安装文件是 demo_repackage.apk ;

重新打包过程 :

Android 逆向使用 Python 编写 APK 批处理分析工具





一、涉及到的工具和脚本



apktool.jar : 反编译 APK 文件使用到的工具 ; 参考 【Android 逆向】Android 逆向工具 ( Apktool | IDA | Python ) 一、Apktool 博客章节 ;

aapt.exe : 资源打包工具 ;

ApkTool.py : 这是一个 Python 脚本 , 主要是使用 apktool.jar 和 aapt.exe 工具 , 对 APK 文件进行各种操作 ; 该脚本是 【Android 逆向】APK 文件处理脚本 ApkTool.py ( 脚本简介 | 用法 | 分析 APK 文件 ) 博客中的脚本 ;





二、使用 Python 编写 APK重打包工具



程序结构 : apk 目录是存放所有的 apk 文件的 , 该目录中的文件可以被一次性处理 ;

main.py 是主程序 , ApkTool.py 是通过系统调用调用的脚本 ;

apktool.jar 和 aapt.exe 是 ApkTool.py 脚本用到的工具 ;

Python 代码如下 :

# coding=utf-8
# 导入系统命令
import os


# 对 APK 文件进行批处理
def batch_apk():
    # 列出 apk 目录下的所有文件
    for f in os.listdir('apk'):
        # 文件名长度超过 4 个字符
        if len(f) > 4:
            # 从后面 4 字节到结尾是 .apk ,
            # 则该文件是 APK 文件 , 对该文件进行解包
            if f[-4:] == '.apk':
                os.system('python ApkTool.py -analyse -inapk apk/' + f)


# 主函数入口
if __name__ == '__main__':
    batch_apk()

执行结果 :





三、博客源码



GitHub : https://github.com/han1202012/APK

以上是关于Android 逆向ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 逆向工具 ( Apktool | IDA | Python )

Android 逆向使用 Python 编写 APK 批处理分析工具

Android 逆向使用 Python 编写 APK 批处理分析工具

Android 逆向逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 )

Android 逆向修改 Android 的 apk 安装包内的文件并重新打包 ( apktool_2.6.0.jar 下载和使用 | zipalign 文件对齐 | apksigner 签名 )

Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正