js逆向常用加密 + 微信公众号平台试练

js常见的加密方式

  • 常见的加密算法基本分为这几类:
    • 线性散列算法(签名算法) MD5 md2 md4 sha1 sha256 sha512 (取盐)
    • 对称性加密算法 AES DES
    • 非对称性加密算法 RSA
      在这里插入图片描述

Md5加密

  • MD5 是一种广泛使用的线性散列算法, 可以产生出一个128位的散列值(hash value),MD5加密之后产生的 一般是固定长度 (32位或者16位)的数据
  • 解密:
    • 常规讲 MD5不存在解密的, 但是可以反向暴力破解
      在测试的时候 一般默认密码输入123456 抓包看到加密的如果是e10adc3949ba59abbe56e057f20f883e(32位的)则是md5加密

示例代码:

<!DOCTYPE html>
<html lang="en">
<script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script>
<script type="text/javascript">
    var hashCode = md5('i am bobo!');
    alert(hashCode)
</script>
</html>

注意后续js中出现 md5字样 基本上就是 采用md5加密方式 如果加密的是 16进制 且32位长度 那大概率也是md5加密

DES/AES 加密

  • DES 即数据加密标准, 是一种使用密钥加密的算法。 该算法是一种对称加密方式, 其加密运算、解密运算需要使用同样的密钥( 一组字符串)
  • 注意:
    • 现在用AES这个标准来替代原先的DES。
    • AES和DES的区别:
      • 加密后密文长度的不同:
        • DES 加密后密文长度是8的整数倍
        • AES 加密后密文长度是16发整数倍
      • 应用场景不同:
        • 企业级开发使用DES足够安全
        • 如果要求高 则使用AES
      • DES 和AES 切换只需要修改 CryptoJS.AES <=> CryptoJS.DES
  • 使用DES/AES进行数据交互时要求双方都拥有相同的私钥
  • 破解方法:
    • 暴力破解。
  • DES算法的入口参数有三个:
  • Key、Data、Mode、padding.
    • Key 位7个字节共56位, 是DES算法的工作密钥
    • Data位8个字节64位, 是要被加密或被解密的数据
    • Mode位DES的工作方式
    • padding位填充模式, 如果加密后密文长度如果达不到指定整数倍(8个字节、16个字节)填充对应字节
      示例代码
<!DOCTYPE html>
<html lang="en">
<script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>
<script type="text/javascript">
    var aseKey = '12345678';     // 定制密钥, 长度必须为:8/16/32位
    var message = "i am bobo,who are you ?";
    // 加密 DES/AES 切换只需要修改 CryptoJS.DES -》 CryptoJS.AES
    var encrypt = CryptoJS.DES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), {
        mode: CryptoJS.mode.ECB,        // 这两行固定写法
        padding: CryptoJS.pad.Pkcs7
    }).toString();

    alert(encrypt);
    // 解密
    var decrypt = CryptoJS.DES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey),{
        mode: CryptoJS.mode.ECB,        // 这两行固定写法
        padding: CryptoJS.pad.Pkcs7
    }).toString(CryptoJS.enc.Utf8);
    alert(decrypt);     // 解密完的密码
</script>
</html>

出现 DES 或者 AES基本上就是该加密方式

RSA加密

公钥加密 私钥解密
在公开密钥加密和电子商业中RSA被广泛使用
``私钥不可随心设置 是根据公钥计算生成的

示例代码

