在JS逆向系列课的第12课《一叶障目 服务端返回的神秘字符串》中，我们见到了两种看起来很奇怪的“神秘字符串”，也学会了如何轻松干掉它们。 那么现在，请运用你在第12课中学到的知识，尝试做一下这道题吧~

提示：这是视频中的第二种神秘字符串。

请问：

第2个帖子（以1为起始）的HTML中id为content的部分中一共有多少个br标签？

![debugger](../img/117.png)

服务器返回的特殊字符串

    {
        "status": 1,
        "data": "[encoded data, 8288 characters]"
    }
    
很明显是 AES 加密

这里就很熟悉了 AES加密，贴一段加密代码

    const CryptoJS = require("crypto-js");
    
    let value = "123456"; //待加密的字符串
    let secret_value = "af25-87hk-a35v-5";
    let iv_value = "af25-87hk-a35v-5"; // 初始向量 initial vector 16位
    
    // 密匙和向量处理
    let secret = CryptoJS.enc.Utf8.parse(secret_value);
    let iv = CryptoJS.enc.Utf8.parse(iv_value);
    
    // 加密
    let encrypted = CryptoJS.AES.encrypt(value, secret, {
        iv: iv,
        // mode 支持 CBC, CFB,CTB,ECB,OFB,OFB, 默认CBC
        mode: CryptoJS.mode.CBC,
    
        // NoPadding, zeropadding 默认Pkcs7 即 pkcs5
        padding: CryptoJS.pad.Pkcs7
    });
    
    // 将加密结果转换为字符串
    encrypted = encrypted.toString();
    
    // 解密，传入密文，密钥盒向量设置加密与填充模式
    let decrypted = CryptoJS.AES.decrypt(encrypted, secret, {
        iv: iv,
        // mode 支持 CBC, CFB,CTB,ECB,OFB,OFB, 默认CBC
        mode: CryptoJS.mode.CBC,
    
        // NoPadding, zeropadding 默认Pkcs7 即 pkcs5
        padding: CryptoJS.pad.Pkcs7
    });
    
    // 将解密结果转换为utf8字符串
    decrypted = CryptoJS.enc.Utf8.stringify(decrypted);
    
    console.log(value);
    console.log(encrypted);
    console.log(decrypted);

既然判断是aes加密这里需要得到

    密匙16位 secret_value，
    初始向量 initial vector 16位 iv_value， 
    mode

直接在控制台搜索 decrypt 

![debugger](../img/118.png)

既然是返回的数据是加密的，那么前端也需要解密才能显示数据

继续断点

![debugger](../img/119.png)

到这里能基本判断 data = JSON.parse(decrypt(key, iv, content)); 是解密函数

进入函数

![debugger](../img/120.png)

得到

    密文 ： "[encoded data, 8256 characters]"
    iv ： "xD6CmSZT3mPNABwT"
    mode: CryptoJS.mode.CBC
    key ： "xD6CmSZT3mPNABwTTPZ6SEtRXTre78As"
    
    
测试代码

    const CryptoJS = require("crypto-js");
    let secret_value = '4rshXwWcMQf2xdxFfeDPzbNYmyMx65cM'; //密匙 32位
    let iv_value = '4rshXwWcMQf2xdxF'; // 初始向量 initial vector 16位
    
    // 密匙和向量处理
    let secret = CryptoJS.enc.Utf8.parse(secret_value);
    let iv = CryptoJS.enc.Utf8.parse(iv_value);
    
    // 将加密结果转换为字符串
    encrypted = "[encoded data, 8256 characters]";
    
    // 解密，传入密文，密钥盒向量设置加密与填充模式
    let decrypted = CryptoJS.AES.decrypt(encrypted, secret, {
        iv: iv,
        // mode 支持 CBC, CFB,CTB,ECB,OFB,OFB, 默认CBC
        mode: CryptoJS.mode.CBC,
    
        // NoPadding, zeropadding 默认Pkcs7 即 pkcs5
        padding: CryptoJS.pad.Pkcs7
    });
    
    // 将解密结果转换为utf8字符串
    decrypted = CryptoJS.enc.Utf8.stringify(decrypted);
    
    console.log(encrypted);
    console.log(decrypted);
    
结果
    
![debugger](../img/121.png)
