MassoudiR/DittoNet

GitHub: MassoudiR/DittoNet

DittoNet 是一款基于 Flutter 与 Python 构建的移动端网络调试工具,通过嵌入式透明代理实现无需 root 的实时 HTTP 拦截、流量修改与遥测捕获。

Stars: 1 | Forks: 0

DittoNet Logo

⚡ DittoNet 核心基础设施 ⚡

高吞吐量透明代理桥接器、可编程逆向工程引擎与 W3C HAR 遥测管道
基于 Flutter 与 Python 构建,旨在实现确定性的流量拦截、AST 感知的 payload 修改、运行时 DOM hooking 以及 WebSocket 命令编排。

Architecture HAR 1.2 Engines Telemetry

Download APK Total Downloads Stars

DittoNet System Mockup

## 🏛️ 执行工程概述 现代 Android 应用安全研究从根本上受到了网络隔离层、严格的 SSL/TLS 证书绑定以及操作系统级路由限制的制约。传统的桌面代理套件(如 Burp Suite、OWASP ZAP 或 Charles Proxy)需要获取物理设备的 root 权限,侵入式地安装系统证书,或依赖脆弱的 `iptables` 转发规则,而现代应用程序经常会主动规避这些手段。 **DittoNet** 从架构层面解决了这一瓶颈。通过将高性能透明拦截桥接器直接嵌入到运行时渲染环境中,DittoNet 能够在原生 Android `WebResourceRequest` 调用与上游网络执行层之间的边界处捕获网络事务。 作为一个在**移动端拦截客户端(`Ditto Mobile`)**和 **Python 命令服务器(`Ditto Server`)**之间运行的统一系统,DittoNet 为安全工程师、逆向工程师和后端开发者提供了对 HTTP/HTTPS 请求和响应生命周期、实时规则评估以及运行时 DOM 环境的完全编程控制能力。 ## ⚙️ 架构蓝图与执行生命周期 DittoNet 通过双阶段混合 pipeline 执行流量拦截。出站请求和入站响应可以直接在设备本地以零网络开销进行评估,也可以通过 HTTP POST 转发到桌面服务器进行远程规则处理。随后,服务器会通过 Socket.IO 将实时遥测事件流式传输到仪表板。 ``` graph TB subgraph Mobile Client [📱 Ditto Mobile Runtime Engine] REQ[Outbound HTTP/HTTPS Request] --> IR[WebResourceRequest Intercept] IR --> MODE{Execution Mode} MODE -->|Local Standalone Mode| LRE[Embedded Dart Rules Engine] LRE -->|BLOCK / REDIRECT / MATCH_REPLACE| OUT_LOCAL[Modified Payload Delivery] MODE -->|Synchronous Remote Bridge| HTTP_CLIENT[Secure Dart HTTP Client] end subgraph Desktop Command Center [🖥️ Ditto Server - Python / Flask / Socket.IO] HTTP_CLIENT -- POST /api/intercept/request --> FLASK[Gateway Ingestion Layer] FLASK --> ENGINE[InterceptEngine Rule Processor] ENGINE <--> SQLITE[(SQLite Persistent Rules Storage)] ENGINE <--> PLUGINS[Python Programmatic Plugins] ENGINE -- Modified Instructions --> HTTP_CLIENT ENGINE -- Live WebSocket Streaming --> DASH[Real-Time Command Dashboard] end HTTP_CLIENT --> UPSTREAM[Upstream Target API / Server] UPSTREAM -- Server Response --> HTTP_CLIENT HTTP_CLIENT -- POST /api/intercept/response --> FLASK ``` ## ⚙️ 核心能力与工程特性 ### 1. 🛡️ 确定性双模拦截 Pipeline DittoNet 旨在跨两种不同的网络拓扑无缝运行: * **同步远程桥接**:将完整的 HTTP 请求头、查询参数和原始二进制 payload 转发到专用桌面服务器(`/api/intercept/request`)。上游服务器的响应会在 DOM 渲染前被拦截(`/api/intercept/response`),从而允许实时的 Python 处理。 * **独立零延迟本地引擎**:在离线或高速环境下运行时,DittoNet 会直接在 Dart 内存中评估持久化规则,从而避免产生网络序列化延迟。 ### 2. ⚡ AST 感知流量修改与优先级引擎 核心拦截引擎在所有流量规则中应用严格且确定性的执行层级: 1. `BLOCK`:立即中断网络分发,并返回经过处理的 HTTP 403 响应。 2. `REDIRECT`:指示移动客户端将匹配的请求重新路由到指定的备用 URL,并在引擎响应中作为 `redirectUrl` 字段返回。 3. `MATCH_REPLACE`:在实时的请求和响应体中执行精确的字符串和正则表达式替换。 4. `BODY_REPLACE`:覆盖整个 payload。自动检测 `application/json` MIME 类型,并将字符串解析为结构化的 AST 字典,以确保有效的 JSON 格式。 5. `HEADER_INJECT`:通过使用 `Key: Value` 冒号分隔格式解析 `matchStr` 字段,将自定义的键值对 header 附加到出站请求或入站响应中。 ### 3. 📡 W3C HAR 1.2 会话遥测与序列化 无需外部网络嗅探器即可捕获生产级的网络遥测数据: * **完全兼容 W3C 规范**:记录完整的 HTTP 事务记录,包括微秒级的 DNS/TCP 持续时间、请求/响应头、查询字符串、cookie、状态码以及响应体。 * **原生 Pipeline 导出**:将数兆字节的流量捕获数据直接序列化到本地存储,或将标准化的 `.har` 会话文件导出到 Burp Suite、OWASP ZAP 或 Postman 中。 ### 4. 💉 运行时 DOM Hooking 与沙盒执行 以精确的时机控制运行时 JavaScript 执行环境: * **生命周期脚本注入**:安排自定义的 JavaScript hooking 代码片段在 `DOCUMENT_START` 阶段执行——确保在目标网页构建其 DOM 树或执行防篡改脚本之前注入 payload。 * **细粒度 Origin 沙盒**:实施严格的、针对特定域名的安全策略,控制每个 origin 的硬件访问权限(摄像头、麦克风、地理位置)以及 JavaScript 执行权限。 ### 5. 🛠️ 内嵌 DevTools 资源服务器 在物理隔离或网络受限的企业网络中执行复杂的 DOM 调试: * 将压缩后的行业标准开发者控制台(**Eruda** 和 **vConsole**)直接绑定到应用程序内存中。 * **100% 离线韧性**:拦截浏览器内部的资源请求,并直接从本地 RAM 提供开发者套件,从而消除在离线审计期间因外部依赖导致的故障。 ### 6. 🐍 可编程的 Python 后端与滚动内存缓存 * **有界滚动日志架构**:基于内存中的 `OrderedDict` 构建,受可自定义的 `max_logs` 阈值(默认为 `1000`)限制。自动剔除最旧的网络事务,防止在高并发自动化 API 模糊测试期间耗尽 RAM。 * **声明式 Python 装饰器**:使用简洁的装饰器语法,在几秒钟内扩展服务器功能: ``` from ditto_interceptor import DittoServer server = DittoServer(port=5000, db_path="rules.db") @server.inspector("*api/v2/auth*") def inspect_auth_flow(flow_id, phase, headers, body): print(f"[{phase}] Intercepted authentication transaction: {flow_id}") @server.plugin("PrivilegeEscalationHook") def elevate_privileges(flow_id, phase, headers, body): if phase == "Response" and isinstance(body, dict) and "role" in body: body["role"] = "super_admin" return headers, body return headers, body if __name__ == "__main__": server.run() ``` ## 📡 API JSON Schema 规范 在**同步远程模式**下运行时,移动客户端通过标准化的 JSON payload 与 Python 后端进行通信: ### `POST /api/intercept/request` 在上游网络分发之前接收。 ``` { "flowId": "8f9d2a10-4b3c-11ee-be56-0242ac120002", "url": "https://api.targetdomain.com/v1/user/profile", "method": "POST", "headers": { "User-Agent": "Mozilla/5.0 (Linux; Android 14)...", "Authorization": "Bearer eyJhbGciOi..." }, "body": "{\"user_id\": 84920}" } ``` ### `POST /api/intercept/response` 在接收到上游服务器响应字节后接收。 ``` { "flowId": "8f9d2a10-4b3c-11ee-be56-0242ac120002", "url": "https://api.targetdomain.com/v1/user/profile", "statusCode": 200, "headers": { "Content-Type": "application/json; charset=utf-8" }, "body": "{\"status\": \"success\", \"account_tier\": \"standard\"}" } ``` ## 🚀 快速入门与部署基础设施 ### 1. 部署 Python 指挥中心(`Ditto Server`) ``` cd "Ditto Server" python -m venv .venv # Windows: .venv\Scripts\activate | macOS/Linux: source .venv/bin/activate pip install -r requirements.txt python test_implementation.py ``` *在 `http://localhost:5000` 访问实时的 WebSocket 流式传输仪表板。* ### 2. 编译运行时客户端(`Ditto Mobile`) ``` cd "Ditto Mobile" flutter pub get flutter analyze --no-fatal-infos flutter build apk --release ``` *将生成于 `build/app/outputs/flutter-apk/app-release.apk` 的生产环境发布包部署到您的目标 Android 设备上。* ## ⭐ 支持与基础设施贡献 如果 DittoNet 加速了您的逆向工程 pipeline 或渗透测试基础设施,请考虑支持我们的持续开发: | Bitcoin (BTC) 赞助 | USDT (Tron TRC20) 赞助 | | :---: | :---: | | Bitcoin QR | USDT QR | | `16xTx25nuwDQ9gKwumJgjJCfRXVgag27vP` | `TNhAhjhvw1c1CyayxreLNxhD8u8UViLiY5` |


DittoNet 基础设施确定性的移动流量拦截与分析

标签:SSL绕过, 中间人攻击(MITM), 云资产清单, 抓包工具, 服务管理, 移动开发, 网络调试, 自动化, 逆向工具, 逆向工程