js逆向

js逆向

Babel AST 入门

AST(Abstract Syntax Tree,抽象语法树)是将源代码解析成树形数据结构的表示方式。Babel 提供了一套完整的 AST 工具链,在 JS 逆向中可以用来还原混淆代码、提取加密参数、批量替换变量名等。 1. 工具链组成(#%E5%B7%A5%E5%85%B7%E9%93%BE%E7%BB%84%E6%88%90) 2. 安装(#%E5%AE%89%E8%A3%85) 3. 第一步:解析代码(parser)(#%E7%AC%AC%E4%B8%80%E6%AD%A5%EF%BC%9A%E8%A7%A3%E6%9E%90%E4%BB%A3%E

By yellowdog

js逆向

加密算法魔法数字速查

魔法数字(Magic Numbers)是加密算法中硬编码的特征常量:初始哈希值、轮常量、S-Box、椭圆曲线参数等。在逆向混淆代码时,全局搜索这些常量是定位加密函数最快的方式。 四个 32-bit 寄存器的初始值,最高频的 MD5 特征: 十进制形式(代码中有时写十进制): MD5 每轮使用 64 个常量 Ti = floor(abs(sin(i+1)) 2^32),前几个最有特征: 优先搜索 0x67452301 或十进制 1732584193,这是 MD5 最独特的特征。 前四个和 MD5 相同,第五个是区别: 十进制:1518500249, 18

By yellowdog

js逆向

逆向实战模板

收集常见的逆向分析场景和完整的 Python 还原模板,可直接复制修改使用。 目标:请求中有一个 sign 参数,定位后发现是 AES-CBC 加密结果。 目标:请求头中有 X-Signature,分析为 HMAC-SHA256。 目标:登录时密码被 RSA 加密,公钥从页面 JS 中提取。 目标:每次登录前先请求 /api/getPublicKey 获取 RSA 公钥。 目标:每次请求的 AES key 由时间戳和固定字符串 HMAC 生成。 先用已知真实请求包 100% 验证还原结果,再写采集逻辑:不要"感觉应该对"就接入爬虫;应从 DevTools

By yellowdog

js逆向

加密算法基础概念

对称加密中用于加密和解密的秘密字符串。密钥长度决定安全强度。 用于对称加密中引入随机性。每次加密使用不同的 IV,即使明文和密钥相同,密文也不同。 分组密码要求明文长度必须是块大小的整数倍(AES 块大小为 16 字节)。填充用于将不足的部分补齐。 决定分组密码如何处理连续的数据块。 加密后的二进制数据通常需要编码为字符串传输: 逆向中常见的数据类型转换: Python 中:str.encode('utf-8') → bytes JavaScript 中:new TextEncoder().encode(str) → Uint8Array 逆向前先判断算

By yellowdog

js逆向

国密算法:SM2 / SM3 / SM4

国密算法是中国国家密码管理局发布的商用密码标准,在政府类、金融类网站中广泛使用。逆向时如果发现常规算法(AES/RSA/SHA)对不上,应优先考虑国密。 SM3 是中国国密哈希标准,结构类似 SHA-256,但使用完全不同的初始值、压缩函数和轮常数。 这 8 个值是 SM3 最核心的特征,出现在所有 SM3 实现中: 0x7380166F 是全网唯一的 SM3 特征常量,搜索它即可定位 SM3 实现。 代码中通常以循环左移的形式出现: 代码中出现 << 9 与 << 17 配对,或 << 15 与 << 23 配对,是 SM3 的次级特征。 在 Chro

By yellowdog

js逆向

SHA 系列

SHA(Secure Hash Algorithm)是一族单向哈希函数,安全性高于 MD5,是目前主流的哈希算法。 搜索关键字:SHA1、SHA256、sha-256、CryptoJS.SHA256、createHash('sha256')、crypto.subtle.digest 用魔法数字区分 SHA 版本:SHA-1 初始向量为 0x67452301(与 MD5 相同!),通过后续常量区分;SHA-256 特征为 0x6a09e667,SHA-512 为 0x6a09e667f3bcc908,全局搜索这些常量可快速定位。 Hook crypto.s

By yellowdog

js逆向

RSA

RSA 是最常见的非对称加密算法。公钥加密,私钥解密;或私钥签名,公钥验签。JS 逆向中通常只需要用公钥加密(还原加密过程),私钥由服务端持有,无法获取。 逆向时在源码中找到的公钥常见两种形式: 还有一种是直接给出模数(n)和指数(e): 依赖库:pip install pycryptodome 或 pip install cryptography 搜索 JSEncrypt 或 -----BEGIN PUBLIC KEY----- 快速定位:这两个关键词几乎覆盖了 Web 端 RSA 的所有使用场景;其次搜索 setPublicKey、encrypt、B

By yellowdog

js逆向

MD5

MD5(Message Digest Algorithm 5)是一种单向哈希函数,输出固定 128 位(32 位十六进制字符串)。不可逆,常用于数据签名和完整性校验。 搜索特征常量而非函数名:混淆代码中函数名被替换,但算法的魔法数字(0x67452301、0xefcdab89、0x98badcfe、0x10325476)不会被混淆,全局搜索这 4 个初始化向量可快速定位 MD5 函数。 Hook CryptoJS.MD5 拦截明文:若页面使用 CryptoJS 库,在调用前注入 Hook 打印参数: 区分完整 MD5 和截取变体:目标站点可能只取 MD5

By yellowdog

js逆向

DES / 3DES

DES(Data Encryption Standard)和 3DES(Triple DES)是比 AES 更老的对称加密算法。目前在新系统中已基本被 AES 取代,但在一些老接口逆向中仍会遇到。 搜索关键字:CryptoJS.DES、CryptoJS.TripleDES、des-cbc、TripleDES、3DES 特征:块大小为 8 字节(填充后密文长度是 8 的倍数);密钥长度为 8 / 16 / 24 字节。 块大小是关键区分指标:DES/3DES 块大小为 8 字节,AES 为 16 字节。若解密后密文长度是 8 的倍数而非 16,优先怀疑 D

By yellowdog

js逆向

Base64 与编码

Base64 是编码方案而非加密,任何人都可以解码。但在逆向中,Base64 几乎出现在每一个加密场景中(作为加密结果的传输格式),因此必须熟练掌握其各种变体。 使用字符集:A-Z a-z 0-9 + /,末尾用 = 填充至 4 的倍数。 遇到不可打印字符先判断编码:抓包响应体乱码时,优先尝试 Base64 解码;若结果仍乱码,再尝试 Hex 解码、zlib/gzip 解压,排除组合编码(如先 AES 再 Base64)。 URL-safe Base64 是最常见变体:搜索 + 被替换为 -、/ 被替换为 _ 的 Base64 字符串;Python 解码

By yellowdog