js逆向

js逆向

AES

AES(Advanced Encryption Standard)是目前最广泛使用的对称加密算法。在 JS 逆向中,绝大多数对称加密都是 AES。 依赖库:pip install pycryptodome 还原:直接复制,确认 key / iv 的来源即可。 还原:找到 someStr 的生成逻辑(通常是固定字符串或从接口返回)。 Python 还原: 搜索关键字:AES.encrypt、AES.decrypt、createCipheriv、aes-128、aes-256、MODE_CBC 特征:密文长度是 16 的倍数(未编码时);Base64 密文长

By yellowdog

js逆向

调试辅助代码段

常用于 Console 面板快速调试,或注入到页面辅助分析的工具代码。 在任意位置插入,打印当前的函数调用链,不中断执行。 包装目标函数,记录每次调用的参数和返回值。 使用 Object.defineProperty 拦截属性的读写。 快速查找对象中所有函数类型的属性。 在嵌套对象中递归查找包含特定关键字的属性名。 有些网站在 JS 中用 console.log 输出加密中间值,但因日志太多难以查找,可以过滤关键词。 有些反调试代码通过检测函数的 toString() 结果来判断是否被 Hook。 在 XHR 断点命中后,一次性打印所有请求信息。 在 C

By yellowdog

js逆向

JS 逆向 Hook 与代码片段大全

Hook 的核心原理是利用 JavaScript 弱类型语言特性,用自定义函数替换原生函数,在调用时插入 debugger 或日志,从而定位加密逻辑。 两种核心实现方式: Hook 注入方式 浏览器 DevTools 场景 Node.js 补环境场景 参考 监控某个对象上指定属性的读取、写入、删除操作,精确定位属性被谁写入。 代理整个对象,监控其上所有属性的读写操作,适合不知道属性名时的全量监控。 对整个对象做 Proxy 代理,每次访问都打印 对象名.属性名 的完整路径,适合追踪链式访问。 Hook 内置对象的原型方法,监控 String、Array、

By yellowdog

js逆向

JS 逆向代码片段

整理自 snippet.js,包含两个部分: 监控一个对象的所有属性读取和写入,输出到 console。 用法: 适用场景:快速定位哪段代码在读写某个对象的属性。 当页面通过 JS 动态创建 <script> 标签加载外部脚本时触发断点。 方式一:defineProperty 方式二:Proxy 代理整个原型(更全面) 适用场景:网站动态插入第三方脚本(风控 JS、指纹采集 SDK),定位其加载时机和来源。 完整的 Node.js 补环境方案,在本地运行浏览器加密 JS 时使用。 功能列表: 对任意对象/函数递归包裹 Proxy,追踪所有操作并记录访问路

By yellowdog

js逆向

Hook 代码段

Hook 的核心原理是利用 JavaScript 弱类型语言特性,用自定义函数替换原生函数,在调用时插入 debugger 或日志,从而定位加密逻辑。 两种核心实现方式: 监控某个对象上指定属性的读取、写入、删除操作,精确定位属性被谁写入。 代理整个对象,监控其上所有属性的读写操作,适合不知道属性名时的全量监控。 Hook 内置对象的原型方法,监控 String、Array、Object 等原生方法的调用。 优先用 XHR/fetch 断点定位,再向上溯源:不要一开始就 Hook 加密函数,先在 DevTools Network 面板开启"XHR/fet

By yellowdog

js逆向

抖音 a_bogus 逆向案例总结

本案例对抖音 Web 端 URL 查询参数 a_bogus 完成了从抓包定位到离线复现的全链路逆向,产出了三类成果:方法论教程 JS逆向入门指南(/js-ni-xiang-ru-men-zhi-nan/)、SM3 哈希链算法深挖 a_bogus_sm3_analysis(/douyin-a_bogus-jia-mi-suan-fa-wan-zheng-fen-xi/),以及可运行工件 gen_abogus.mjs(Node + jsdom 生成器)/ abogus.py(Python 封装)/ example.py(调用样板)/ probe_sm3.mj

By yellowdog

js逆向

Douyin a_bogus 加密算法完整分析

抖音所有 API 请求的 URL 末尾都带有 a_bogus 参数,例如: a_bogus 约 160 字符,每次请求不同,是服务端验证请求合法性的核心凭据。 在 Chrome DevTools 对 URLSearchParams.prototype.append 打断点,触发条件 key === 'a_bogus',得到如下调用栈: 结论:a_bogus 由 bdms_1.0.1.19_fix.js 生成,内含自定义字节码虚拟机(VMP)。 bdms 文件分两层: 密码学原语(SM3)作为基础设施单独存在,没有被 VMP 保护。 在文件 offset

By yellowdog

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