INFO5995 Assignment 1 Task 1 - APK 逆向工程分析指南
INFO5995 Assignment 1 Task 1 - APK 逆向工程分析指南
本文档详细解析 APK 逆向工程作业的完整流程,帮助理解如何分析 Android 应用并发现安全漏洞。
1. 作业概述
这是一个 APK 逆向工程 作业,核心任务是: - 分析给定的 Android APK 文件 - 找出应用的基本信息(包名、入口 Activity) - 发现潜在的安全漏洞
2. 文件夹结构
apk_analysis_20260312_2119/ |
3. 工具介绍
| 工具 | 作用 |
|---|---|
| apktool | 把 APK 解包,得到 smali 代码和 AndroidManifest.xml |
| jadx | 把 APK 反编译成 Java 源码(更可读) |
| aapt | 查看 APK 的基本信息(包名、入口 Activity) |
| rg (ripgrep) | 在源码里搜索关键词 |
3.1 环境配置
# 安装工具 |
4. 分析流程
Step 1: 基础信息提取
APK="/absolute/path/to/app.apk" |
输出示例: package: name='com.example.mastg_test0016'
launchable-activity: name='com.example.mastg_test0016.MainActivity'
Step 2: 反编译 APK
# 用 apktool 解包 |
Step 3: 查找关键文件
# 查看 AndroidManifest.xml |
5. 作业要求与答案
5.1 必须提交的内容
| 序号 | 要求 | 示例答案 |
|---|---|---|
| 1 | Package Name | com.example.mastg_test0016 |
| 2 | Main Activity | com.example.mastg_test0016.MainActivity |
| 3 | Manifest 文件路径 | apktool/AndroidManifest.xml |
| 4 | Login 类文件路径 | jadx/sources/com/example/mastg_test0016/Login.java |
| 5 | 发现的漏洞 | 使用 java.util.Random 生成 session token |
5.2 证据格式
每个答案需要包含: - 值(Value):具体的内容 - 证据(Evidence):从哪里发现的(命令输出、文件路径+行号)
6. 发现的漏洞分析
6.1 漏洞位置
- 文件:
jadx/sources/com/example/mastg_test0016/Login.java - 函数:
generateSessionToken()
6.2 漏洞代码
private String generateSessionToken() { |
6.3 漏洞危害
问题:使用 java.util.Random 生成
session token
为什么不安全: - Random 是伪随机数生成器(PRNG),不是密码学安全的 - 攻击者可以通过分析应用源码了解随机数生成逻辑 - 一旦知道种子或生成规律,可以预测后续的 token
影响: - 可能导致会话劫持(Session Hijacking) - 攻击者可以伪造有效用户的 session token - 绕过身份验证
6.4 修复建议
应使用密码学安全的随机数生成器:
// 正确做法:使用 SecureRandom |
7. 核心知识点
7.1 APK 是什么
- APK = Android Package,即 Android 应用的安装包
- 本质是一个 ZIP 文件,包含编译后的代码、资源、清单文件
7.2 为什么要逆向工程
- 因为没有原始源码,只有编译后的 APK
- 通过工具可以"反编译"回近似源码
7.3 安全漏洞类型
- Cryptographic Misuse:密码学误用
- 使用不安全的随机数生成器
- 使用弱加密算法
- 硬编码密钥
8. 总结
这个作业训练的核心能力:
- 工具使用:apktool、jadx、aapt、rg
- 静态分析:读代码、找问题
- 安全意识:识别密码学误用(Cryptographic Misuse)
核心发现:该应用使用 java.util.Random
生成 session token,这是不安全的,可能导致会话劫持。
参考资料
- Android Manifest 文档
- OWASP Mobile Top 10
- Java SecureRandom API