AgentSkillsCN

static-analysis

JS 静态代码分析经验:混淆代码识别、加密函数定位、代码还原技巧。 触发场景:分析混淆代码、精准定位加密函数、还原算法逻辑。

SKILL.md
--- frontmatter
name: static-analysis
description: |
  JS 静态代码分析经验。混淆识别、加密定位、代码还原技巧。
  触发:分析混淆代码、定位加密函数、还原算法逻辑。

静态分析经验

加密入口定位

高频关键词:

  • 加密相关:encrypt, decrypt, sign, verify, hash
  • 参数相关:token, signature, timestamp, nonce
  • 算法名:MD5, SHA, AES, RSA, HMAC, SM2, SM3, SM4

从请求参数反推: 找到加密参数名(如 sign),全局搜索赋值位置。

混淆器识别

特征类型难度
_0x 开头变量 + 大数组obfuscator.io
eval(function(p,a,c,k,e,d)Packer
大量 switch-case 嵌套控制流平坦化
字符串全是 \x 转义字符串混淆
所有函数名是随机字符标识符混淆

控制流平坦化: 静态难还原,建议配合动态分析。

加密库特征

CryptoJS:

  • 关键词:WordArray, enc.Utf8, enc.Hex, enc.Base64
  • 调用模式:CryptoJS.AES.encrypt(data, key)

JSEncrypt (RSA):

  • 关键词:setPublicKey, setPrivateKey, encrypt, decrypt
  • 通常有 PEM 格式公钥字符串

国密:

  • 关键词:sm2.doEncrypt, sm3, sm4.encrypt
  • 注意 C1C3C2 和 C1C2C3 模式区别

Webpack 解包要点

  • 入口模块:找 __webpack_require__.s 或数组最后一个元素
  • 异步加载:搜索 webpackJsonp__webpack_require__.e
  • 模块 ID:可能是数字或哈希字符串

加密算法特征速查

哈希算法

算法特征输出长度
MD5md5(, CryptoJS.MD532位hex
SHA1sha1, CryptoJS.SHA140位hex
SHA256sha256, CryptoJS.SHA25664位hex
SM3sm3(, SM364位hex

对称加密

算法特征模式
AESAES.encrypt, CryptoJS.AESCBC/ECB/CTR/GCM
DESDES.encrypt, CryptoJS.DESCBC/ECB
SM4sm4(, SM4.encryptCBC/ECB

非对称加密

算法特征用途
RSARSAKey, JSEncrypt, KEYUTIL加密/签名
SM2sm2(, SM2.encrypt, sm2.doEncrypt加密/签名

反混淆处理

混淆类型识别

类型特征
evaleval( 包装
字符串数组_0x 变量
控制流switch-case 嵌套
Unicode\u0061 编码

处理步骤

  1. 识别混淆类型
  2. 解码字符串
  3. 简化控制流
  4. 重命名变量