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等

逆向工具使用

  1. 识别加密模式(ECB无IV,CBC需要IV)
  2. 获取密钥和IV(通过源码或流量分析)
  3. 使用工具如CyberChef或OpenSSL解密

示例(ECB模式)

Key: 123456789123456
密文: U2FsdGVkX1+3kR5J7Z5gY2jD1Jz4T6wX

3. DES加密逆向

与AES区别

  • 密钥长度较短(56位)
  • 加密强度较低

逆向要点

  1. 确认加密模式(CBC/ECB)
  2. 获取密钥和IV
  3. 尝试不同工具(某些工具兼容性更好)

4. RSA加密逆向

核心要素

  • 公钥(Public Key)
  • 私钥(Private Key)
  • 加密方向:
    • 公钥加密 → 私钥解密
    • 私钥加密 → 公钥解密

逆向方法

  1. 获取密钥对
  2. 使用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. 实战识别技巧

  1. 长度分析法

    • 32位十六进制 → 可能MD5
    • 24/44等BASE64特征长度 → 可能BASE64
    • 长随机字符串 → 可能AES/RSA
  2. 字符分析法

    • 含+/和等号 → 可能BASE64或对称加密
    • 纯十六进制 → 可能散列值
  3. 上下文分析法

    • 登录密码字段 → 可能MD5/SHA
    • 传输数据 → 可能AES/RSA
    • URL参数 → 可能BASE64

四、JS源码逆向实战

1. 前端加密定位方法

步骤

  1. 使用浏览器开发者工具(F12)
  2. 定位到提交事件的监听器
  3. 查找加密函数调用(搜索encryptmd5等关键词)
  4. 跟踪函数定义

常见位置

  • 表单提交事件处理函数
  • AJAX请求前的数据处理
  • 独立的加密工具JS文件

2. 典型逆向案例

案例1:登录密码MD5加密

// 前端加密代码
function encryptPassword(pwd) {
    return md5(pwd + 'salt_value');
}

逆向方法

  1. 抓包获取加密后的密码
  2. 分析JS找到加密逻辑
  3. 复制加密函数本地重现

案例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
    }
);

逆向要点

  1. 提取密钥和IV
  2. 确认加密模式和填充方式
  3. 使用相同参数解密

3. 源码泄露利用

常见泄露点

  • .git目录泄露
  • 备份文件(.zip, .bak, .swp)
  • 注释中的敏感信息

利用方法

  1. 下载泄露的源码
  2. 搜索加密相关关键词(encrypt, key, iv等)
  3. 分析加密算法实现
  4. 提取关键参数

五、实战工具推荐

1. 在线工具

  • CyberChef(全能加密工具箱)
  • Cmd5(MD5解密)
  • Base64Decode(编码转换)

2. 桌面工具

  • Burp Suite(流量分析)
  • Wireshark(网络抓包)
  • IDA Pro(二进制逆向)

3. 编程库

  • Python: hashlib, pycryptodome, rsa
  • JavaScript: CryptoJS
  • Java: Bouncy Castle

六、综合实战流程

  1. 信息收集

    • 收集所有可见的加密数据
    • 抓取网络请求和响应
  2. 特征分析

    • 分析密文长度和字符组成
    • 尝试基础解密(BASE64/MD5)
  3. 源码审计

    • 前端JS分析
    • 寻找源码泄露
    • 识别加密函数
  4. 参数提取

    • 获取密钥/IV
    • 确认加密算法和模式
  5. 解密验证

    • 使用提取的参数解密
    • 验证解密结果
  6. 自动化实现

    • 编写解密脚本
    • 集成到攻击工具链中

七、防护建议

  1. 前端防护

    • 避免敏感加密逻辑放在前端
    • 使用混淆和压缩JS代码
  2. 后端防护

    • 使用强加密算法(如AES-256)
    • 定期更换密钥
    • 实现多因素加密
  3. 传输防护

    • 使用HTTPS加密通道
    • 对敏感参数二次加密
  4. 代码防护

    • 避免注释敏感信息
    • 防止源码泄露
    • 实现密钥分离管理

附录:常见问题解答

Q:如何判断是AES还是DES加密?
A:主要通过密钥长度判断:

  • AES密钥:128/192/256位
  • DES密钥:56位
    也可以通过加密块大小:
  • AES:16字节块
  • DES:8字节块

Q:没有IV能否解密AES?
A:如果是ECB模式可以,其他模式需要IV。可通过:

  1. 硬编码IV常见值(全零等)
  2. 暴力破解IV
  3. 从其他渠道获取IV

Q:RSA私钥泄露怎么办?
A:立即:

  1. 撤销所有相关证书
  2. 更换密钥对
  3. 审计所有使用该密钥的系统
  4. 排查泄露原因
加密算法逆向与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, +, /字符 逆向方法 : 注意事项 : 可能存在无填充(无等号)变种 常用于加密后的二次编码 2. AES加密逆向 关键参数 : Key(密钥):如 123456789123456 IV(初始化向量):CBC模式需要 加密模式:ECB/CBC/CTR等 填充方式:PKCS5/PKCS7等 逆向工具使用 : 识别加密模式(ECB无IV,CBC需要IV) 获取密钥和IV(通过源码或流量分析) 使用工具如CyberChef或OpenSSL解密 示例(ECB模式) : 3. DES加密逆向 与AES区别 : 密钥长度较短(56位) 加密强度较低 逆向要点 : 确认加密模式(CBC/ECB) 获取密钥和IV 尝试不同工具(某些工具兼容性更好) 4. RSA加密逆向 核心要素 : 公钥(Public Key) 私钥(Private Key) 加密方向: 公钥加密 → 私钥解密 私钥加密 → 公钥解密 逆向方法 : 获取密钥对 使用openssl或Python库解密: 5. MD5与SHA散列 特征 : 固定长度输出(MD5:16/32位,SHA1:40位等) 不可逆(但可碰撞破解) 增强型MD5(加盐) : 破解方法 : 彩虹表攻击 碰撞攻击 查在线数据库(如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加密 逆向方法 : 抓包获取加密后的密码 分析JS找到加密逻辑 复制加密函数本地重现 案例2:AES加密参数 逆向要点 : 提取密钥和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:立即: 撤销所有相关证书 更换密钥对 审计所有使用该密钥的系统 排查泄露原因