App 抓 HTTP 请求常见解决方案
目录
- 目录
- 前言
- 第一部分 Android
- BurpSuite 拦截 HTTPS 请求设置步骤
- 自定义可信 CA(Customize trusted Cas)
- 固定证书(Certificate Pinning)
- 双向认证(Two Way Authentication TLS)
- Wi-Fi 代理检测(Wi-Fi Proxy Detection)
- 模拟器和 ROOT 权限检测(Emulator Detection and Root Detection)
- App 硬编码域名
- 第二部分 iOS🔨
- 参考资料
前言
本文介绍 Android 和 iOS 平台无法抓包问题产生原因和具体解决操作步骤,按照操作大部分问题可以解决,更加深入需要研究 Hook、Reverse,这不在本文涵盖范围内。
文中特殊符号约定:
- Wanning 作为警告,一些特殊操作需要注意。
- Tips 介绍信息或提示操作技巧。
第一部分 Android
BurpSuite 拦截 HTTPS 请求设置步骤
正常情况下应用和系统没有做任何限制,安装完证书并设置 Wi-Fi 代理就可以捕获 HTTP 和 HTTPS 请求。
安装证书的目的是为了能够抓取 HTTPS 包,缘由是应用发起每个请求都会先转到代理,当应用和代理建立 SSL 连接时,代理将返回证书给应用,此时应用就会拿着证书去系统里找对应证书或是证书链上签发机构的证书,找不到就认为连接可能遭到中间人攻击,停止后续数据交换。
下面以夜神模拟器 Android 5.0 系统为例给出安装步骤。
BurpSuite 设置监听地址和端口
BurpSuite 先设置好监听地址和端口,地址实际是你正在上网的网卡地址,这里我选择 All interfaces 去监听所有网卡。
Tips: 也可在 Specific address 中选择目前正在使用的网卡。
这个地址就是哪张网卡在上网就是哪个地址,拿笔记本为例,通常笔记本有两张网卡,一个是无线一个是带有 RJ45 接口的网卡,使用 Windows Terminal 运行 ipconfig
命令能够查看网卡地址。
以太网适配器就是可以插网线的网卡,无线局域网适配器则是无线网卡,这就看正在使用哪个网卡 BurpSuite 就监听哪个地址,还有一种情况是我有线无线都有地址咋办?这种情况下所有网络还是走有线网卡,以有线网卡地址为准(具体情况具体分析,请自行判断)。
Mac OS X 和其他类 Unix 系统,运行 ifconfig -a
或者 ip a
获取地址,下图以 CentOS 为例。
安装用户证书
安装证书得首先拿到公钥证书,打开 BurpSuite 找到“Proxy -> Options -> Porxy Listeners”功能,点击 import/export CA certificate 按钮导出,文件后缀改为 .crt 或 .der 方便系统识别。
根据图片中步骤将证书拖进到设备里,完成后记住文件存放的位置。
打开“设置 -> 安全 -> 从SD卡安装”,点击刚传入的证书文件进行安装,证书名称(Certificate name)可随意设置。
安装完成到“设置 -> 安全 -> 信任的凭证”验证用户证书是否存在。
在“设置 -> WLAN”长按已连接的 Wi-Fi 名称,点击“修改网络”,开启“高级选项”选择“手动”填入 BurpSuite 监听地址和端口并保存:
至此你可以浏览 HTTPS 站点验证请求是否能够抓到。
自定义可信 CA(Customize trusted Cas)
仅安装用户证书就能抓包的时代已经过去,现摆在面前有两种防御措施:
- Android 7.0 及以后版本默认不信任用户证书。
- 开发人员可以通过定义配置文件的方式指定哪些证书可以信任。
从 Android 7.0 开始可以在应用 res/xml/ 目录下建立 network_security_config.xml 添加用户证书 custom_certificate 和 system 两个证书。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="@raw/custom_certificate" />
</trust-anchors>
</base-config>
</network-security-config>
<certificates src="system" />
是信任系统证书,@raw/custom_certificate
则表明应用 res/raw/ 目录下有个名为 custom_certificate.crt 的证书,cleartextTrafficPermitted="true"
表示可以使用 HTTP 明文传输数据,一旦改为 false 就无法明文传输数据,所有请求会失败,从 Android 9 开始 false 是默认配置。
不再相信用户添加的证书,可以尝试的解决方案有:
- 使用 Android 7.0 以下版本系统,安装用户证书。
- 把证书安装到系统证书内。
- 修改配置文件重新打包应用。
安装系统证书
App 总要信任系统证书,只需将证书安装为系统证书就可解决,下面给出 Android 10 以下版本的安装实例。
导出证书
参见安装用户证书小节导出证书,后缀名无所谓,只要内容是 X.509 证书就行。
计算证书 hash
因为系统证书名字都是 hash.0,文件名是 hash,后缀名是 .0,所以先计算出证书 hash 最后 mv 重命名证书:
root@iZ2ze3excf14rd7l4rsgn3Z ~]# openssl x509 -inform DER -in burpsuite -out burpsuite.pem root@iZ2ze3excf14rd7l4rsgn3Z ~]# openssl x509 -inform PEM -subject_hash_old -in burpsuite.pem | head -n 1 | xargs -I {} mv burpsuite.pem {}.0 root@iZ2ze3excf14rd7l4rsgn3Z ~]# ls 9a5ba575.0 burpsuite
Warning: 计算证书 hash 用 -subject_hash_old 选项 而不是 -subject_hash(等同于 -hash )选项,因为 -subject_hash 使用 SHA-1 算法,-subject_hash_old 使用 OpenSSL 1.0.0 之前老算法 MD5 计算。经过测试在 Android 7 64bit 上只能使用 -subject_hash_old 系统才能识别出证书。
安装系统证书
安装证书分实体机和模拟器两部分说明,它们操作前提条件都是要先获取 root 权限,因为系统证书存放 /system/etc/security/cacerts 目录下普通用户无权写入,没有 root 就无法移动证书到此目录下。
实体机需要先把系统开发者选项下的 USB 调试打开,后续才能用 adb 操作。
手机通过 USB 数据线连接至 PC,并设置 USB 为文件传输模式,就将证书复制到 Download 文件夹,对应绝对路径 /sdcard/Download。
使用 adb shell 进入 shell,移动证书到系统证书目录,因为系统证书默认都是 644 权限和 root 所有,所以也做相同设置防止无权读取。
PS D:\adb > ./adb shell haydn:/ $ su haydn:/ # mv /sdcard/Download/9a5ba575.0 /system/etc/security/cacerts/ haydn:/ # chmod 644 /system/etc/security/cacerts/9a5ba575.0 && chown root.root /system/etc/security/cacerts/9a5ba575.0
如果你是 Android 10 及以上版本,就算 root 了,用上面方法手动安装系统证书会显示文件系统只读,尝试 adb remount 直接 not found,更改 /default.prop 配置文件 ro.debuggable=0 为 1 无权限,挂载根分区都不行。最终尝试 Mgisk 安装 MoveCertificate 模块,连同用户证书也顺带安装完,重启机器后模块会自动将用户证书移到系统证书,只要不卸载模块重启机器证书仍然有效。
模拟器安装证书操作有所不同——以夜神模拟器为例,首先模拟器默认以 root 启动,无需 adb root 让 adb 以 root 权限启动,但 /system 目录默认是只读无法写入,需要 adb remount 以读写权限重新挂载 /system 分区。
PS D:\adb > ./adb remount remount succeeded PS D:\adb > ./adb push 9a5ba575.0 /system/etc/security/ [100%] /system/etc/security/9a5ba575.0 PS D:\adb > ./adb shell "chmod 644 /system/etc/security/cacerts/9a5ba575.0 && chown root.root /system/etc/security/cacerts/9a5ba575.0" PS D:\adb > ./adb shell ls -l /system/etc/security/9a5ba575.0 -rw-r--r-- 1 root root 1375 2021-11-11 10:11 /system/etc/security/9a5ba575.0
Tips: adb 命令存放在夜神模拟器安装目录下的 bin 目录里,你也可以去官网下载。
不管实体机还是模拟器, 安装完毕后请查看证书是否正常显示并开启。
全部设置完成后请重启设备,使用浏览器浏览 HTTPS 站点确保证书正常。
修改配置文件重新打包应用
除添加系统证书外,前面提到过开发者可以在 network_security_config.xml 里配置信任证书,我要是添加信任用户证书 <certificates src="user" overridePins=true />
,再 apktool b 重新打包就绕过证书信任问题。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" overridePins=true />
</trust-anchors>
</base-config>
</network-security-config>
手动使用 apktools 完成反编译,签名打包步骤太麻烦,可以使用 apk-mitm 工具简化流程。
固定证书(Certificate Pinning)
通常应用为了安全还增加其他证书校验手段,当服务器返回的证书和代码中的证书不一致就不进行通信,这使得 App 只能和服务器进行通信。
详细点说是应用和服务器中间接入代理,SSL 建立连接时代理返回证书,应用成功在系统里能找到证书,此时 SSL 建立成功,但是开始传输数据前走到证书校验代码,因此还会校验一次证书,此时证书和代码里的不同,直接返回证书验证失败,后续传输数据也就无法进行。
固定证书这个技术产生可能是考虑到以往 CA 被黑,或者是通过社工让用户安装证书,但这并不是一个好的解决方案。
当安装证书后还是无法抓取 HTTPS 请求,就要猜测可能做了 Certificate Pinning(也有人叫 SSL Pinning),实现通常用 network_security_config.xml 和第三方库:
- Okhttp
- Retrofit
- Picasso
- Volley
- Apache HttpClient
- TrustKit
常见证书固定实现方式
network_security_config.xml
第一种,通过在 network_security_config.xml 里设置 pin-set 标签固定证书。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config>
<domain includeSubdomains="true">example.com</domain>
<pin-set expiration="2018-01-01">
<pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
<!-- backup pin -->
<pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
</pin-set>
</domain-config>
</network-security-config>
<domain includeSubdomains="true">example.com</domain>
是设置配置范围,example.com 和其子域名会生效,<pin-set expiration="2018-01-01">
约束了证书固定过期时间,如果不设置这个属性就永久固定,永久带来的坏处是,域名更换证书就会产生错误无法使用应用,所以就设置了好几个 <pin>
标签备用,通常固定应用证书链上级证书,只要应用证书失效就去验证上级证书。
第三方库
第三方库涉及具体 API 使用,需要看官方文档,不在本节展开。
识别 Certificate Pinning 特征
代理日志
1.TLS 握手失败
BurpSuite 代理日志里 TLS 握手失败。
2.certificate_unknown
另一种是报“The client failed to negotiate a TLS connection to xxx Received fatal alert: certificate_unknown”,这是说未知证书,说明应用在系统里没找到证书。这要么说明系统证书里没找到证书,要么是证书不匹配。
3.SSL certificate was rejected
识别关键字
直接 apktool 反编译搜关键字,但如今应用都做过代码混淆,仅通过包名和类名无法得知是否使用证书固定。
一个较好的办法是都去搜索 Pinning、Pinner...... 常见库名或者方法关键字,现实情况是 App 可能混淆,但库使用方式上存在特征,如 okhttp 做固定肯定要写证书哈希值 sha256/XXXXX,这种一般作为参数或变量传递不会做修改或混淆。
grep -rni "<pin digest=\"\|sha256/[A-Za-z0-9\/+=]\{43,45\}"
绕过 Certficate Pinning
Hook 常见校验,更改返回结果,这些内容安装现成框架和模块就行,已经全部实现。如果发现不成功尽可能尝试多一些模块。
Xposed + JustTrustMe + SSLUnpinning
夜神模拟器 Android 5.0 安装 Xposed 可在模拟器应用商店里搜索“派大星XP国内版”关键字安装。
俩工具安装完,打开 Xposed 选择 “Root安装[推荐]” 下载对应文件。
安装完手动重启模拟器。
安装 SSLUnpinning 后,打开 Xposed 加载 SSLUnpinning 模块, 最后进入 SSLUnpinning 点击对应 App。
至此 BurpSuite 就能抓到包。
以上演示了 SSLUnPinning 插件安装,JustTrustMe 也是类似,官方的 JustTrustMe 版本存在 bug,WebView 抓不到包,建议使用修改版。
Tips: 另一点是目前 Xposed 太老,无法支持新系统版本,可能安装完成导致设备无法开机——在夜神模拟器 Android 7.0 和 Android 9.0 版本存在此问题,建议尝试 VirtualXposed、Magisk+TaiChi+各种 SSL Pinning Module 组合。
LSPosed 🔨
前面提到 XPosed 老很多设备无法使用,LSPosed 作为其分支发展的很好,还能兼容以前老的 Xposed 模块。
只是使用前需要安装 Magisk,这里给出 RedMI K40 Pro 安装参考,模拟器安装需要另查操作步骤。
Taichi + TaichiMagisk 🔨
为什么不用 Xposed?
太极阳 = Taichi + TaichiMagisk。
- 安装 Mgisk 刷成 root。各个机型操作都不同请自行寻找步骤,如果是小米设备可以参考 MagiskHide 小节内容安装。
- 先安装太极框架 https://github.com/taichi-framework/TaiChi/releases/tag/7.0.0
之后在 Magisk 中手动安装模块,选中刚下载的 TaichiMagisk 压缩包即可完成安装
frida
实际绕过可以上 https://codeshare.frida.re/browse 查找各种现成 SSL Pinning Bypass Hook 代码。
可以按照图中给出的命令运行,或直接下载下来通过 .js 运行,执行对象是 Name,通过 frida-ps -Ua
查看。
PS C:\Users\gbb\Desktop> frida -U -l xx.js Name
Objection
Hook 前需要得到应用包名或者进程 PID,运行 adb shell am monitor
,再打开目标应用,此处拿哔哩哔哩做示例,得出运行的包名 tv.danmaku.bili。Android 应用也可查看 AndroidManifest.xml 文件 package 属性值得到包名。
PS D:\adb\ > ./adb shell am monitor
Monitoring activity manager... available commands:
(q)uit: finish monitoring
** Activity starting: tv.danmaku.bili
** Activity starting: tv.danmaku.bili
使用 objection -g PackgeName explore --startup-command "android sslpinning disable"
启动应用并 Hook 常见第三方库。
PS C:\Users\gbb\Desktop> objection -g tv.danmaku.bili explore --startup-command "android sslpinning disable"
具体 Hook 哪些库见 android.sslpinning.disable.txt。
另一种是先启动 App,后 Hook,具体操作是使用 PID 运行 objection,PID 可以通过 frida-ps -Ua
获取。
PS C:\Users\gbb\Desktop> objection -g 1294 explore --startup-command "android sslpinning disable"
更多详细用法见Frida 基本使用一文。
双向认证(Two Way Authentication TLS)
双向认证是指客户端和服务端都验证对方证书,整个验证流程是客户端先验服务端证书,通过后就会把本地证书发给服务器去验证,成功后才开始通信。
这在 App、Thick Client、Web 都很常见,以前挖洞 XSS 打到 Cookie,去浏览域名发现遇到双向认证无法访问 Web 应用,这种情况服务器是必须要验证证书才能得到返回资源。
所以没事多注意 BurpSuite 事件日志,遇到上述证书没发送关键字就是双向认证。
找证书
既然需要证书服务端才能信任我,那如何找证书?证书一般会随安装包一起发布,一般放在 assets、res 等资源目录下——但实际情况并不一定,最好使用 grep 递归搜索关键字,证书后缀通常以 .p12、.pfx 结尾。
拿到包里携带的 PKCS#12 证书和密码(有的证书可能是空密码)在 BurpSuite 安装就可以绕过。
实际情况 App 混淆密码,不好通过关键词搜出来,另一个思路是 Hook KeyStore,参见 r0capture 项目导出证书。
不使用工具手动操作,过程涉及脱壳、反编译、逆向去找密码,情况复杂,暂时没有实际案例分享。
Wi-Fi 代理检测(Wi-Fi Proxy Detection)
当你绕过证书问题后,后续仍有许多情况导致无法抓包,Wi-Fi 检测时其中之一。
如开发者获取代理配置检查当前有没挂代理。只要挂了代理就走自己定义的 HTTP 客户端,或者停止请求发送,有的还会记录日志,可以多多观察。可以用 Frida Hook getHost() 和 getPort() 但比较费力,这是 Wi-Fi 导致无法抓包情况之一。
另一个原因是无线 AP 隔离,原意是杜绝客户端互相访问,避免局域网客户端之间攻击行为,所以移动设备无法向 BurpSuite 发送数据,这种情况可以尝试自己开热点测试。
如上述内容都已尝试过无法绕过,可以考虑下面解决方案。
iptables 转发流量
将 Android 设备和 BurpSuite处于同一网络下,使用 root 权限将访问任何主机的 80 和 443 端口请求转发到 BurpSuite。
adb shell su -c "iptables -t nat -A OUTPUT -p tcp -m multiport --dports 80,443 -j DNAT --to IP:PORT"
通过 iptables -L -t nat
查看到,规则已添加成功。
随后打开 BurpSuite 开启透明代理“Porxy -> Options -> Edit -> Request handing -> Support invisible proxying(enable only if need)”即可抓包。
如果想清空规则。
adb shell su -c "iptables -t nat -F"
可以看到规则成功删除。
当前 iptables 规则缺点是只能转发请求目标的 80 和 443,一旦发起范围外的请求就不会被转发,例如 https://example.com:8080 无法转发,虽然 https 可以转,但其中 8080 不在规则内,非要转发需手动添加规则。
解决办法是使用 tcpdump 分析 App 向哪些服务器发起请求,这种方法可以搞定,但也有复杂之处,比如 App 使用多个接口,需要手动把所有功能使用一遍避免遗漏。
VPN 配合 Charles 流量转发
使用 VPN 配合 Charles Socket5 转发到 BurpSuite,整个数据走向是:“VPN -> Charles -> BurpSuite”。下面开始配置实例。
Charles 手动安装证书,前面提到过 Android 7.0 用户证书不再有用,所以需要 root 安装系统证书。通过 Charles“Help -> SSL Proxying -> Save Charles Root Certificatee”选择保存 .pem 证书。
之后就参照安装系统证书小节安装,证书安装完成后一定要重启,不然无法生效,在这点细节上曾浪费不少时间。
下一步设置 Charles 监听 Socks 端口,手动指定怕端口冲突勾上“Use a dynamic port”让 Charles 自动选,这两种方式都行。
关于 Charles Socks 设置里面还有几个复选框可以多说两句,Enable HTTP Proxying over SOCKS 复选框是说有遇到 HTTP 协议的就按照 HTTP 解析。
include default HTTP ports(80,443,8080,8443),是讲如果某个数据被 Charles 捕获到了,但请求不在指定端口范围内,就按照 Socks 处理而不是 HTTP。如下图 8011 端口不在范围内默认以 Socket Schema 显示,如果你添加 8011,Schema 就按照 HTTP 显示,这在后面将 Charles 数据转发给 BurpSuite 有关,由于 BurpSuite 可能无法处理 Socks 数据导致丢包。
证书、代理设置完之后,需要配置 SSL 代理,这样 Charles 才会记录 HTTPS 请求而不是直接转发发给服务器,换句话说是开启 SSL 代理 HTTPS 才能显示明文,这里设置为通配符表示任意站点任意端口。
至此 Charles 全部配置完成,下面安装 VPN,这里我使用 AnXray——此项目已经不再开发,推荐切换到 Brook,App 安装完新建配置选择 Socks 协议,填入对应地址、端口即可。
AnXray 有一个实用分流功能,在“设置 -> 路由设置 -> 分应用代理”可以配置哪些 App 能够走 VPN,这样防止不必要的流量转发到 Charles,在测试时不用分辨哪个是目标的请求,较为省心。
VPN 设置完后,打开哔哩哔哩 App 就能抓到包。
光 Charles 抓到包编辑重放等操作没 BurpSuite UI 方便,可以使用 Charles 的 External Proxy Settings功能将请求转发给 BurpSuite。
勾上 Use external proxy servers 启用功能,选择 HTTP、HTTPS 请求转发到 BurpSuite 监听的地址 127.0.0.1:8080——实际地址和端口根据个人设置更改。
BurpSuite 成功收到请求。
模拟器和 ROOT 权限检测(Emulator Detection and Root Detection)
在模拟器安装完应用无法打开或者正常使用,检查模拟器的方式太多,最好不要对抗,费时又费力,使用真机保平安。
对于 ROOT 检查是看这几个文件是否存在,存在就表示 Android 已经 Root。
/system/bin/su
/system/xbin/su
/sbin/su
/vendor/bin/su
ROOT 尝试用 Magisk 隐藏即可。或者 Hook exists() 返回值。
new File("path").exists()
综合以上问题查看,再抓不到包可能走的自定义代理,不然就是非 HTTP 协议,或是私有协议,需要 tcpdump 分析下原因。
MagiskHide
通常四大行 App 会检查 ROOT,以中国建设银行为例,系统 ROOT 后无法打开应用,点击确认后应用退出。
下载并安装 Magisk-vXX.X.apk,根据官方安装文档描述,每台设备安装情况不一样,没有统一步骤,下面以 Redmi K40 Pro 为例做出演示。
先解锁系统 BootLoader,安装 Magisk 后 Ramdisk 是 Yes。
去设置里查看当前系统版本,根据根据手机型号及系统版本号下载卡刷包,用于提取 boot.img。具体 ROM 可以上论坛或者海力力的网站下载。
下完后如果包内有 boot.img 则不用提取,没有的话请下载提取工具,将系统压缩包内 payload.bin 和工具放在统一目录下运行。
PS D:\gbb\tools\adb> .\payload-dumper-go.exe -partitions boot payload.bin
拿到 boot.img 后放入设备 Download 目录,打开 Magisk 点击安装。
打开 PowerShell 取出 patched的 img 到桌面。
PS D:\gbb\tools\adb> ./adb pull /storage/emulated/0/Download/magisk_patched-23000_GZNrU.img ([Environment]::GetFolderPath("Desktop"))
使用命令进入 fastboot 模式——除 adb 进入外也可重启手机长按电源+减音量键进入。
PS D:\gbb\tools\adb> ./adb reboot bootloader
先检查下 fastboot 能否连接设备,没有连接无法写入。
PS PS D:\gbb\tools\adb> ./fastboot devices
7585ab46 fastboot
Warning: 如果无法连接请尝试从小米助手或者小米解锁工具安装驱动、更换小米数据线、更换 USB2/3 端口排查。
写入 img 重启系统。
PS D:\gbb\tools\adb> ./fastboot flash boot magisk_patched-23000_GZNrU.img
Sending 'boot_b' (196608 KB) OKAY [ 4.671s]
Writing 'boot_b' OKAY [ 0.266s]
Finished. Total time: 5.275s
PS D:\gbb\tools\adb> ./fastboot reboot
Rebooting OKAY [ 0.000s]
Finished. Total time: 0.004s
启动 ROOT 隐藏功能。
安装完成可以再打开 App 验证是否有问题。
App 硬编码域名
有时候抓不到包,挂代理和 VPN 没用,大概率是因为在 App 内发送请求时只发到指定域名。
只需先 Wireshark 或其他工具观察向哪个域名发送请求,记住这个域名作为特征,apktool 反编译 App,ack 找出包含这个域名的 small 文件,将其硬编码替换成 BurpSuite 代理。
此时 App 所有请求的 Domain 变成 BurpSuite 代理,可以在 Proxy -> Options -> Proxy Listeners -> Edit -> Request handding 将原有域名和端口填入,所有请求就会转发回 App 域名。
请求转发确实是转了,但是其中 Host 请求头还是 Burp 代理 IP,需要 Proxy -> Options -> Match and Replace 将 IP 替换回 App 原有域名,让整个请求头正常。
资料来源:It's all about Bypassing Android SSL Pinning and Intercepting Proxy Unaware applications.
第二部分 iOS🔨
iOS 与 Android 差不多,都是类似的,只是工具不同。全自动越狱使用爱思助手,越狱完成还需要安装两个 Cydia 插件,才能安装 .ipa 应用:
- 安装 AFC2,在 Cydia 里搜索 “Apple File Conduit 2” 安装。
- 安装 AppSync,在 Cydia “软件源 -> 编辑 -> 添加” 输入 https://github.com/akemin-dayo/AppSync 提供的 https://cydia.akemi.ai 源,更新完毕,搜索 AppSync Unified 安装即可。
之后参考 Exploring iOS Applications with Frida and Objection: Basic Commands for Pentesting 安装 FridaServer 端
或者直接 Cydia 安装个 SSH,使用默认密码 root 连接 root 账户,scp 传。
如果 SSH 连接不稳定,Cydia 搜索 NewTerm3 终端安装后直接手机上连接。系统中默认不会安装常用命令,可以参考 iOS:如何在iphone、ipad上安装一些常用命令行命令一文安装。
或者参考 【iOS逆向】越狱环境搭建 一文手动越狱也行。这里把文章离线,方便观看,猎户攻防实验室-浮萍-【iOS逆向】越狱环境搭建.pdf。https://github.com/palera1n/palera1n 项目也可以对 iOS 越狱,目前支持 16。
环境搭建这块各个版本都不相同,就不写了。
iOS 没有认证信任的问题,所以安完并信任 CA 证书直接设置 Wi-Fi 代理就能抓到请求,再不行就上 Shadowrocket 将请求转到 BurpSuite。
固定证书:https://github.com/nabla-c0d3/ssl-kill-switch2
Flutter 应用抓请求:https://github.com/Impact-I/reFlutter
参考资料
- https://yu-jack.github.io/2020/03/02/ssl-pinning
- https://cheatsheetseries.owasp.org/cheatsheets/Pinning_Cheat_Sheet.html
- https://github.com/OWASP/owasp-mstg
- https://book.hacktricks.xyz/mobile-apps-pentesting/
- https://blog.seeflower.dev/archives/70/
- https://web.securityinnovation.com/hacking-ios-applications
- https://redhuntlabs.com/ultimate-guide-to-android-ssl-pinning-bypass
- https://curz0n.github.io/2020/08/15/android-ssl-and-intercept
- https://blog.nviso.eu/2020/11/19/proxying-android-app-traffic-common-issues-checklist
- https://github.com/r0ysue/r0capture,Andorid HOOK API 抓 HTTP 请求通用解决方案
- https://github.com/ehids/ecapture,Android eBPF 抓 HTTP 请求通用解决方案
最近更新:
发布时间: