anything-analyzer

来源:GitHub · ⭐ 1155 stars

项目简介

在当今的软件开发和测试领域,理解一个复杂应用(尤其是Web应用)的真实行为是一项耗时且容易出错的任务。无论是为了进行API逆向工程、编写自动化测试脚本,还是为了分析第三方服务的通信协议,开发者通常需要手动抓包、分析网络请求、并试图理解其背后的逻辑。这个过程不仅枯燥,而且对复杂交互(如WebSocket、GraphQL或动态认证流程)的分析尤为困难。

anything-analyzer 项目正是为了解决这一痛点而生。它是一个基于现代浏览器开发者工具协议(Chrome DevTools Protocol, CDP)和人工智能(AI)的通用行为分析工具。其核心价值在于能够自动化地捕获用户在真实浏览器环境中的交互行为,并智能地分析、归纳这些行为,最终生成人类可读、且可直接用于编程的协议与API分析文档。它将“黑盒”观察与“白盒”分析相结合,为开发者提供了一种高效、准确理解应用内部工作机制的新范式。

核心特性

  • 无侵入式真实行为捕获:工具通过CDP连接到一个真实的浏览器实例(如Chrome/Edge),录制用户的所有操作。这意味着被分析的应用运行在完全真实的环境中,所有网络请求、Cookie、本地存储、JavaScript执行都与用户手动操作时一致,捕获到的数据极具代表性。
  • 多协议深度分析与关联:它不仅记录简单的HTTP/HTTPS请求,更能深度分析复杂的通信模式,包括:
  • WebSocket:捕获连接建立、消息收发全生命周期。
  • GraphQL:自动解析操作名称、变量和查询结构。
  • Fetch/XHR:记录请求头、请求体、响应头和响应体。
  • 资源加载:关联页面加载与资源请求。
  • AI驱动的智能归纳与文档生成:这是项目的“灵魂”。工具将捕获到的原始、杂乱的低级网络数据(URL、载荷、时序)交给AI模型(如OpenAI GPT、Ollama本地模型)进行处理。AI能够理解这些数据的语义,自动归纳出API端点、参数结构、认证方式、数据流,并以清晰的Markdown或结构化JSON格式输出,甚至可以直接生成调用示例代码。
  • 行为序列化与回放:捕获的行为可以被序列化保存。这不仅意味着分析文档是可复用的,更意味着整个交互流程可以被“回放”或用于驱动后续的自动化测试,实现了从“分析”到“利用”的闭环。

技术实现

anything-analyzer 的技术栈清晰���高效,主要基于 Node.js 和 TypeScript 构建,其架构设计巧妙地串联了浏览器、协议和AI。

  1. CDP层作为桥梁:项目核心是 puppeteer-core 库,它提供了与无头或有头浏览器进行CDP通信的能力。通过CDP,工具可以:
  • 启动和控制浏览器实例。
  • 订阅 Network、Page、WebSocket 等域的事件,从而监听所有网络活动和页面生命周期。
  • 执行JavaScript代码来模拟点击、输入等操作(用于回放)。

这一层负责将所有低级协议数据(如 Network.requestWillBeSent, WebSocket.frameReceived)收集并规范化。

  1. 数据聚合与上下文构建:原始CDP事件是离散且海量的。项目内部构建了一个会话(Session)管理器,负责将属于同一“用户操作会话”的所有事件进行聚合、去重和关联。例如,它将一次“登录”操作触发的页面跳转、多个API请求、可能设置的认证Token等事件串联起来,形成一个有上下文的行为单元。
  1. AI智能分析引擎:这是项目的创新点。聚合后的行为数据被转换成一个结构化的提示词(Prompt),发送给配置的AI服务。��示词经过精心设计,引导AI扮演“资深API分析师”的角色。例如,提示词会要求AI:“请分析以下网络活动序列,识别出主要的API端点,总结它们的URL模式、HTTP方法、请求参数结构、认证方式和返回数据示例。” AI利用其强大的自然语言理解和代码生成能力,完成从“数据”到“知识”的提炼。
  1. 插件化与输出格式化:分析结果通过不同的输出器(Exporter)进行格式化。项目支持Markdown、JSON等格式,并且设计上是插件化的,易于扩展新的输出格式(如生成Postman集合、OpenAPI规范或Playwright测试脚本)。

快速上手

以下是一个最基本的使用示例,展示如何启动一个分析会话。

首先,确保已安装 Node.js,然后克隆项目并安装依赖:

git clone https://github.com/Mouseww/anything-analyzer.git
cd anything-analyzer
npm install

接下来,创建一个简单的启动脚本 demo.js:

const { launchAnalyzer } = require('./dist/index'); // 根据实际构建路径调整

(async () => {
  const analyzer = await launchAnalyzer({
    headless: false, // 显示浏览器窗口,方便观察
    targetUrl: 'https://httpbin.org', // 要分析的目标网站
    sessionName: 'my-first-analysis',
    aiConfig: {
      // 这里配置你的AI服务,例如使用OpenAI
      provider: 'openai',
      apiKey: process.env.OPENAI_API_KEY,
      model: 'gpt-4o-mini',
    },
    output: {
      path: './analysis_results', // 输出目录
      formats: ['markdown', 'json'], // 输出格式
    }
  });

  console.log(`分析器已启动。请在打开的浏览器中操作,完成后关闭浏览器窗口。`);
  // 此时,用户可以在浏览器中手动进行任何操作(点击、输入、提交表单等)
  // 所有操作将被记录。

  // 浏览器关闭后,分析会自动结束,结果将保存到指定目录。
})();

运行脚本:

OPENAI_API_KEY=your_api_key_here node demo.js

操作完成后,在 ./analysis_results 目录下,你会找到以 sessionName 命名的Markdown和JSON文件。Markdown文件会清晰地列出发现的API、它们的用途、调用方法和示例。

应用场景

  1. 第三方服务集成与逆向工程:当你需要集成一个没有官方SDK或文档不全的第三方Web服务时,可以使用 anything-analyzer 在官网进行一遍完整的操作流程。工具会自动为你生成该服务的主要API接口文档和调用示例,极大加速集成开发过程。
  1. 遗留系统接口梳理与测试用例生成:对于内部缺乏文档的遗留Web系统,新团队成员或测试人员可以通过该工具录制核心业务流(如“创建订单-支付-发货”)。生成的文档能快速帮助理解系统架构,而序列化的行为记录可以直接转化为自动化端到端(E2E)测试的初始脚本,提升测试覆盖率。
  1. 安全研究与协议分析:安全研究人员可以借助此工具,自动化分析某个Web应用客户端与服务器端的通信协议,检查是否存在不安全的数据传输、敏感信息泄露或逻辑漏洞。AI的归纳能力可以帮助快速定位关键的攻击面API。

总结

anything-analyzer 是一款极具巧思和实用价值的工具,它成功地将浏览器自动化(CDP)与人工智能(AI)两大技术结合,解决了开发、测试和安全领域中的一个经典难题——如何高效、准确地理解应用行为。它非常适合全栈开发者、测试工程师、DevOps以及安全研究人员使用。虽然其效果受限于所配置AI模型的能力,且对极度动态或混淆过的前端代码分析可能存在挑战,但它无疑为自动化行为分析提供了一个强大的新思路和高效的新工具,是相关技术爱好者值得关注和尝试的优秀开源项目。