GitHub项目:多代理PDF处理工具RAGent基于LangChain和LangGraph构建
TikTok 使用了一种自定义的虚拟机(VM)作为其网站和应用程序的安全和混淆层。最近,一个名为“TikTok VM Reverse Engineering”的GitHub项目揭开了这个虚拟机的神秘面纱,帮助研究人员和开发者理解其内部工作原理。该项目提供了一些工具,用于解混淆和调试虚拟机中的代码,尤其是 webmssdk.js 文件。 解混淆 数组索引混淆:webmssdk.js 文件中广泛使用了数组索引方法(如 Gb[index]),这些索引值实际上是编码后的字符串。通过解码这些字符串并将其替换为点表示法,大大提高了代码的可读性。 函数调用混淆:函数定义在一个数组 Ab 中,通过调用 Ab[index](args) 来执行函数。研究人员通过解析脚本的抽象语法树(AST),将这些函数调用转换为可读的形式。 字节码解密:虚拟机的字节码以一个长字符串存储,通过与字符串中的密钥进行异或操作(XOR)加密。解混淆后的代码中,可以使用 atob 和 leb128 编码来解密和提取字节码中的字符串、函数和元数据。 虚拟机反编译 TikTok 使用的虚拟机支持作用域、嵌套函数和异常处理,表明其复杂性。研究人员通过手动解析每个情况分支,并使用 AI 帮助完成其余部分,成功反编译了虚拟机的字节码。虽然反编译后的代码并非完全可读,但已经可以大致理解每个函数的逻辑。 调试 由于 webmssdk.js 是在网页上执行的 JavaScript 文件,可以通过使用 Tampermonkey 浏览器扩展来替换正常的 webmssdk.js 文件,从而在 TikTok 的环境中调试解混淆后的代码。这种方法在逆向工程过程中更加方便地进行功能测试和调试。 请求处理 TikTok 的服务器请求通常包含三个额外的头信息:msToken、X-Bogus 和 _signature。其中,X-Bogus 和 _signature 是由 webmssdk.js 动态生成的。具体生成函数为: - VM86:处理每个请求的初始函数调用。 - VM113:生成 X-Bogus。 - VM189:生成 _signature。 无需验证的请求 对于无需认证的请求(如查询用户信息),只需生成 X-Bogus 即可,可以使用 window.frontierSign 函数实现。msToken 可以使用任意值。 需要认证的请求 对于需要认证的请求(如发布评论),则需要生成 _signature。研究人员编写了一个签名生成器(signer),成功生成了用于请求的 URL 签名。通过播放器库 playwright 设置浏览器实例,向 TikTok 服务器发送请求并验证评论是否成功发布。 其他信息 虚拟机中还包括一些防止自动化操作的方法,如鼠标跟踪(VM120)和环境检查(VM265)。这些方法都是客户端侧的检查,不会与服务器通信,因此在生成签名时可以忽略。 RAGent:多代理PDF助手 与此同时,一款全新的多代理PDF助手 RAGent 也在基于 LangChain 和 LangGraph 开发中。RAGent 结合了检索增强生成(Retrieval Augmented Generation)和代理式AI(Agentic AI)的理念,高效处理大量PDF文档,生成精确且上下文丰富的答案。 检索代理 RAGent 的工作流程首先通过 extract_text_from_pdf 函数读取和提取 PDF 文本,并通过清理过程将文本整理干净。然后,通过 text_to_docs 函数将文本分块,每个块大小为 4000 个字符,块之间有 200 个字符的重叠。这些分块的文本被转换为 Document 对象,储存在向量数据库中。create_vectordb 函数使用 Facebook AI Similarity Search(FAISS)创建向量数据库。最后,retrieve_from_pdf 函数根据用户查询进行相似度搜索,返回最相关的文本内容和对应的页码。 增强代理 增强代理利用 augment_with_context 函数,将检索结果的文本和页码信息结合,提供更多的上下文。如果检索到的内容存在页码,这个函数会在结果后附加页码信息,否则直接返回原始内容,注明“未检索到特定页码”。 生成代理 生成代理通过调用 GENERATE_PROMPT,依赖于检索和增强的结果生成最终响应。生成的响应将关注 DBMS(数据库管理系统)和 SQL(结构化查询语言)相关的内容,根据用户查询是请求解释还是简化,决定是否附带页码信息。如果查询内容与 DBMS 无关,响应会注明“不适用”。 工作流构建 为了整合 RAGent 的三个代理,开发团队使用了 LangGraph 的 StateGraph 功能。每个代理被定义为工作流中的一个节点,初始节点是检索代理。根据检索结果是否存在,条件边决定是否跳过增强代理,直接进入生成代理。最终通过 Streamlit 将用户界面与后端工作流结合,创建了一个友好、交互式的查询工具。 业内评价与公司背景 该项目的成果对于理解 TikTok 的安全机制和逆向工程领域具有重要意义。TikTok 作为全球最大的短视频平台之一,其复杂的安全措施体现了公司在数据保护和技术防御方面的高投入。研究人员通过这一项目揭示了 TikTok 的部分技术细节,有助于其他开发者更好地了解其工作原理。这种深度的技术分析和破解活动也引发了关于数据隐私和网络安全的广泛讨论,提醒企业和平台在设计安全机制时需要更加谨慎。 RAGent 的开发同样获得了高度评价,被认为是多代理 AI 系统的未来发展方向,特别是在教育和研究领域的应用潜力巨大。LangGraph 作为该项目的重要组成部分,是一家专注于简化复杂 AI 流程的公司,以其轻量级的解决方案赢得了广泛认同。
