通过jsrpc实现前端加解密
JSRPC介绍
GitHub:https://github.com/jxhczhl/JsRpc
JSRPC(JavaScript Remote Procedure Call)是一种在浏览器端注入代理脚本后,通过远程调用直接操控网页 JavaScript 函数、绕过前端加密/反爬等保护机制的技术手段。
什么时候会用到
use
如果加密算法简单、容易构造,不建议通过此方式,反而会增加成本。
- 加密算法难以分析、逻辑理不清,但找到了调用加密的上层函数,直接映射出上层函数提供给远程调用
- 想要把加密算法通过 http 接口映射出去,方便其他方式调用
实战举例
加密方式分析
打开网站,登录抓包,发现存在 2 个加密。

分析加密方式:(分析过程不写了)
先随机生成一个密钥,把这个密钥用 RSA 加密,再用这个密钥给 data 数据加密。
encrypt-key(随机密钥):RSA

data:AES

加密方式映射为http接口
先把刚才的 2 个加密函数相关的函数都升级为全局函数,可以找到调用加密函数的上层函数,调用更方便。

验证下调用是否成功

接下来就通过 jsrpc 注册 1 个接口,用户只需要输入 data,一次性把这俩数据输出,关键步骤 3 步。(浏览器不要开启调试)
- 启动 jsrpc 客户端
- 注入通信 JS - https://github.com/jxhczhl/JsRpc/blob/main/resouces/JsEnv_Dev.js,建立链接
- 构建加密函数映射接口

把刚才的几个函数映射到 http接口中
demo.regAction("enc", function (resolve,param) {
const encrypt_key = window.pse(window.sse(window.key))
const data = window.aes_enc(JSON.stringify(param), window.key)
resolve({encrypt_key, data});
})

最终通过接口 http://127.0.0.1:12080/go?group=zzz&action=enc¶m={%22aa%22:%22bb%22,%22cc%22:%22dd%22} 即可成功调用。

yakit联动
热加载,如果明确知道加密算法、key 等信息,建议用自带的 codec 模块。
# codec plugin
/*
Codec Plugin 可以支持在 Codec 中自定义编码解码,自定义 Bypass 与字符串处理函数
函数定义非常简单
*/
handle = func(origin /*string*/) {
//JSrpc的group
group = "zzz";
//jsrpc的action
action = "enc";
rsp,rep = poc.Post("http://127.0.0.1:12080/go",poc.replaceBody("group="+group+"&action="+action+"¶m="+codec.EncodeUrl(origin), false),poc.appendHeader("content-type", "application/x-www-form-urlencoded"))~
return json.loads(rsp.GetBody())["data"];
}