移动安全Android逆向系列:基本概念&环境配置
字数 1984 2025-08-09 15:23:13

Android逆向工程基础:概念与环境配置

一、Android应用基础概念

1. APK文件结构解析

APK(Android Package Kit)是Android应用的打包格式,其内部结构包含以下关键组件:

  • assets目录:存放需要打包的静态资源文件(图片、JSON配置、二进制数据等),支持任意深度子目录,不生成资源ID
  • lib目录:包含应用所需的.so文件(C/C++编写的原生库)
  • META-INF目录:证书签名相关文件
    • MANIFEST.MF:包含APK中所有非签名文件的SHA1摘要(Base64编码)
    • CERT.SF:对MANIFEST.MF的签名文件(使用SHA1-RSA算法)
    • CERT.RSA:包含公钥和加密算法信息
  • res目录:存放应用资源文件(图片、字符串、颜色等),会生成R.java资源索引
  • AndroidManifest.xml:应用清单文件,声明四大组件(Activity、Service等)
  • classes.dex:Android可执行文件,包含所有Java代码编译后的Dalvik字节码
  • resources.arsc:资源索引表,描述具有ID值的资源配置信息

2. Android虚拟机演进

  • JVM(Java虚拟机)

    • 运行.class文件
    • 不直接用于Android应用执行
  • DVM(Dalvik虚拟机)

    • Android 4.4及之前版本使用
    • 运行.dex文件
    • 通过dx工具将.class转换为.dex
    • 单dex文件限制为65535KB(64K方法限制)
    • 启动时需要合包过程,影响启动速度
  • ART(Android Runtime)

    • Android 5.0+引入
    • 同样运行.dex文件
    • 安装时将dex转换为.oat机器码
    • 原生支持多dex,无合包过程
    • 优点:提升冷启动速度
    • 缺点:APK体积增大,安装时间延长

3. APK打包流程详解

  1. 资源处理:打包资源文件,生成R.java
  2. AIDL处理:生成对应的Java接口文件
  3. 源代码编译:生成.class文件
  4. Dex转换:将.class转换为classes.dex
  5. APK打包:生成未签名的APK文件
  6. 签名:使用开发者证书对APK签名
  7. 对齐处理:优化APK存储结构(zipalign)

二、逆向工程环境配置

1. JDK与JRE安装

  • JDK 8u111推荐版本
    • 包含JRE和开发工具(javac等)
    • 环境变量配置:
      • JAVA_HOME: C:\Program Files\Java\jdk1.8.0_111
      • Path添加: %JAVA_HOME%\bin
      • Path添加: C:\Program Files\Java\jre1.8.0_111\bin

2. Android SDK安装

  • 下载地址:https://www.androiddevtools.cn
  • 关键组件
    • adb工具(Android Debug Bridge)
    • 环境变量配置:
      • C:\sdk\tools
      • C:\sdk\platform-tools

3. Android NDK配置

  • 用途:编译原生代码(so文件)
  • 下载地址:https://developer.android.com/ndk/downloads
  • 环境变量C:\android-ndk-r10e
  • 构建:需配置build文件

4. Android Killer工具详解

  • 功能概述

    • Apk反编译与打包
    • 签名功能
    • 编码转换
    • ADB通信
    • 日志输出与语法高亮
  • 安装配置

    1. 解压至C盘根目录
    2. 配置JDK路径(如遇错误)
    3. 加载额外Apktool工具
  • 基本操作流程

    1. 导入APK文件
    2. 反编译查看结构
    3. 修改目标内容
    4. 回编译生成新APK
    5. 签名对齐处理

三、基础逆向实战示例

1. 修改应用名称

  1. 使用Android Killer反编译目标APK
  2. 工程搜索@string/app_name
  3. 修改对应字符串值为新名称
  4. 回编译并签名新APK
  5. 安装验证修改结果

2. 替换应用图标

  1. 反编译目标APK
  2. 搜索/icon.png定位图标文件
  3. 准备替换图片(必须为有效PNG格式)
  4. 替换res目录下对应图标文件
  5. 回编译并签名新APK
  6. 安装验证图标变更

关键工具与资源

  • 开发工具下载:https://www.androiddevtools.cn
  • NDK文档:参考官方NDK使用入门
  • 打包流程:详细参考Android官方打包流程文档

