本教程仅用于学习和安全研究目的,未经授权对任何应用进行攻击、篡改或窃取数据都是非法行为,并会带来严重的法律后果,请务必在您自己拥有或获得明确授权的应用上进行测试。

第一部分:理解 Per-App Hacking 是什么
Per-App Hacking 指的是针对单个移动应用程序(Android 或 iOS)进行的安全测试和漏洞挖掘,与攻击整个手机系统不同,它的焦点是应用本身,包括其代码、数据存储、网络通信、认证机制等。
核心目标:
- 发现漏洞: 找出应用在设计或实现上的安全缺陷。
- 提升安全性: 帮助开发者和厂商修复这些漏洞,保护用户数据。
- 逆向工程: 理解应用的工作原理,尤其是在白盒测试或分析恶意软件时。
第二部分:核心概念与原理
在进行 Per-App Hacking 之前,你需要了解几个核心概念:
-
应用打包与运行:
(图片来源网络,侵删)- Android: 应用被打包成 APK (Android Package Kit) 文件,本质上是 ZIP 压缩包,包含代码(Dex/Odex)、资源、清单文件等,在 Dalvik/ART 虚拟机上运行。
- iOS: 应用被打包成 IPA (iOS App Store Package) 文件,本质上是带有签名的 ZIP 压缩包,包含可执行文件(Mach-O 格式)、资源、配置文件等,在 iOS 系统沙盒中运行。
-
沙盒机制:
- Android: 每个应用都有自己独立的私有存储空间 (
/data/data/<package.name>/),默认情况下,应用无法访问其他应用的私有数据。 - iOS: 沙盒机制更为严格,每个应用都有独立的文件系统、内存空间和进程,应用间的通信受到严格限制。
- Android: 每个应用都有自己独立的私有存储空间 (
-
网络通信:
大多数应用通过网络 API 与服务器交互,这是最常见的攻击面,涉及抓包、重放、篡改请求/响应等。
-
本地数据存储:
(图片来源网络,侵删)应用可能会在本地设备上存储敏感信息,如用户凭证、会话令牌、个人数据等,我们需要检查这些存储方式是否安全。
-
代码安全:
代码中可能存在硬编码的密钥、不安全的逻辑、可以被利用的漏洞等。
第三部分:Per-App Hacking 的通用流程
一个完整的 Per-App Hacking 流程通常包括以下步骤:
步骤 1:信息收集
这是所有攻击的起点,目标是尽可能多地了解目标应用。
-
静态分析:
- 工具:
Apktool,Jadx,Ghidra,Hopper Disassembler,class-dump(for iOS)。 - 反编译/反汇编: 将 APK/IPA 解包,并反编译其代码为可读的 Java/Swift/Objective-C 代码或伪代码。
- 分析
AndroidManifest.xml/Info.plist: 查看应用的权限、组件(Activity, Service, BroadcastReceiver)、入口点、URL Scheme 等。 - 查找硬编码信息: 在代码和资源文件中搜索 API 密钥、密码、URL、加密算法等。
- 分析资源文件: 查看布局、图片、字符串等,理解应用界面和功能。
- 工具:
-
动态分析:
- 工具:
Frida,Xposed,Substrate,Logcat(Android),oslog/syslog(iOS),Frida-iOS-Dumper。 - 安装并运行应用: 在真实设备或模拟器上安装并打开应用。
- 日志监控: 使用
Logcat(Android) 或系统日志 (iOS) 捕获应用运行时输出的日志,可能会泄露敏感信息或调试信息。 - 监控文件系统: 使用
Frida或iFunBox等工具监控应用在沙盒目录下的文件读写操作,特别是SharedPreferences(Android) 或UserDefaults(iOS) 等配置文件。 - 网络抓包: 使用
Burp Suite,Wireshark,Charles Proxy等工具抓取应用的网络流量,分析 API 端点、请求参数、响应数据等。
- 工具:
步骤 2:漏洞识别与分析
基于收集到的信息,开始寻找潜在的漏洞点。
- 常见漏洞类型:
- 不安全的网络通信: API 使用 HTTP 而非 HTTPS、证书校验不严格(允许中间人攻击)。
- 不安全的本地存储: 敏感信息(如 Token, 密码)以明文形式存储在 SharedPreferences/UserDefaults 或数据库中。
- 硬编码的敏感信息: API Key, Secret, 加密密钥直接写在代码里。
- 不完善的认证/授权机制: 绕过登录、越权访问(水平越权、垂直越权)。
- 代码注入: 应用未对用户输入进行充分过滤,可能导致 SQL 注入、命令注入等。
- 不安全的组件导出: Android 中的 Activity/Service 等组件被错误地导出,可以被其他应用调用,导致安全风险。
- SSL Pinning 绕过: 应用固定了服务器证书,防止中间人攻击,但实现不严谨,可以被动态调试工具(如 Frida)绕过。
步骤 3:漏洞利用
找到漏洞后,尝试利用它来达到特定目的(如获取数据、提升权限等)。
- 利用工具:
- Frida: 这是 Per-App Hacking 的瑞士军刀,它是一个动态代码插桩工具,允许你在运行时向进程注入 JavaScript 或 Python 代码,可以用来:
- Hook(拦截)任何函数调用,打印其参数和返回值。
- 修改函数的参数或返回值。
- 绕过 SSL Pinning。
- 调用原本无法直接调用的内部函数。
- Burp Suite: 用于抓包和重放攻击,测试 API 的安全性。
- SQLMap: 自动化的 SQL 注入工具。
- 自定义脚本: 编写 Python 或 Shell 脚本来自动化测试流程。
- Frida: 这是 Per-App Hacking 的瑞士军刀,它是一个动态代码插桩工具,允许你在运行时向进程注入 JavaScript 或 Python 代码,可以用来:
步骤 4:后渗透与报告
- 后渗透: 成功利用漏洞后,可以尝试进一步探索,比如获取更多数据、提权(如果可能)、持久化控制等。
- 编写报告: 一个专业的漏洞报告应包含:漏洞描述、风险等级、复现步骤、证据截图、修复建议等。
第四部分:Android vs. iOS 的关键区别
| 特性 | Android | iOS |
|---|---|---|
| 开放性 | 非常开放,可以轻松安装非官方来源的应用,获取 root 权限。 | 非常封闭,应用必须通过 App Store,获取越狱权限复杂且有风险。 |
| 应用格式 | .apk (可解压,可反编译) |
.ipa (需要特殊工具解压,代码加密) |
| 主要工具 | Apktool, Jadx, Frida, Burp Suite, ADB |
Frida, Objection, Burp Suite, class-dump, Cycript |
| Hook/调试 | 相对容易,可以直接 Hook Java/Kotlin 层代码。 | 相对困难,需要处理代码混淆、加壳、以及苹果的安全机制(如 ptrace 禁用),越狱后更容易。 |
| 数据存储 | /data/data/<package.name>/ 目录,SQLite 数据库,SharedPreferences。 |
应用沙盒目录,SQLite 数据库,UserDefaults。 |
| 网络抓包 | 需要设置代理或安装证书(用户需手动信任)。 | 必须安装根证书,并且需要信任该证书(用户需手动信任),越狱后可以使用 SSLKillSwitch 等工具绕过。 |
| SSL Pinning | 可以通过 Frida Hook 相关的 TrustManager 或网络库(如 OkHttp)来绕过。 |
可以通过 Frida Hook NSURLConnection 或 NSURLSession 相关的类来绕过,越狱后有更强大的工具。 |
第五部分:学习资源与推荐工具
推荐工具列表
- 通用:
- Burp Suite: Web 应用和应用 API 测试的必备工具。
- Frida: 动态插桩神器,是 Per-App Hacking 的核心。
- Android:
- Apktool: 反
