# js逆向 **Repository Path**: lznode/js-reverse ## Basic Information - **Project Name**: js逆向 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-02-12 - **Last Updated**: 2025-03-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JavaScript逆向常见加密算法特征速查手册 ## 一、对称加密算法 ### 1. AES **特征**: - 固定分组长度128bit,常见加密模式CBC/ECB,填充方式PKCS7/PKCS5 - 代码中常见`CryptoJS.AES.encrypt`、`createCipheriv('aes-*-cbc')` - 典型密钥长度:128/192/256位 **搜索关键词**: `AES`、`CBC`、`ECB`、`createCipheriv`、`CryptoJS.mode.CBC`、`CryptoJS.pad.Pkcs7` ```javascript // CryptoJS实现示例 var encrypted = CryptoJS.AES.encrypt( CryptoJS.enc.Utf8.parse(text), CryptoJS.enc.Utf8.parse(key), { iv: CryptoJS.enc.Utf8.parse(iv), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); ``` ### 2. DES/3DES **特征**: - 密钥长度56位(DES)或168位(3DES) - 常见模式ECB/CBC,填充方式PKCS5 - 代码中可见`DES.encrypt`、`tripledes` **搜索关键词**: `DES`、`3DES`、`tripledes`、`des-ede3-cbc` ```javascript // Node.js实现示例 const cipher = crypto.createCipheriv('des-ede3-cbc', key, iv); let encrypted = cipher.update(text, 'utf8', 'base64'); encrypted += cipher.final('base64'); ``` ## 二、非对称加密算法 ### RSA **特征**: - 公钥加密/私钥解密,密钥对生成(常见1024/2048位) - 代码中常见`RSAKey`、`setPublic`、`encrypt` - 典型填充方式:PKCS1_OAEP **搜索关键词**: `RSA`、`setPublic`、`publicEncrypt`、`JSEncrypt` ```javascript // 使用JSEncrypt库 var encrypt = new JSEncrypt(); encrypt.setPublicKey(publicKey); var encrypted = encrypt.encrypt(plaintext); ``` ## 三、哈希算法 ### 1. MD5 **特征**: - 固定输出32位十六进制字符串 - 代码中常见`CryptoJS.MD5`、`createHash('md5')` **搜索关键词**: `MD5`、`createHash('md5')`、`hex_md5` ```javascript // 原生实现示例 function md5(string) { return crypto.createHash('md5').update(string).digest('hex'); } ``` ### 2. SHA系列 **特征**: - 输出长度:SHA1(40)/SHA256(64)/SHA512(128) - 代码中常见`CryptoJS.SHA256`、`createHash('sha1')` **搜索关键词**: `SHA1`、`SHA256`、`SHA512`、`createHash('sha')` ```javascript // WebCrypto API示例 const digest = await window.crypto.subtle.digest('SHA-256', data); ``` ## 四、国密算法 ### 1. SM4 **特征**: - 国标对称加密,分组长度128bit,密钥长度128bit - 代码中常见`sm4.encrypt`、`SM4_CBC` **搜索关键词**: `SM4`、`国密`、`sm-crypto` ```javascript // gm-crypto示例 const sm4 = require('gm-crypto').sm4; const encrypted = sm4.encrypt(text, key, { mode: 'cbc', iv: iv, inputEncoding: 'utf8', outputEncoding: 'base64' }); ``` ### 2. SM2 **特征**: - 国标非对称加密,基于椭圆曲线 - 代码中常见`SM2KeyPair`、`sm2.encrypt` **搜索关键词**: `SM2`、`国密非对称` ```javascript const sm2 = require('sm-crypto').sm2; const cipherText = sm2.doEncrypt(plainText, publicKey); ``` ## 五、编码类 ### Base64 **特征**: - 字符集包含`A-Za-z0-9+/=`,可能有URL安全变种(`-_`) - 代码中常见`btoa()`、`atob()`、`base64.encode` **搜索关键词**: `base64`、`btoa`、`atob`、`Buffer.from().toString('base64')` ```javascript // Node.js实现 const encoded = Buffer.from(str).toString('base64'); const decoded = Buffer.from(encoded, 'base64').toString(); ``` ## 总结表格 | 算法类型 | 算法名称 | 密钥/摘要长度 | 典型特征 | 常见关键词 | |---------|---------|-------------|---------|-----------| | 对称加密 | AES | 128/192/256 | CBC/ECB模式 | `createCipheriv`、`CryptoJS.AES` | | 对称加密 | SM4 | 128bit | 国密标准 | `sm4.encrypt`、`SM4_CBC` | | 非对称加密 | RSA | 1024/2048 | 公钥加密 | `publicEncrypt`、`JSEncrypt` | | 非对称加密 | SM2 | 256bit | 椭圆曲线 | `SM2KeyPair`、`doEncrypt` | | 哈希算法 | MD5 | 128bit | 32位十六进制 | `createHash('md5')`、`hex_md5` | | 哈希算法 | SHA256 | 256bit | 64位十六进制 | `createHash('sha256')` | | 哈希算法 | SM3 | 256bit | 国密哈希 | `sm3.digest()` | | 编码类 | Base64 | N/A | `+/=`结尾 | `btoa()`、`Buffer.from` | ## 逆向技巧 1. 搜索特征字符串:`encrypt`、`decrypt`、`mode`、`padding` 2. 定位加密库:`CryptoJS`、`forge`、`sjcl`、`sm-crypto` 3. 调试关键点:`encrypt()`方法调用栈、密钥生成位置 4. 识别模式参数:`CBC`需要IV值,`ECB`无IV 5. 注意密钥处理:硬编码密钥、密钥拼接方式、动态生成逻辑