安卓学习(一)
字数 2137 2025-08-09 19:33:17

Android逆向工程基础教学文档

一、Android基础架构

1.1 APK文件结构

  • assets目录:存放未编译资源文件,如js、html等
  • lib目录:存放so本地库文件
    • armeabi:ARMv5兼容版本
    • armeabi-v7a:ARMv7版本
    • arm64-v8a:64位ARM版本
    • x86/x86_64:Intel架构版本
  • META-INF:存放APK签名信息
  • res目录:存放编译后的资源文件(布局、图标等)
  • AndroidManifest.xml:应用清单文件(权限声明、组件注册等)
  • resources.arsc:编译后的资源索引表
  • classes.dex:Dalvik/ART虚拟机可执行文件

1.2 Android虚拟机演变

  • JVM:执行.class文件
  • DVM(Dalvik)
    • 执行.dex文件
    • 采用JIT(Just-In-Time)即时编译
    • 存在65535方法数限制
  • ART(Android Runtime)
    • 从Android 5.0开始采用
    • 使用AOT(Ahead-Of-Time)预编译
    • 将.dex转换为.oat文件
    • 原生支持多dex

二、开发环境配置

2.1 基础工具安装

  1. Java环境

    • 安装JDK
    • 配置环境变量(JAVA_HOME, PATH)
    • 验证:java -version
  2. Android开发工具

    • ADT Bundle(绿色版)
    • Eclipse集成开发环境
    • 配置:
      • Java编译环境
      • 运行环境
      • UTF-8编码支持
      • 代码提示功能(配置abcdefghijklmnopqrstuvwxyz)

三、逆向工程工具

3.1 AndroidKiller

功能特点

  • APK反编译/打包/签名
  • 编码转换
  • ADB通信管理
  • 强大的代码搜索功能

配置步骤

  1. 安装SDK并配置环境变量
  2. 安装NDK
  3. 配置Java路径
  4. 配置Apktool路径

核心功能

  • 工程信息查看
  • 工程管理器
  • 工程搜索(支持代码段搜索)
  • 历史记录管理
  • 文本编码转换

3.2 其他逆向工具

  1. Android逆向助手

    • Dex2Jar
    • Apk反编译
    • Apk签名
  2. Jadx

    • 命令行:jadx -d out classes.dex
    • 将dex反编译为Java代码
  3. JEB

    • 专业逆向工具
    • 快捷键:
      • Q:Smali↔Java转换
      • Ctrl+B:设置断点
  4. IDA Pro

    • 本地代码分析
    • 需关闭杀毒软件安装

3.3 辅助工具

  1. APK Helper

    • 快速查看包名等基本信息
  2. PKiD

    • 快速检测APK加壳情况

四、实战案例

4.1 修改应用名称

  1. 反编译目标APK
  2. 搜索@string/app_name
  3. 定位到strings.xml中的对应值
  4. 修改并保存
  5. 重新编译APK

4.2 替换应用图标

  1. 准备PNG格式图标(勿直接修改后缀)
  2. 搜索@drawable/icon
  3. 替换res目录下所有相关图标文件
  4. 重新编译APK

4.3 去除广告

方法一:权限删除

  1. 分析AndroidManifest.xml
  2. 删除网络相关权限:
    • INTERNET
    • ACCESS_NETWORK_STATE
    • ACCESS_WIFI_STATE

方法二:入口修改

  1. 定位启动Activity(含MAINLAUNCHER的)
  2. 修改或删除该Activity定义
  3. 指定新的主Activity

五、流量分析技术

5.1 Fiddler配置

  1. 基础设置

    • 修改默认端口(建议不使用8888)
    • 开启HTTPS抓包:
      • Tools > Options > HTTPS
      • 勾选"Decrypt HTTPS traffic"
    • 配置字体大小
  2. WebSocket抓包

    static function OnWebSocketMessage(oMsg: WebSocketMessage) {
      FiddlerApplication.Log.LogString(oMsg.ToString());
    }
    

5.2 HTTP Debugger Pro

  • 可视化抓包工具
  • 支持HTTPS分析

5.3 Burp Suite配置

  1. 代理设置

    • 本机IP
    • 自定义端口
  2. 模拟器配置

    • WLAN长按修改网络
    • 设置手动代理
  3. HTTPS证书安装

    • 导出Burp的CA证书
    • 导入到模拟器
    • 设置信任凭据

六、调试技术

6.1 动态调试准备

  1. 设备选择

    • 推荐逍遥模拟器/雷电模拟器
    • 注意性能问题(不建议在虚拟机中运行模拟器)
  2. 调试环境

    • 配置ADB连接
    • 确保设备可调试

6.2 常用调试方法

  1. Logcat分析

    • 通过DDMS查看
    • 过滤关键日志
  2. Smali调试

    • 使用JEB或AndroidKiller
    • 关键断点设置
  3. Native调试

    • 使用IDA Pro附加进程
    • 分析so文件逻辑

七、注意事项

  1. 签名问题

    • 修改APK后需重新签名
    • 系统验证签名可能失败(需破解系统或使用模拟器)
  2. 兼容性问题

    • 注意32/64位版本差异
    • 多DEX文件处理
  3. 法律风险

    • 仅用于学习研究
    • 勿用于非法用途
  4. 性能优化

    • 大型APK分析时注意内存使用
    • 复杂操作分批进行

