sensepost/memunpin
GitHub: sensepost/memunpin
基于 Frida 和 Objection 的证书绑定绕过插件,通过内存搜索替换技术帮助安全测试人员绕过移动应用的证书绑定限制。
Stars: 1 | Forks: 0
# memunpin
使用 Objection 处理证书绑定的实用工具。
本仓库围绕一个名为 `certpinutils` 的 Objection 插件构建,它可以帮助你:
- 计算本地证书的 SHA-256 公钥哈希值
- 从远程 TLS 证书链中获取 SHA-256 公钥哈希值
- 将进程内存中发现的绑定哈希值替换为你的代理证书哈希值
该仓库还包含几个小型的 Frida JavaScript 辅助工具,用于内存搜索/替换和 OpenSSL 相关的插桩。
## 仓库布局
- `plugin/`:Objection 插件实现
- `tools.js`:用于在 Frida 中搜索和替换内存值的辅助函数
- `openssl.js`:用于选定 OpenSSL 函数和密钥导出辅助的 Frida Hook
## Objection 插件
该插件的命名空间为 `certpinutils`,它提供三个命令:
- `cert_sha256 `
计算证书公钥的 SHA-256 哈希值,打印原始十六进制和 Base64 格式,并存储 Base64 值以供后续替换。
- `retrieve_chain_hashes `
连接到 `:443`,提取所提供的证书链,计算每个公钥的 SHA-256 哈希值,并存储 Base64 格式的哈希值。
- `replace_hashes`
将进程内存中发现的每一个已存储的链哈希值替换为之前存储的代理证书哈希值。
## 前置条件
- Objection
- 已安装 `openssl` 并在 `PATH` 中可用
- `xxd` 在 `PATH` 中可用
该插件在初始化期间会检查 `openssl`,如果找不到它将拒绝加载。
## 典型工作流
1. 准备你的拦截代理所使用的 PEM 格式证书。
2. 启动 Objection,并按照你常规的 Objection 工作流加载 `certpinutils` 插件文件夹(`-P certpinutils`)。
3. 使用代理证书运行 `cert_sha256` 以获取用于替换的哈希值。
4. 使用目标主机运行 `retrieve_chain_hashes` 以收集原始的绑定哈希值。
5. 运行 `replace_hashes` 以在内存中修补匹配的哈希值。此操作应在应用程序发出某种网络请求之后进行,以确保相关哈希值已存在于内存中。
插件加载后,在 Objection 会话中的示例命令序列:
```
cert_sha256 ./proxy-cert.pem
retrieve_chain_hashes api.example.com
replace_hashes
```
## 注意事项
- `replace_hashes` 依赖于前面的两个步骤。如果没有收集到任何哈希值,插件将报错退出。
- `retrieve_chain_hashes` 目前默认连接到端口 `443`。
- 该插件使用的哈希格式与常见的证书绑定实现相匹配:即 DER 编码公钥的 SHA-256 哈希,以 Base64 格式显示。
## 辅助脚本
### `tools.js`
提供一些通用的 Frida 辅助函数:
- `search(pattern, permission)` 用于扫描内存范围
- `replaceHex(pattern, replace, permission)` 用于替换匹配的字节序列
- `replaceString(pattern, replace, permission)` 用于通过先将字符串转换为字节来替换字符串
### `openssl.js`
包含面向 OpenSSL 的 Frida 辅助函数和 Hook,用于检查选定的 `libssl.so` 调用。当你需要确认目标进程中密钥或证书处理发生的位置时,这会非常有用。
## 许可证
参见 `LICENSE`。
标签:Android安全, CMS安全, Docker支持, Frida, HTTPS, iOS安全, JavaScript, Objection, OpenSSL, Python, SHA-256, SSL Pinning, SSL Unpinning, TLS, X.509证书, 中间人攻击, 云资产清单, 代理拦截, 公钥哈希, 内存搜索, 内存替换, 安全测试工具, 数据可视化, 无后门, 目录枚举, 移动安全, 移动应用安全测试, 网络安全, 自定义脚本, 证书绕过, 逆向工程, 防御工具, 隐私保护