恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Vue-After-Free的JS运行时层深度解析:手写BigInt、fn注册与syscalls是怎么炼成的

  • 首页
  • 资讯中心
  • /
  • Vue-After-Free的JS运行时层深度解析:手写BigInt、fn注册与syscalls是怎么炼成的

相关资讯

仓颉 ArkUI Badge 信息标记组件开发指南:用法、样式与实战示例 2026/10/16 2:57:19
微信小程序商品详情页五功能联动实现与踩坑指南 2026/10/16 2:57:19
Spring Boot自动配置内核拆解:从零手写一个防重starter 2026/10/16 2:57:19

最新资讯

Java编译原理:javac语法糖脱糖机制与字节码生成解析
Java前端编译与语法糖还原深度解析
PKIX路径构建失败:Java HTTPS证书信任链排查与修复指南
需求预测与分仓规划:业务约束驱动的供应链AI落地
lol-skins 仓库 Arcade KaiSa 炫彩皮肤数据包解析:Chroma ID 清单与 WAD 资源结构实战指南
WinForm分页控件与SQL数据库结合:从设计到避坑全指南

今日推荐

Java八种基本类型深度解析:从内存布局到实战选型
基础:常用快捷键——IDEA、VS Code、PyCharm 与 Linux 终端效率速查
解决ultraedit下verilog .v文件中文注释乱码:把编码配置改到TaoToken辅助排查

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

Vue-After-Free的JS运行时层深度解析:手写BigInt、fn注册与syscalls是怎么炼成的

