安卓学习(一)
字数 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 基础工具安装
-
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
- 删除网络相关权限:
INTERNETACCESS_NETWORK_STATEACCESS_WIFI_STATE
方法二:入口修改
- 定位启动Activity(含
MAIN和LAUNCHER的) - 修改或删除该Activity定义
- 指定新的主Activity
五、流量分析技术
5.1 Fiddler配置
-
基础设置:
- 修改默认端口(建议不使用8888)
- 开启HTTPS抓包:
- Tools > Options > HTTPS
- 勾选"Decrypt HTTPS traffic"
- 配置字体大小
-
WebSocket抓包:
static function OnWebSocketMessage(oMsg: WebSocketMessage) { FiddlerApplication.Log.LogString(oMsg.ToString()); }
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逆向工程的基础知识和实用技能,建议按照章节顺序逐步实践,掌握核心技能点后再进行综合应用。