八、学习资源

  1. 官方文档:

    • Android开发者网站
    • Smali语法参考
  2. 社区资源:

    • 奇安信攻防社区
    • FreeBuf等安全论坛
  3. 工具下载:

    • 官方工具链
    • GitHub开源项目

本教学文档涵盖了Android逆向工程的基础知识和实用技能,建议按照章节顺序逐步实践,掌握核心技能点后再进行综合应用。

Android逆向工程基础教学文档 一、Android基础架构 1.1 APK文件结构 assets目录 :存放未编译资源文件,如js、html等 lib目录 :存放so本地库文件 armeabi:ARMv5兼容版本 armeabi-v7a:ARMv7版本 arm64-v8a:64位ARM版本 x86/x86_ 64:Intel架构版本 META-INF :存放APK签名信息 res目录 :存放编译后的资源文件(布局、图标等) AndroidManifest.xml :应用清单文件(权限声明、组件注册等) resources.arsc :编译后的资源索引表 classes.dex :Dalvik/ART虚拟机可执行文件 1.2 Android虚拟机演变 JVM :执行.class文件 DVM(Dalvik) : 执行.dex文件 采用JIT(Just-In-Time)即时编译 存在65535方法数限制 ART(Android Runtime) : 从Android 5.0开始采用 使用AOT(Ahead-Of-Time)预编译 将.dex转换为.oat文件 原生支持多dex 二、开发环境配置 2.1 基础工具安装 Java环境 : 安装JDK 配置环境变量(JAVA_ HOME, PATH) 验证: java -version Android开发工具 : ADT Bundle(绿色版) Eclipse集成开发环境 配置: Java编译环境 运行环境 UTF-8编码支持 代码提示功能(配置abcdefghijklmnopqrstuvwxyz) 三、逆向工程工具 3.1 AndroidKiller 功能特点 : APK反编译/打包/签名 编码转换 ADB通信管理 强大的代码搜索功能 配置步骤 : 安装SDK并配置环境变量 安装NDK 配置Java路径 配置Apktool路径 核心功能 : 工程信息查看 工程管理器 工程搜索(支持代码段搜索) 历史记录管理 文本编码转换 3.2 其他逆向工具 Android逆向助手 : Dex2Jar Apk反编译 Apk签名 Jadx : 命令行: jadx -d out classes.dex 将dex反编译为Java代码 JEB : 专业逆向工具 快捷键: Q:Smali↔Java转换 Ctrl+B:设置断点 IDA Pro : 本地代码分析 需关闭杀毒软件安装 3.3 辅助工具 APK Helper : 快速查看包名等基本信息 PKiD : 快速检测APK加壳情况 四、实战案例 4.1 修改应用名称 反编译目标APK 搜索 @string/app_name 定位到strings.xml中的对应值 修改并保存 重新编译APK 4.2 替换应用图标 准备PNG格式图标(勿直接修改后缀) 搜索 @drawable/icon 替换res目录下所有相关图标文件 重新编译APK 4.3 去除广告 方法一:权限删除 分析AndroidManifest.xml 删除网络相关权限: INTERNET ACCESS_NETWORK_STATE ACCESS_WIFI_STATE 方法二:入口修改 定位启动Activity(含 MAIN 和 LAUNCHER 的) 修改或删除该Activity定义 指定新的主Activity 五、流量分析技术 5.1 Fiddler配置 基础设置 : 修改默认端口(建议不使用8888) 开启HTTPS抓包: Tools > Options > HTTPS 勾选"Decrypt HTTPS traffic" 配置字体大小 WebSocket抓包 : 5.2 HTTP Debugger Pro 可视化抓包工具 支持HTTPS分析 5.3 Burp Suite配置 代理设置 : 本机IP 自定义端口 模拟器配置 : WLAN长按修改网络 设置手动代理 HTTPS证书安装 : 导出Burp的CA证书 导入到模拟器 设置信任凭据 六、调试技术 6.1 动态调试准备 设备选择 : 推荐逍遥模拟器/雷电模拟器 注意性能问题(不建议在虚拟机中运行模拟器) 调试环境 : 配置ADB连接 确保设备可调试 6.2 常用调试方法 Logcat分析 : 通过DDMS查看 过滤关键日志 Smali调试 : 使用JEB或AndroidKiller 关键断点设置 Native调试 : 使用IDA Pro附加进程 分析so文件逻辑 七、注意事项 签名问题 : 修改APK后需重新签名 系统验证签名可能失败(需破解系统或使用模拟器) 兼容性问题 : 注意32/64位版本差异 多DEX文件处理 法律风险 : 仅用于学习研究 勿用于非法用途 性能优化 : 大型APK分析时注意内存使用 复杂操作分批进行 八、学习资源 官方文档: Android开发者网站 Smali语法参考 社区资源: 奇安信攻防社区 FreeBuf等安全论坛 工具下载: 官方工具链 GitHub开源项目 本教学文档涵盖了Android逆向工程的基础知识和实用技能,建议按照章节顺序逐步实践,掌握核心技能点后再进行综合应用。