前端加密逆向与自动化解密

  1. 工具
    1. JsRPC
      1. 下载
    2. mitmproxy
      1. 下载
  2. 过程
  3. 问题
    1. 中文传输乱码
    2. js解密后乱码
  4. 参考

工具

JsRPC

下载

Github

mitmproxy

下载

官网 / Github


过程

运行JsRpc

复制 JsEnv_Dev.js 的内容在浏览器控制台执行

连接通信

var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=test");

查找加密函数(通常搜索关键字:crypt、aes、cbc、sm……)

打上断点,点击一下其他功能点,确认 p() 为解密函数

控制台输入 window.decrypt_func=p ,将解密函数注册为全局函数

测试全局函数 decrypt_func 是否可用

去掉断点,将 decrypt_func 注册到JsRpc远程调用

demo.regAction("decrypt", function (resolve,param) {
    var decrypt_data = decrypt_func(param);
    resolve(decrypt_data);
})

访问 http://127.0.0.1:12080/go?group=test&action=decrypt&param=encrypt_data 可以正常获取到结果

继续找加密函数

可疑的通通打上断点,点击其他功能点触发请求,发现是 g() 处理加密

同样注册为全局函数 encrypt_func 并测试是否可用

去掉断点,将 encrypt_func 注册到JsRpc远程调用

demo.regAction("encrypt", function (resolve,param) {
    var encrypt_data = encrypt_func(param);
    resolve(encrypt_data);
})

问题

中文传输乱码


js解密后乱码

import codecs

def fix_code(str):
    bytes_data = codecs.escape_decode(escaped_str)[0]
    s1 = bytes_data.decode('utf-8')
    b2 = s1.encode('latin1')
    s2 = b2.decode('utf-8')
    b1 = s2.encode('latin1')
    final_text = b1.decode('utf-8')
    return final_text

参考

JsRpc/README.md at main · jxhczhl/JsRpc


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:前端加密逆向与自动化解密

字数:328

本文作者:cnlnn

发布时间:2025-04-25, 16:28:00

最后更新:2025-12-15, 12:40:29

原始链接:https://cnlnn.pages.dev/posts/frontend-crypto-reversing/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。