JS基础

js逆向

JavaScript Generator 状态机原理

核心矛盾: 开发者想用 async/await 写代码,但旧版 Chrome/Node 不支持。 Babel 的解决方案:把新语法"翻译"成等效的旧语法。 async/await 的底层是 Generator,所以必须先搞清楚 Generator。 普通函数:调用一次,运行到底,返回一个值。 Generator 函数:可以暂停,每次暂停时产出一个值,下次调用时从上次暂停的地方继续执行。 关键: Generator 函数被调用时不会立即执行,而是返回一个迭代器对象(iterator)。 每次调用 .next() 才会执行,直到下一个 yield 或函数结束

By yellowdog

js逆向

V8 引擎基础

本文面向逆向分析人员,重点介绍 V8 引擎中与逆向工作直接相关的特性,而非引擎内部开发。 各阶段说明: 词法分析:将源码字符串拆分为最小语义单元(Token),如标识符、关键字、运算符、字面量。 AST(抽象语法树):以树形结构表示代码的语法结构。每个节点代表一种语法构造(FunctionDeclaration、BinaryExpression 等)。可用 --print-ast flag 查看。 字节码(Bytecode):Ignition 解释器生成的中间表示,比机器码更紧凑,跨平台。字节码会被缓存(ScriptCompiler::kConsumeC

By yellowdog

js逆向

Proxy 对象与 Hook

Proxy 是 ES6 引入的元编程机制,允许拦截并自定义对象的基本操作。在 JS 逆向中,Proxy 是比 Object.defineProperty 更强大的 Hook 工具,可以拦截整个对象上的所有操作,包括函数调用、new 运算符、属性枚举等 Object.defineProperty 无法覆盖的行为。 handler 中没有定义的陷阱,操作会直接透传到 target,行为与不使用 Proxy 相同。 各陷阱方法参数说明: get(target, prop, receiver) set(target, prop, value, receiver)

By yellowdog

js逆向

Object 静态方法与 Hook 使用场景

Object 的静态方法是 JS 逆向中 Hook 技术的底层基础。理解每个方法的能力边界,直接决定你能不能绕过检测、能不能稳定注入、能不能还原被篡改的环境。 descriptor 两种形式(不可混用): 部分网站检测 fn.toString() 是否包含 native code: 一次性定义多个属性,等同于多次调用 defineProperty。 获取对象自身某个属性的完整描述符对象,是 Hook 前的必要准备动作。 见上方 defineProperty 场景 2,核心就是先用这个方法取到原生 getter/setter,再包一层。 返回对象所有自身属

By yellowdog

js逆向

Node.js 运行环境

本文专注于逆向还原场景下的 Node.js 使用,包括如何在本地运行扣出的 JS 代码、利用内置模块辅助逆向分析,以及补全浏览器环境。 vm 模块允许在隔离的沙箱上下文中执行代码,是运行不受信任 JS 代码的常用方式。 vm.runInNewContext(code, sandbox, options) vm.Script 适合需要多次执行同一段代码的场景(预编译): vm.createContext(sandbox) 将一个普通对象提升为 vm 上下文(contextify): 逆向场景推荐使用 vm 而非 eval,原因:扣出的浏览器代码通常会访问

By yellowdog