littledivy/mimic
GitHub: littledivy/mimic
mimic 拦截应用的网络流量并提取认证信息,结合 AI 自动生成可从 Python 调用的 API 客户端代码。
Stars: 926 | Forks: 34
# mimic
拦截任何 app,然后像调用库一样从 Python 中调用它。
```
from hinge_client import Hinge
acc = Hinge() # reuses your captured session
recs = acc.get_recommendations()
acc.like(subject_id, comment="hi lol")
```
你不需要编写 `hinge_client.py`。mimic 会捕获你自己的 app 流量,然后由 AI 根据它生成客户端。
## 工作原理
大多数 app 会使用一组相同的值对每个请求进行身份验证:bearer
token、一些设备 ID、一个 session ID、cookies。它们在不同的调用中保持稳定。
从你发出的真实请求中捕获一次这些信息,你就可以将它们重新应用于向同一 API 发出的新请求。
```
capture traffic -> extract auth -> generate client
(mitmproxy) (mimic.Session) (claude reads the
captured endpoints)
```
生成的客户端是基于 `mimic.App` 的纯 Python 代码,你可以像编辑
任何其他文件一样编辑它。它为你提供了命名方法、请求体模板,以及移动 API 通常需要的多步
调用链(在一个调用中获取 token,在下一个调用中使用它)。
## 安装
```
sh install.sh
```
如果你没有安装 [`uv`](https://astral.sh/uv),它会先进行安装,然后在
独立的工具环境中安装 mimic。mitmproxy 不需要单独安装;mimic 会在首次使用 `record` 时通过 `uvx` 启动它。(手动安装:`uv tool install mimic-client`。)
```
mimic doctor # confirm proxy + claude are ready
```
## 使用方法
```
mimic record # starts the proxy, prints the iPhone steps
```
`record` 会自动填充你 Mac 的局域网 IP 并引导你完成操作:
1. iPhone -> Wi-Fi -> 配置代理 -> 手动 -> `:8080`
2. Safari -> `http://mitm.it` -> 安装 Apple 描述文件
3. 设置 -> 通用 -> 关于本机 -> 证书信任设置 -> 为 mitmproxy 开启完全信任。这一步很容易被忽略,如果没有它,一切都无法工作。
4. 打开 app,像平时一样使用
然后:
```
mimic hosts # list captured hosts; pick your API host
mimic learn prod-api.hingeaws.net # see the endpoints mimic saw
mimic gen prod-api.hingeaws.net # generate hinge_client.py
```
接着运行 `from hinge_client import Hinge; Hinge().get_recommendations()`。
## 库
如果你不想使用代码生成,这里有三种手动构建 session 的方法:
```
from mimic import Session
Session.from_mitm("prod-api.hingeaws.net") # pull auth from mitmweb
Session.from_curl(open("copied.txt").read()) # paste "Copy as cURL" from devtools
Session(base_url="https://x.com", headers={...}) # explicit
```
`.get(path)`、`.post(path, json=...)` 和其他常见的 HTTP 动词辅助方法会返回解析后的 JSON,并在请求失败时抛出 `requests.HTTPError`。如果你的
token 会轮换,在幂等请求上遇到 `401` 会触发一次从 mitmweb 的重新拉取并重试。除非你明确传递 `refresh=True`,否则非幂等请求不会重试。
## 捕获后端
- **mitmproxy** 用于 iOS app(默认)。mimic 读取它的 JSON flow API 并
通过 `uvx` 运行它,因此无需额外安装任何东西。
- **cURL / 粘贴** 用于任何带有 Web 版本的应用。在 devtools 中使用 `Copy as cURL`,
然后调用 `Session.from_curl(text)`。无需代理,无需证书。
- **HAR 文件** 用于 Web 应用以及任何你可以在浏览器中捕获的内容。在 Chrome
或 Firefox 的 devtools 中,打开 Network(网络)选项卡,右键点击一个请求,然后选择
“Save all as HAR”(另存为 HAR)。然后运行 `mimic hosts --har traffic.har` 和
`mimic gen api.example.com --har traffic.har`,或者直接使用
`Session.from_har("traffic.har", "api.example.com")` 构建 session。无需代理,无需证书。
## 局限性
有两种身份验证方案会阻碍操作,原因各不相同:
- **Certificate pinning**(银行类应用、Instagram)。应用会拒绝 mitmproxy
证书,因此代理无法看到任何流量,`mimic hosts` 中也不会显示任何内容。这只会阻止*捕获*,而不会阻止重放——绕过 pinning 后,其余功能即可正常使用。
`mimic unpin ` 会设置一个基于 Frida 的绕过方案;详见
[docs/pinning.md](docs/pinning.md)。
- **DPoP / sender-constrained tokens。** 每个请求都带有一个由
从未离开设备的私钥签名的新证明,因此捕获的请求
无法重放。这破坏了核心模型,而不仅仅是捕获;目前没有干净的
变通方法。请参阅 [docs/dpop.md](docs/dpop.md)。
如果 `mimic hosts` 显示了应用的 API host,就说明没问题。
## 伦理
请在你自己的账户和数据上使用。它会重放你的 session;它不是用于
访问其他任何人数据的工具。请尊重每个应用的服务条款。
## 许可证
MIT,请参阅 [LICENSE](LICENSE)。按“原样”提供,不提供任何保证。请在自己的
账户和数据上使用;你有责任遵守每个应用的相关条款。
标签:AI辅助开发, mitmproxy, Python, 代码生成, 无后门, 流量抓包, 渗透测试工具, 自动化API客户端, 逆向工具