本教程的内容仅用于授权下的安全研究、学习和教育目的,未经明确书面许可,对任何不属于你的应用程序进行渗透测试都是违法行为,请务必遵守当地法律法规和道德准则。

Per App Hacking 的核心思想是,将你的移动设备(Android 或 iOS)看作一个“沙箱”,专注于分析和攻击单个应用程序本身,而不是整个操作系统,这通常涉及到抓取应用的网络流量、分析其本地存储的数据、逆向工程其逻辑等。
下面我将从通用思路、Android 平台、iOS 平台以及实战技巧和工具四个方面,为你提供一个结构化的教程。
Per App Hacking 的通用思路与流程
无论针对哪个平台,一个完整的 Per App Hacking 流程通常包括以下几个步骤:
-
信息收集
(图片来源网络,侵删)- 目标应用: 获取应用的 APK (Android) 或 IPA (iOS) 文件。
- 应用基本信息: 包名、应用 ID、版本号、开发者信息等。
- 服务器信息: 如果应用有后端 API,尝试发现其域名、IP 地址、端口和技术栈。
-
静态分析
- 目的: 在不运行应用的情况下,分析其代码和资源,了解其功能、逻辑和潜在弱点。
- 查看应用的权限请求。
- 分析
AndroidManifest.xml(Android) 或Info.plist(iOS)。 - 反编译代码,查看关键逻辑(如加密算法、密钥、API 端点)。
- 查看硬编码的敏感信息(如 API 密钥、URL、密码等)。
-
动态分析
- 目的: 在真实运行环境中监控应用的行为,这是 Per App Hacking 的核心。
- 网络流量抓取: 捕获应用与服务器之间所有的通信数据(HTTP/HTTPS)。
- 文件系统分析: 检查应用在设备上存储了哪些数据(如 SQLite 数据库、SharedPreferences、文件缓存)。
- 日志监控: 捕获应用的
Logcat(Android) 或syslog(iOS) 输出,寻找敏感信息或错误。 - API 调用监控: 实时追踪应用调用了哪些 API,以及传入了什么参数。
-
漏洞利用与测试
- 目的: 基于前两步的分析结果,尝试发现并利用安全漏洞。
- 常见测试项:
- 不安全的直接对象引用: 修改 ID 参数来访问其他用户的数据。
- 身份认证与会话管理漏洞: 测试弱密码、会话固定、越权访问等。
- 数据泄露: 检查敏感信息是否明文存储或传输。
- 业务逻辑漏洞: 比如支付绕过、优惠券滥用等。
- API 漏洞: 如未授权访问、过度暴露、SQL 注入等。
-
报告与修复建议
(图片来源网络,侵删)将发现的漏洞、复现步骤、风险等级和修复建议整理成报告。
Android 平台 Per App Hacking 教程
Android 由于其开放性,是进行 Per App Hacking 的理想平台。
环境准备
- 物理设备/模拟器:
- 物理设备 (推荐): 一台已解锁 Bootloader 并 Root 的 Android 手机,Root 权限能让你获得最高级别的访问权限。
- 模拟器: 使用 Genymotion 或 Android Studio 自带的模拟器,它们可以方便地开启 Root 模式。
- 核心工具:
- ADB (Android Debug Bridge): 用于与设备通信。
- Burp Suite / OWASP ZAP: 用于抓取和篡改网络流量。
- Frida: 动态插桩工具,用于在运行时 Hook 和修改应用的函数调用,是动态分析的利器。
- JADX / JEB / Apktool: 用于反编译 APK,进行静态分析。
- SQLite Browser: 用于查看应用的 SQLite 数据库。
实战步骤
安装并配置应用
- 将 APK 文件传输到你的设备上并安装。
- 在设备上打开开发者选项,并启用“USB 调试”。
- 连接设备到电脑,在终端中运行
adb devices确认连接成功。
抓取网络流量 (HTTP)
- 在电脑上配置好 Burp Suite,确保监听端口(默认 8080)是开启的。
- 在手机上设置代理:Wi-Fi -> 修改网络 -> 高级选项 -> 代理 -> 手动,将代理服务器设置为你的电脑 IP,端口设置为 8080。
- 在手机上信任 Burp Suite 的 SSL 证书(通过
http://burp下载并安装)。 - 打开目标应用,进行一系列操作,所有 HTTP 流量都会被 Burp Suite 拦截和分析。
抓取网络流量 (HTTPS)
- 对于 HTTPS 流量,由于证书校验,需要让应用信任 Frida 的证书。
- 使用 Frida 的
android-ssl-pinning-bypass脚本,在应用启动时 Hook 相关的证书校验函数,从而绕过 SSL Pinning,这是 Per App Hacking 中最常见也最重要的一步。
文件系统分析
-
如果设备已 Root,可以直接使用 ADB 命令导出数据:
# 导出应用的数据库文件 (通常在 /data/data/<包名>/databases/) adb shell "su -c 'cp /data/data/com.example.app/databases/mydb.db /sdcard/'" adb pull /sdcard/mydb.db # 导出 SharedPreferences 文件 adb shell "su -c 'cp /data/data/com.example.app/shared_prefs/settings.xml /sdcard/'" adb pull /sdcard/settings.xml
-
使用 SQLite Browser 打导出的
.db文件,分析数据。
动态插桩与 Hook
- 安装 Frida 服务端到你的设备上。
- 在电脑上,使用 Frida 脚本 Hook 关键函数,Hook 一个登录函数,打印出用户名和密码:
// hook.js Java.perform(function() { var MainActivity = Java.use("com.example.app.MainActivity"); MainActivity.login.implementation = function(username, password) { console.log("Username: " + username); console.log("Password: " + password); return this.login(username, password); }; }); - 在终端运行 Frida 脚本:
frida -U -f com.example.app -l hook.js --no-pause
- 在手机上启动应用并执行登录操作,你将在电脑终端看到打印出的敏感信息。
iOS 平台 Per App Hacking 教程
iOS 的封闭性使得 Per App Hacking 更具挑战性,但依然有办法。
环境准备
- 设备: 一台已越狱的 iOS 设备,非越狱设备能做的事情非常有限。
- 核心工具:
- Cydia / Sileo: 越狱后的应用商店,用于安装工具。
- Frida: 同样是动态分析的王者,iOS 版本也需要在设备上安装服务端。
- Burp Suite / OWASP ZAP: 用于抓包。
- class-dump / otool: 用于静态分析二进制文件。
- iFile / Filza: 越狱环境下的文件管理器,可浏览应用的沙盒目录。
实战步骤
安装并配置应用
- 通过 Cydia 安装 Frida 服务端。
- 在电脑上安装 Frida 客户端 (
pip install frida-tools)。 - 将 IPA 文件安装到设备上。
抓取网络流量
iOS 的网络配置与 Android 类似,但证书安装更复杂。
- 在电脑上配置好 Burp Suite。
- 在 iOS 的“设置” -> “无线局域网”中,点击当前 Wi-Fi 的 “i” 图标,配置代理为手动,填入电脑 IP 和 Burp 端口。
- 在 iOS 的“通用” -> “关于本机” -> “证书信任设置”中,打开对 Burp Suite SSL 代理的信任,这一步通常需要设备已安装 Burp 的根证书。
- 打开应用,流量即可被 Burp Suite 拦截。
绕过 SSL Pinning
- 和 Android 一样,Frida 是绕过 iOS SSL Pinning 的首选方法。
- 使用类似的 Hook 脚本,针对 iOS 中常用的网络库(如
AFNetworking,URLSession,AFSecurityPolicy)进行 Hook,禁用证书校验。
文件系统分析
- 使用 Filza 文件管理器,导航到应用的沙盒目录,通常路径为:
/var/mobile/Containers/Data/Application/<一串随机字符>/Documents或Library。 - 在这里你可以找到应用存储的数据库、缓存文件、配置文件等。
- 使用 iFunBox 等工具可以方便地导出这些文件。
动态插桩与 Hook
- 确保电脑和设备在同一 Wi-Fi 下,Frida 服务端正在运行。
- 编写 Frida 脚本,Hook Objective-C 或 Swift 的方法,Hook 一个加密函数:
// hook_ios.js if (ObjC.available) { try { var className = "NSString"; var methodName = "- UTF8String"; var hook = ObjC.classes[className][methodName]; Interceptor.attach(hook.implementation, { onEnter: function(args) { console.log("Original string: " + new ObjC.Object(args[2]).toString()); }, onLeave: function(retval) { console.log("Returning UTF8 bytes..."); } }); } catch (error) { console.error("[!] Error: " + error.message); console.log(error.stack); } } else { console.log("[!] Objective-C runtime is not available."); } - 在电脑上运行 Frida 脚本,Hook 应用运行时的函数调用。
进阶技巧与资源
- 自动化: 学习使用 Python 脚本(如
requests库)配合 Burp Suite API,可以自动化地发现和测试某些类型的漏洞(如 IDOR)。 - API 安全: 专注于对应用的后端 API 进行测试,可以使用 Postman 等工具进行更精细的请求构造。
- 学习资源:
- 书籍: 《移动应用安全》、《iOS Application Security》、《Android Security Internals》。
- 在线课程: PortSwigger Web Security Academy (Burp Suite 官方教程,很多原理相通)、OWASP Mobile Security Project。
- 社区: 关注 OWASP Mobile Top 10 项目,参与安全会议(如 DEF CON, Black Hat)的移动安全议题。
Per App Hacking 是一个系统性工程,需要结合静态和动态分析,并熟练掌握多种工具,Android 的开放性使其入门相对容易,而 iOS 的挑战则更能锻炼你的逆向工程和底层理解能力。
再次提醒:请始终在法律和道德的框架内进行你的学习和研究。 祝你学习顺利!