<!DOCTYPE html>
<html lang="en">
<script src="https://cdn.bootcss.com/jsencrypt/3.0.0-beta.1/jsencrypt.js"></script>
<script type="text/javascript">
    // 公钥
    var PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----' +
        'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2MHiVKHV2bOwFpg0mZb6B3e/a' +
        '59nezjIEZmbe24fxVZwQ3p0q2DWtqI0eGQtf0wJ4DD+12nPbZVWOCxUKCk9M+t/T' +
        '9d0j9MaTUgkBvM0JVNtYzqgstIcok0tlWblvt/1gQes0jXkJLHu9fwR6t7R0eqAC' +
        'Z4A495mhf6/QbZurZQIDAQAB' +
        '-----END PUBLIC KEY-----';
    // 私钥
    var PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----" +
        "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALYweJUodXZs7AWm" +
        "DSZlvoHd79rn2d7OMgRmZt7bh/FVnBDenSrYNa2ojR4ZC1/TAngMP7Xac9tlVY4L" +
        "FQoKT0z639P13SP0xpNSCQG8zQlU21jOqCy0hyiTS2VZuW+3/WBB6zSNeQkse71/" +
        "BHq3tHR6oAJngDj3maF/r9Btm6tlAgMBAAECgYAOpcT8EP2ooMc1CQ2jmaiAXmyL" +
        "R/qvPBqvWeBJaJL8Zyqd/JfcOvfN13BJDDBq6tcW+b0hjMelyvbe7asqXHvVjJ3d" +
        "f/ay7LxLLdzx/SxdaD6Llfwzm7g7Uljw/fqF4cd+AY1As4gRHrGO9xA+QR/vg1U7" +
        "6b/vlsD8yfIcQSwYXQJBAPIdK5m+1CxPIdXYWTsXvOOB6ACpIosFcfa3uQ14OQ5I" +
        "0NrUXlskVe6Y5sGE5fcwgzHy2iaDu5gT/sK53oiuPTcCQQDAo3WxYJamJ3mK9EXf" +
        "BlxNAmH1zG7Jp3ZzKzJNWOG4Q1EEG1fJQB3Z6V2unvPEu7A2zxthG+iRrvTBMU6u" +
        "DopDAkB+gCNBx2UQaaAiHVIx/+sfa8aOYdC8lnG/GKtFkGUvQ3hsfb13HXsQmS8o" +
        "OYn2J5DEzkCREw83HGtlzruo6nDtAkEAkRsPzlrpX6MghLDX6NVLtZ5z18j0MuX3" +
        "7Wy+aVDoRfo/Do7iI3AujDSjIqQND0YpyD9dalqxZvuY1eWkVKwTLQJBAK6iIbD+" +
        "hk6IVIZmqwwqxYL0/q3XHnczewxG5NHg66gGl86GZJITbLXEnju+xnFXHrGdplZB" +
        "eZJpkUz1wAcaoGc=" +
        "-----END PRIVATE KEY-----";
    // 加密 DES/AES 切换只需要修改 CryptoJS.DES -》 CryptoJS.AES
    var encrypt = new JSEncrypt();  // 实例化加密对象
    encrypt.setPublicKey(PUBLIC_KEY);   // 设置公钥
    var encrypted = encrypt.encrypt('hello bobo!'); // 对指定数据进行加密
    alert(encrypted);

    // 使用私钥解密
    var decrypt = new JSEncrypt();
    decrypt.setPrivateKey(PRIVATE_KEY);   // 设置私钥
    var uncrypted = decrypt.decrypt(encrypted); // 解密
    alert(uncrypted);     // 解密完
</script>
</html>

证书中包含了 公钥和企业相关信息

微信公众号平台js算法改写

  • 先输入错误的邮箱和密码 然后 打开抓包工具 点击登录 看看抓包工具
    在这里插入图片描述
  • 然后通过 查看该请求调用了那些js文件 判断出最右可能的
    在这里插入图片描述
  • 在可疑的js文件中 直接ctrl + F 进行搜索 pwd 对可疑的地方都进行断点调试
    在这里插入图片描述
  • 当程序真的走到这里的时候 可以进行全选 函数 看函数返回的是什么
    在这里插入图片描述
  • 进入到里面后可以将 那附近相关代码都拷贝到 发条js调试工具中进行改编
    在这里插入图片描述
  • 要想在pycharm中使用 js代码
    • node.js环境的安装
    • pip install PyExecJs
import execjs
# 1.实例化一个node对象
node = execjs.get()

# 2.js源文件编译
ctx = node.compile(open('./Wechat.js', encoding='utf-8').read())

# 3.执行js函数
funcName = 'getPwd("{0}")'.format('123456')
pwd = ctx.eval(funcName)
print(pwd)			# e10adc3949ba59abbe56e057f20f883e

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值