发布时间:2026/10/16 2:57:19
Vue-After-Free的JS运行时层深度解析:手写BigInt、fn注册与syscalls是怎么炼成的 【免费下载链接】vue-after-freePlayStation Vue code execution exploit项目地址https://gitcode.com/gh_mirrors/vu/vue-after-free点击查看免费下载Vue-After-Free 是一款基于 PS VueCUSA00960应用用户态代码执行漏洞CVE-2017-7117的PS4 越狱 exploit其背后是一套运行在主机专有 JavaScript 虚拟机上的JS 运行时层。这篇文章将带你深入解析其中手写 BigInt、fn 函数注册、syscalls 表扫描三大核心模块的构造思路看看 64 位内存操作与系统调用是如何在 32 位 JavaScript 中炼出来的。先搞清楚背景为什么要在 JS 里写系统调用对于不熟悉 PS4 越狱的读者先快速对齐概念用户态Userlandexploit 在应用进程沙箱内拿到任意读写/执行能力本项目的 Vue UAF 漏洞就属于这一层内核态Kernel用户态能力只能读到沙箱真正的越狱需要再打一层内核漏洞本项目默认 7.00–12.02 使用 Lapse12.50–13.00 使用 NetctrlPS Vue 的 JS 虚拟机Vue 应用内嵌了一个私有 JS 运行时代码里叫jsmaf它提供include()、log()、Image、Video等 API声明见 src/types/jsmaf.d.ts但没有 DOM、没有 fetch更没有 64 位整数类型。问题就出在这里JS 的number是 64 位浮点数精度只有 53 位有效位而 PS4 的 64 位内存地址形如0xFFFFFFFF8000xxxx根本存不下。于是开发者在纯 JS 之上手工搭了一整套底层环境模拟器这就是本文的主角——JS 运行时层。运行时层的模块全景如下模块所在文件职责BigIntsrc/download0/types.ts手写 64 位整数mem/utilssrc/download0/types.ts内存读写原语fnsrc/download0/types.ts原生函数注册与调用gadgets/ropsrc/download0/types.tsROP/JOP 指令链执行引擎syscallssrc/download0/types.ts系统调用表字节模式扫描structsrc/download0/types.tsC 结构体定义与字段访问下面按依赖顺序逐个拆解。手写BigInt32位JavaScript里的64位整数为什么不能直接用 JS 的 number一个 64 位地址最高位往往落在0xFFFF...区间而 JS 数字超过 2^53 后就会丢精度——0xFFFFFFFF80000000一旦存成浮点低 11 位直接蒸发。对 exploit 来说地址错一个字节全盘皆输所以必须自建整数类型。lo/hi 双半字设计开发者在 src/download0/types.ts 定义了一个自定义BigInt类核心只有两个字段class BigInt { lo: number // 低 32 位 hi: number // 高 32 位 }构造器做了多态入参一行代码就能覆盖绝大多数场景constructor (valueOrHi?: BigIntLike, lo_?: number) // 支持整数 number、浮点按位模式取、布尔、 // 16 进制字符串、BigInt 实例、或 (hi, lo) 双参数几个值得注意的细节溢出保护add高位溢出直接throw RangeError(add overflowed !!)sub同样检测下溢——exploit 代码里宁可崩溃也不接受静默截断位运算全家桶xor/and/or/not/shl/shr/getBit/setBit按 lo/hi 两半分别处理divmod按位长除法从第 63 位到第 0 位逐位移位减除是最朴素的 64 位除法实现toString()输出大写 16 进制d()把 64 位值重新解释为 float64利用DataView的位域重排技巧endian()做 32 位字交换DataView 扩展在 src/download0/types.ts 给DataView.prototype挂上了getBigInt/setBigInt从此内存视图可以按 8 字节原子量读写地址。一句话总结BigInt 用两个 32 位整数 手工进位把 JS 从53 位浮点玩具升级成了能操作真实虚拟地址的 64 位整数引擎。mem内存原语view、addrof、fakeobj三件套光有整数还不够exploit 需要读任意地址、写任意地址ARW 原语。mem对象src/download0/types.ts提供了四件工具方法作用mem.view(addr)把addr设为读窗口之后所有slaveDataView 的读写都发生在这个地址上mem.addrof(obj)泄漏一个 JS 对象的真实内存地址经由leak_obj中转mem.fakeobj(addr)反向操作把地址伪装成对象引用这是伪造对象的关键mem.malloc(n)通过 TypedArray 的 backing store 机制分配一段内存并拿到其地址addrof与fakeobj是一对前者让 JS 对象现形后者让任意内存成精。配合utils.get_backing/utils.set_backingsrc/download0/types.ts改写 TypedArray 的底层缓冲指针mem.malloc就能凭空获得一块可控内存。这套组合拳是后面所有伪造 ROP 栈伪造 JS 函数动作的地基。fn注册把任意原生调用包装成普通函数这是运行时层最优雅的抽象。fn对象src/download0/types.ts让你用一行声明式代码注册任何原生函数fn.register(0x14, getpid, [], bigint) fn.register(libc_addr.add(0x5F0), sceKernelGetModuleInfoForUnwind, [bigint], bigint)注册项分两种来源函数地址BigInt直接指向某个可执行函数比如 libc 里的sceKernelGetModuleInfoForUnwind系统调用编号number自动从syscalls.map查表取地址——这个 map 怎么来的下一节讲。注册完成后fn.getpid()就像调用普通 JS 函数一样。幕后fn.wrapper的干活流程是生成POP_RAX_RET 调用编号或地址 0按参数顺序生成POP_RDI_RET/POP_RSI_RET/POP_RDX_RET/POP_RCX_RET/POP_R8_RET/POP_R9_JO_RET 参数值字符串参数会先用utils.cstr在内存里写成 C 字符串布尔转 0/1最多 6 个参数压入目标函数地址交给 rop.execute 通过 JOP 执行若声明了返回类型bigint/boolean/string从 store 缓冲区读回 8 字节结果并按类型转换——string返回值会自动按 C 字符串解析成 JS 字符串。更妙的是 TypeScript 层的类型魔法register的签名使用asserts this is Fn...src/download0/types.ts意味着注册之后fn.open、fn.write会自动获得参数类型推断与返回值类型写 exploit 时编译器全程帮你盯着——这在一个调用内核函数的场景里是实打实的安全网。syscalls初始化用12字节模式反查libkernelPS4 沙箱里没有任何符号表open、read、sysctl这些系统调用的包装函数地址从何而来答案藏在 src/download0/types.ts 的syscalls对象里。核心思路libkernel 里每个 syscall 包装函数都有相同的指令前导。以open为例反编译后的前几个字节固定是mov rax, -1 → 48 C7 C0 FF FF FF FF mov rcx, r9 → 49 89 CA syscall → 0F 05于是syscalls.init(libkernel_addr)只需以这 12 字节0x48 0xC7 0xC0 0xFF 0xFF 0xFF 0xFF 0x49 0x89 0xCA 0x0F 0x05为模式在 libkernel 前0x40000字节内做朴素逐字节匹配每命中一处从匹配点 3 字节处读出一个int32那就是该 syscall 的编号例如0x05 open把编号 → 地址存入Map。一次扫描整张系统调用表全部到手日志里会打印Found N syscalls。此后fn.register(0x0ca, sysctl, [...], bigint)见 src/download0/kernel.ts就只需要填一个编号连硬编码地址都省了——这是免符号表定位函数的经典手法。从UAF到ROP运行时层的完整诞生过程各模块不是凭空出现的它们的初始化链条在 src/download0/userland.ts 中一气呵成第一步UAF → ARW。借助 Vue 特制的触发器 make_uaf一段利用for...in混淆解释器的 7 行代码制造 use-after-free随后喷出 4096 个填充0x13371337标记的数组找到被 UAF 视图命中的标记数组并篡改其长度头——数组瞬间变成任意读写窗口userland.ts。第二步伪造 master/slave。通过mem.addrof泄漏对象地址、mem.fakeobj伪造引用逐步伪造出一个Uint32Arraymaster和一个DataViewslave并暴力递增 structure_id 直到引擎认账——ARW 原语正式落地日志打印Achieved ARW !!。第三步泄漏所有基址。通过Math.min这个内置函数顺藤摸瓜一次泄漏出 jscJS 引擎、libc、libkernel、eboot 四大模块基址userland.ts然后写 1 字节关闭 GC防止运行时对象被回收地址失效rop.init(jsc_addr)以 jsc 基址为锚点初始化gadgets表里全部 20 多个 gadget 偏移搭建 JOP 栈syscalls.init(libkernel_addr)执行上一节描述的字节模式扫描生成 syscall 表。第四步loader 编排。src/download0/loader.ts 用include()依次装载 userland、binloader、lapse、kernel、check-jailbroken先通过sysctlbyname(kern.sdk_version)见 kernel.ts识别固件版本再按CONFIG.jb_behavior自动选择 Lapse 或 Netctrl 内核漏洞随后用getuid()is_in_sandbox()轮询验证越狱状态kernel.ts成功则打 ucred 补丁完成沙箱逃逸jailbreak_shared并通过劫持sysent[661]执行 kpatch shellcode 完成内核补丁apply_kernel_patches。如果中途失败你看到的就是这样一只猫——按 README 的说法重启再来一次即可小结这套运行时层的可借鉴之处BigInt用lo/hi双半字 显式溢出抛错是任何32 位 JS 操作 64 位地址场景的通用解法memaddrof/fakeobj/view三件套把对象与地址互相转换是伪造一切结构的前提fn syscalls声明式注册 字节模式扫表让调内核写起来像调普通函数且 TS 类型推断全程兜底rop把 JOP 执行封装成push/execute/store/load让 shellcode 层面的事退化成一次普通函数调用。整套代码全部位于src/download0/目录构建时由 Babel 编译进download0.dat见 package.json。成功越狱后等待你的是这只猫核心文件速查文件内容src/download0/types.tsBigInt / mem / fn / rop / syscalls / struct 运行时层全家桶src/download0/userland.tsUAF→ARW、基址泄漏、运行时初始化src/download0/kernel.ts各版本内核偏移、ucred 沙箱逃逸、kpatch 注入src/download0/loader.ts版本检测与 Lapse/Netctrl 编排src/download0/defs.tsUAF 触发器 make_uaf赞分享【免费下载链接】vue-after-freePlayStation Vue code execution exploit项目地址https://gitcode.com/gh_mirrors/vu/vue-after-free点击查看免费下载相关推荐React Native Boilerplate 3.0.0 深度解析轻量、可扩展的 React Native 脚手架是怎么炼成的React Native Boilerplate 3.0.0 深度解析轻量、可扩展的 React Native 脚手架是怎么炼成的 导读本文以 React移动开发跨平台33ms 是怎么炼成的拆解 Laya 非自回归架构的每一步省时33ms 是怎么炼成的拆解 Laya 非自回归架构的每一步省时 当 2026 年 9 月 Laya 以421M 参数、单次前向推理 33ms的面目出现在开人工智能NLP强化学习解读BrasilAPI架构Next.js API Routes Vercel Serverless的零成本API是怎么炼成的解读BrasilAPI架构Next.js API Routes Vercel Serverless的零成本API是怎么炼成的 BrasilAPI 是一个把后端上一篇FoundationDB Hot Shard热分片原理与治理分裂机制、集群级限流与 Server Knobs 全解析下一篇swagger-codegen 生成的 C 客户端 PetApi 使用指南从 Swagger Petstore 文档到源码级调用原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号