Twisted:开源栈式 JS 虚拟机(JSVMP)功能介绍、痛点、后续计划
Twisted开源栈式 JS 虚拟机JSVMP功能介绍、痛点、后续计划仓库github.com/0xfffb/twisted测试地址click定位Twisted 是用 TypeScript 实现的栈帧式 JSVMP 工具链将子集 JavaScript 编译为自定义 IR再汇编为字节码由浏览器或 Node 侧 VM 解释执行。目标场景包括提高前端逻辑被脚本化还原的成本如风控、反作弊相关研究模块总览模块职责CompilerBabel 解析 AST → 线性Instruction[]IRAssemblerIR → bundle{ bytecode: number[], meta: string[] }Runtime / VM解释执行 bytecode依赖注入、async/await、闭包、调用约定等ObfuscatorIR 级混淆 Pass可串联执行Builderesbuild 打包浏览器 runtime可选javascript-obfuscatorCLIbuild/runtime/all串联整条编译流水线Compiler由 Babel 得到 AST 后再递归遍历节点将 JavaScript 译为 IR。为何先 IR再 bytecode多一层 IR 是为了工程上的可维护性与可扩展性优化、混淆、回填标签等可在结构化指令序列上完成再统一交给 Assembler 落盘为字节码比「AST 直出 bytecode」更易迭代。Assembler把 IR 编成 VM 所需的 bundle完成Jmp/JmpIf等跳转回填、字符串等常量进meta池等。产物形态示例{bytecode:number[];meta:string[]}Runtime / VM栈帧式虚拟机执行 Assembler 输出的 bytecode与 Compiler 的指令语义一一对应。Obfuscator在 IR 层做变换如算术多态使多次编译得到的 IR 不必相同从而抬高静态/模式化分析成本。具体 Pass 以src/obfuscator/为准。Builder将 VM 与内嵌 bundle 打成可在浏览器加载的脚本流程上包含 ES 降级如降至 ES5与可选的 javascript-obfuscator 混淆详见src/builder/。开发痛点可参考的成熟开源项目很少浏览器侧「JS → 自定义字节码 自研 VM」整条链路公开、可维护、能跟着跑的仓库不多很多细节只能自己摸。体系化文章与教程稀缺编译器前端、IR 设计、跳转回填、VM 调用约定、与混淆流水线结合等分散在零星博客或逆向讨论里缺少从零到可跑产物的成篇文档入门与对比成本都高。后续计划先落地控制流图CFG在现有线性 IR 之上建立基本块、前后继等结构便于分析与后续优化再在此之上逐步丰富 IR Pass。反 Hook / 环境探测在编译期或运行时侧增加对关键 API如console、fetch、eval等是否被篡改、代理或调试器附加的检测与对抗策略与示例example/fingerprint.js一类逻辑对齐逐步产品化。按优先级补齐 Compiler / VM逻辑运算、throw、try catch、等语法。欢迎通过 Issue / PR 讨论架构与对抗思路功能与修复建议尽量附带或可更新npm test。我并不是反作弊和风控业内人士很多想法和功能都是闭门造车希望大家指正
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2501352.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!