jxhczhl / JsRpc

远程调用(rpc)浏览器方法,免去抠代码补环境
1.16k stars 297 forks source link

如何配合断点使用呢 #5

Closed kxg3030 closed 2 years ago

kxg3030 commented 2 years ago
一、问题描述

大佬你好,如果网页上生成的加密数据是在某个函数里面,并且有一些参数是在这个函数栈里面才有的。我想在断点的时候,注入websocket的脚本,但是我发现只要页面存在断点,那js引擎线程都会被阻塞住,我的脚本里面的事件(onopen)都无法执行。如果我放开断点,那又没法使用函数栈里面的参数了。如何保留函数的上下文,又能让注入顺利运行呢?求教

二、场景

这个场景就是这种情况,登录里面有一个公钥,是动态生成的,我想就断在这个函数里面,注入websocket,但是没法正常响应事件。

<button type="submit" class="btn btn-primary block full-width m-b" onclick="doLogin();return false;">登录</button>
<script>
function encryptLoginPassword(password, rsaPublicKey){
var jsencrypt = new JSEncrypt(); //加密对象
jsencrypt.setPublicKey(rsaPublicKey); // 设置密钥
return jsencrypt.encrypt(password); //加密
}
function doLogin() {
//公钥加密
var rsaPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNAD"
var password =$('#password').val(); //明文密码
var passwordEncrypted = encryptLoginPassword(password, rsaPublicKey)
$('#password').val(passwordEncrypted); //返回给密码输入input
$('#form').submit();//post提交
}
</script>
jxhczhl commented 2 years ago

你好, 关于页面断点时无法执行代码和放开断点无法调用堆栈里面 :可以查看上个问答者:https://github.com/jxhczhl/JsRpc/issues/4 场景回答:这个一看rsaPublicKey就是固定的,只需要把encryptLoginPassword函数暴露给全局 就可以放开断点调用了。 额外: 这个JSEncrypt可以套模板的 不用rpc这么麻烦。

kxg3030 commented 2 years ago

好的谢谢解答

jxhczhl commented 2 years ago

https://github.com/kxg3030/js-rpc 我直呼好家伙。。

kxg3030 commented 2 years ago

哈哈 让大佬见笑了 向你们学习的