一个完整的可运行的AES加解密示例,然后展示如何用Hook拦截解密过程。

1完整的AES加解密网页

使用步骤

  1. 保存HTML代码为 .html文件并在浏览器打开

  2. 打开开发者工具(F12)→ Console(控制台)

  3. 复制Hook代码到控制台执行

  4. 点击页面的"解密数据"按钮

  5. 观察控制台输出

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>AES加解密演示</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .container { max-width: 800px; margin: 0 auto; }
        .section { margin: 20px 0; padding: 20px; border: 1px solid #ddd; border-radius: 8px; }
        textarea { width: 100%; height: 80px; margin: 10px 0; }
        button { padding: 10px 20px; margin: 5px; background: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer; }
        button:hover { background: #0056b3; }
        .result { background: #f8f9fa; padding: 10px; border-radius: 4px; margin: 10px 0; }
        .hook-info { background: #fff3cd; border-left: 4px solid #ffc107; padding: 10px; margin: 10px 0; }
    </style>
</head>
<body>
    <div class="container">
        <h1>AES加解密演示 + Hook拦截</h1>

        <!-- 加密区域 -->
        <div class="section">
            <h3>1. 填入需要加密的数据和密钥</h3>
            <div>
                <textarea id="plainText" placeholder="输入要加密的文本">这是秘密数据123</textarea>
                <br>
                <input type="password" id="encryptKey" placeholder="加密密钥" value="mySecretKey123">
                <br>
                <button onclick="encryptData()">加密数据</button>
            </div>
            <div class="result" id="encryptedResult"></div>
        </div>

        <!-- 解密区域 -->
        <div class="section">
            <h3>2. 解密数据</h3>
            <div>
                <textarea id="cipherText" placeholder="加密后的数据"></textarea>
                <br>
                <input type="password" id="decryptKey" placeholder="解密密钥" value="mySecretKey123">
                <br>
                <button onclick="decryptData()">解密数据</button>
                <button onclick="autoTest()">自动测试</button>
            </div>
            <div class="result" id="decryptedResult"></div>
        </div>

        <!-- Hook区域 -->
        <div class="section">
            <h3>3. Hook拦截演示</h3>
            <div class="hook-info">
                <p>打开浏览器控制台(F12),粘贴下面的Hook代码,然后点击"解密数据"</p>
                <button onclick="copyHookCode()">复制Hook代码到剪贴板</button>
            </div>
            <pre id="hookCode"></pre>
        </div>
    </div>

    <script>
        // AES加密函数
        function encryptData() {
            const plainText = document.getElementById('plainText').value;
            const key = document.getElementById('encryptKey').value;

            if (!plainText || !key) {
                alert('请输入文本和密钥');
                return;
            }

            try {
                // 使用CryptoJS进行AES加密
                const encrypted = CryptoJS.AES.encrypt(plainText, key).toString();
                document.getElementById('encryptedResult').innerHTML =
                    `<strong>加密结果:</strong> ${encrypted}`;
                document.getElementById('cipherText').value = encrypted;
            } catch (error) {
                alert('加密失败: ' + error.message);
            }
        }

        // 原始的解密函数 - 这是我们要Hook的目标
        function decryptData() {
            const cipherText = document.getElementById('cipherText').value;
            const key = document.getElementById('decryptKey').value;

            if (!cipherText || !key) {
                alert('请输入加密数据和密钥');
                return;
            }

            try {
                // 使用CryptoJS进行AES解密
                const decryptedBytes = CryptoJS.AES.decrypt(cipherText, key);
                const decryptedText = decryptedBytes.toString(CryptoJS.enc.Utf8);

                if (!decryptedText) {
                    throw new Error('解密失败,可能是密钥错误');
                }

                document.getElementById('decryptedResult').innerHTML =
                    `<strong>解密结果:</strong> ${decryptedText}`;

                return decryptedText;
            } catch (error) {
                alert('解密失败: ' + error.message);
                return null;
            }
        }

        // 网站内部使用的解密函数(模拟)
        function internalDecrypt(data, secretKey) {
            console.log('🔐 内部解密函数被调用');
            const decrypted = CryptoJS.AES.decrypt(data, secretKey);
            return decrypted.toString(CryptoJS.enc.Utf8);
        }

        // 自动测试函数
        function autoTest() {
            document.getElementById('plainText').value = '自动测试数据:' + new Date().toLocaleTimeString();
            encryptData();
            setTimeout(() => {
                decryptData();
            }, 500);
        }

        // 复制Hook代码到剪贴板
        function copyHookCode() {
            const hookCode = `// =====================
// Hook拦截解密函数代码
// 复制这段代码到控制台执行
// =====================

console.log('🔧 开始安装Hook...');

// 保存原始解密函数引用
const originalDecrypt = window.decryptData;

// Hook解密函数
window.decryptData = function(cipherText, key) {
    // 获取参数(如果没有传入,从页面获取)
    const actualCipherText = cipherText || document.getElementById('cipherText').value;
    const actualKey = key || document.getElementById('decryptKey').value;

    console.log('🚨 HOOK拦截到解密请求!');
    console.log('📥 解密前数据:', actualCipherText);
    console.log('🔑 使用的密钥:', actualKey);
    console.log('📊 数据长度:', actualCipherText.length);

    // 调用原始解密函数
    const result = originalDecrypt.call(this, cipherText, key);

    console.log('📤 解密后数据:', result);
    console.log('✅ Hook拦截完成!');
    console.log('----------------------------------------');

    return result;
};

// 也Hook内部解密函数
const originalInternalDecrypt = window.internalDecrypt;
window.internalDecrypt = function(data, secretKey) {
    console.log('🔍 拦截到内部解密函数调用!');
    console.log('📥 解密前:', data);
    console.log('🔑 密钥:', secretKey);

    const result = originalInternalDecrypt.call(this, data, secretKey);

    console.log('📤 解密后:', result);
    console.log('----------------------------------------');

    return result;
};

console.log('✅ Hook安装完成!现在尝试点击"解密数据"按钮');`;

            navigator.clipboard.writeText(hookCode).then(() => {
                alert('Hook代码已复制到剪贴板!请到控制台(F12)粘贴执行');
            });
        }

        // 初始化显示Hook代码
        document.getElementById('hookCode').textContent = `// =====================
// Hook拦截解密函数代码
// 复制这段代码到控制台执行
// =====================

console.log('🔧 开始安装Hook...');

// 保存原始解密函数引用
const originalDecrypt = window.decryptData;

// Hook解密函数
window.decryptData = function(cipherText, key) {
    // 获取参数
    const actualCipherText = cipherText || document.getElementById('cipherText').value;
    const actualKey = key || document.getElementById('decryptKey').value;

    console.log('🚨 HOOK拦截到解密请求!');
    console.log('📥 解密前数据:', actualCipherText);
    console.log('🔑 使用的密钥:', actualKey);

    // 调用原始解密函数
    const result = originalDecrypt.call(this, cipherText, key);

    console.log('📤 解密后数据:', result);
    console.log('✅ Hook拦截完成!');

    return result;
};

console.log('✅ Hook安装完成!');`;

        // 页面加载时自动加密一些数据
        window.onload = function() {
            setTimeout(autoTest, 1000);
        };
    </script>
</body>
</html>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值