注意事项

  1. 修改APK后必须重新签名才能安装
  2. 资源文件替换需保持格式一致
  3. 多dex处理需考虑兼容性问题
  4. 逆向工程需遵守相关法律法规
  5. 建议在测试设备或模拟器上进行实验

此文档涵盖了Android逆向工程的基础概念、环境配置和初级操作,为后续深入逆向分析奠定了必要的基础知识和技术准备。

Android逆向工程基础:概念与环境配置 一、Android应用基础概念 1. APK文件结构解析 APK(Android Package Kit)是Android应用的打包格式,其内部结构包含以下关键组件: assets目录 :存放需要打包的静态资源文件(图片、JSON配置、二进制数据等),支持任意深度子目录,不生成资源ID lib目录 :包含应用所需的.so文件(C/C++编写的原生库) META-INF目录 :证书签名相关文件 MANIFEST.MF:包含APK中所有非签名文件的SHA1摘要(Base64编码) CERT.SF:对MANIFEST.MF的签名文件(使用SHA1-RSA算法) CERT.RSA:包含公钥和加密算法信息 res目录 :存放应用资源文件(图片、字符串、颜色等),会生成R.java资源索引 AndroidManifest.xml :应用清单文件,声明四大组件(Activity、Service等) classes.dex :Android可执行文件,包含所有Java代码编译后的Dalvik字节码 resources.arsc :资源索引表,描述具有ID值的资源配置信息 2. Android虚拟机演进 JVM(Java虚拟机) : 运行.class文件 不直接用于Android应用执行 DVM(Dalvik虚拟机) : Android 4.4及之前版本使用 运行.dex文件 通过dx工具将.class转换为.dex 单dex文件限制为65535KB(64K方法限制) 启动时需要合包过程,影响启动速度 ART(Android Runtime) : Android 5.0+引入 同样运行.dex文件 安装时将dex转换为.oat机器码 原生支持多dex,无合包过程 优点:提升冷启动速度 缺点:APK体积增大,安装时间延长 3. APK打包流程详解 资源处理 :打包资源文件,生成R.java AIDL处理 :生成对应的Java接口文件 源代码编译 :生成.class文件 Dex转换 :将.class转换为classes.dex APK打包 :生成未签名的APK文件 签名 :使用开发者证书对APK签名 对齐处理 :优化APK存储结构(zipalign) 二、逆向工程环境配置 1. JDK与JRE安装 JDK 8u111推荐版本 : 包含JRE和开发工具(javac等) 环境变量配置: JAVA_ HOME: C:\Program Files\Java\jdk1.8.0_111 Path添加: %JAVA_HOME%\bin Path添加: C:\Program Files\Java\jre1.8.0_111\bin 2. Android SDK安装 下载地址 :https://www.androiddevtools.cn 关键组件 : adb工具(Android Debug Bridge) 环境变量配置: C:\sdk\tools C:\sdk\platform-tools 3. Android NDK配置 用途 :编译原生代码(so文件) 下载地址 :https://developer.android.com/ndk/downloads 环境变量 : C:\android-ndk-r10e 构建 :需配置build文件 4. Android Killer工具详解 功能概述 : Apk反编译与打包 签名功能 编码转换 ADB通信 日志输出与语法高亮 安装配置 : 解压至C盘根目录 配置JDK路径(如遇错误) 加载额外Apktool工具 基本操作流程 : 导入APK文件 反编译查看结构 修改目标内容 回编译生成新APK 签名对齐处理 三、基础逆向实战示例 1. 修改应用名称 使用Android Killer反编译目标APK 工程搜索 @string/app_name 修改对应字符串值为新名称 回编译并签名新APK 安装验证修改结果 2. 替换应用图标 反编译目标APK 搜索 /icon.png 定位图标文件 准备替换图片(必须为有效PNG格式) 替换res目录下对应图标文件 回编译并签名新APK 安装验证图标变更 关键工具与资源 开发工具下载 :https://www.androiddevtools.cn NDK文档 :参考官方NDK使用入门 打包流程 :详细参考Android官方打包流程文档 注意事项 修改APK后必须重新签名才能安装 资源文件替换需保持格式一致 多dex处理需考虑兼容性问题 逆向工程需遵守相关法律法规 建议在测试设备或模拟器上进行实验 此文档涵盖了Android逆向工程的基础概念、环境配置和初级操作,为后续深入逆向分析奠定了必要的基础知识和技术准备。