WEB加密2&密文逆向&JS源码逆向&AES&DES&RSA&SHA
字数 2607 2025-08-29 08:30:36
加密算法逆向与JS源码逆向实战指南
一、加密算法概述
1. 常见加密算法分类
- 散列算法:MD5、SHA系列
- 对称加密:AES、DES
- 非对称加密:RSA
- 编码算法:BASE64(虽为编码但常被归类为加密)
2. 算法特性对比
| 算法类型 | 代表算法 | 密钥需求 | 输出长度 | 典型特征 |
|---|---|---|---|---|
| 散列 | MD5 | 可选 | 16/32位固定 | 固定长度输出 |
| 对称加密 | AES/DES | 必需 | 与明文相关 | 含+/和等号 |
| 非对称加密 | RSA | 公钥/私钥 | 与明文无关 | 明文相同密文可能不同 |
| 编码 | BASE64 | 无 | 约为原数据4/3 | 可能含等号 |
二、算法详解与逆向
1. BASE64加解密
特征:
- 通常以
=或==结尾(非绝对) - 包含A-Z, a-z, 0-9, +, /字符
逆向方法:
import base64
# 编码
encoded = base64.b64encode(b'plaintext')
# 解码
decoded = base64.b64decode(encoded)
注意事项:
- 可能存在无填充(无等号)变种
- 常用于加密后的二次编码
2. AES加密逆向
关键参数:
- Key(密钥):如
123456789123456 - IV(初始化向量):CBC模式需要
- 加密模式:ECB/CBC/CTR等
- 填充方式:PKCS5/PKCS7等
逆向工具使用:
- 识别加密模式(ECB无IV,CBC需要IV)
- 获取密钥和IV(通过源码或流量分析)
- 使用工具如CyberChef或OpenSSL解密
示例(ECB模式):
Key: 123456789123456
密文: U2FsdGVkX1+3kR5J7Z5gY2jD1Jz4T6wX
3. DES加密逆向
与AES区别:
- 密钥长度较短(56位)
- 加密强度较低
逆向要点:
- 确认加密模式(CBC/ECB)
- 获取密钥和IV
- 尝试不同工具(某些工具兼容性更好)
4. RSA加密逆向
核心要素:
- 公钥(Public Key)
- 私钥(Private Key)
- 加密方向:
- 公钥加密 → 私钥解密
- 私钥加密 → 公钥解密
逆向方法:
- 获取密钥对
- 使用openssl或Python库解密:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
private_key = RSA.import_key(open('private.pem').read())
cipher = PKCS1_OAEP.new(private_key)
plaintext = cipher.decrypt(ciphertext)
5. MD5与SHA散列
特征:
- 固定长度输出(MD5:16/32位,SHA1:40位等)
- 不可逆(但可碰撞破解)
增强型MD5(加盐):
$password = 123456;
$salt = "salt";
$a = md5($password);
$aa = $a . $salt;
$b = md5($aa);
破解方法:
- 彩虹表攻击
- 碰撞攻击
- 查在线数据库(如cmd5.com)
三、密文特征识别
1. 各类密文特征表
| 算法 | 长度特征 | 字符特征 | 其他特征 |
|---|---|---|---|
| MD5 | 32字符 | 十六进制 | 相同输入固定输出 |
| SHA1 | 40字符 | 十六进制 | 抗碰撞性强于MD5 |
| BASE64 | 4n/4n+1/4n+2 | A-Za-z0-9+/ | 常以=或==结尾 |
| AES | 可变 | 含+/等符号 | 块大小16字节 |
| DES | 可变 | 含+/等符号 | 块大小8字节 |
| RSA | 与密钥长度相关 | 二进制或BASE64编码 | 相同明文可能不同密文 |
2. 实战识别技巧
-
长度分析法:
- 32位十六进制 → 可能MD5
- 24/44等BASE64特征长度 → 可能BASE64
- 长随机字符串 → 可能AES/RSA
-
字符分析法:
- 含+/和等号 → 可能BASE64或对称加密
- 纯十六进制 → 可能散列值
-
上下文分析法:
- 登录密码字段 → 可能MD5/SHA
- 传输数据 → 可能AES/RSA
- URL参数 → 可能BASE64
四、JS源码逆向实战
1. 前端加密定位方法
步骤:
- 使用浏览器开发者工具(F12)
- 定位到提交事件的监听器
- 查找加密函数调用(搜索
encrypt、md5等关键词) - 跟踪函数定义
常见位置:
- 表单提交事件处理函数
- AJAX请求前的数据处理
- 独立的加密工具JS文件
2. 典型逆向案例
案例1:登录密码MD5加密
// 前端加密代码
function encryptPassword(pwd) {
return md5(pwd + 'salt_value');
}
逆向方法:
- 抓包获取加密后的密码
- 分析JS找到加密逻辑
- 复制加密函数本地重现
案例2:AES加密参数
// 使用CryptoJS的AES加密
var encrypted = CryptoJS.AES.encrypt(
"plaintext",
CryptoJS.enc.Utf8.parse("1234567890123456"),
{
iv: CryptoJS.enc.Utf8.parse("1234567890123456"),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);
逆向要点:
- 提取密钥和IV
- 确认加密模式和填充方式
- 使用相同参数解密
3. 源码泄露利用
常见泄露点:
.git目录泄露- 备份文件(.zip, .bak, .swp)
- 注释中的敏感信息
利用方法:
- 下载泄露的源码
- 搜索加密相关关键词(encrypt, key, iv等)
- 分析加密算法实现
- 提取关键参数
五、实战工具推荐
1. 在线工具
- CyberChef(全能加密工具箱)
- Cmd5(MD5解密)
- Base64Decode(编码转换)
2. 桌面工具
- Burp Suite(流量分析)
- Wireshark(网络抓包)
- IDA Pro(二进制逆向)
3. 编程库
- Python: hashlib, pycryptodome, rsa
- JavaScript: CryptoJS
- Java: Bouncy Castle
六、综合实战流程
-
信息收集:
- 收集所有可见的加密数据
- 抓取网络请求和响应
-
特征分析:
- 分析密文长度和字符组成
- 尝试基础解密(BASE64/MD5)
-
源码审计:
- 前端JS分析
- 寻找源码泄露
- 识别加密函数
-
参数提取:
- 获取密钥/IV
- 确认加密算法和模式
-
解密验证:
- 使用提取的参数解密
- 验证解密结果
-
自动化实现:
- 编写解密脚本
- 集成到攻击工具链中
七、防护建议
-
前端防护:
- 避免敏感加密逻辑放在前端
- 使用混淆和压缩JS代码
-
后端防护:
- 使用强加密算法(如AES-256)
- 定期更换密钥
- 实现多因素加密
-
传输防护:
- 使用HTTPS加密通道
- 对敏感参数二次加密
-
代码防护:
- 避免注释敏感信息
- 防止源码泄露
- 实现密钥分离管理
附录:常见问题解答
Q:如何判断是AES还是DES加密?
A:主要通过密钥长度判断:
- AES密钥:128/192/256位
- DES密钥:56位
也可以通过加密块大小: - AES:16字节块
- DES:8字节块
Q:没有IV能否解密AES?
A:如果是ECB模式可以,其他模式需要IV。可通过:
- 硬编码IV常见值(全零等)
- 暴力破解IV
- 从其他渠道获取IV
Q:RSA私钥泄露怎么办?
A:立即:
- 撤销所有相关证书
- 更换密钥对
- 审计所有使用该密钥的系统
- 排查泄露原因