You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
首先先抽取一个幸运儿,找个登陆接口
可以看到请求参数如下
其中password明显是通过某种方式加密了(请求参数中其他参数来源不是重点~),所以本文主要内容就是:
如何在前端找到加密过程 如何使用Sekiro进行远程RPC调用 第一部分:在前端找到加密的过程 针对前端对password是如何加密的,先列结果:
通过前序API获得盐+公钥 对盐+密码原文进行拼接 通过公钥一并加密 进行编码 然后来具体地看看
进到encrypt()方法(我这里的明文密码是222333,前面的是加盐
getKey()是获取公钥就不看了,看下encrypt()和c()
encrypt()
里头doPublic就是使用公钥加密
c()
这里出来的r就是我们想要的password了
对比一下最后的请求参数里的password,嗯确实是一致的
第二部分:使用Sekiro进行远程RPC调用 首先说一哈,这个例子的password加密不是仅仅一个函数,分散了很多步骤,还涉及前序请求的盐+公钥,实行起来会麻烦一点。
我们简化一下,假设前端代码是utility.getPwdEncrypt() ,返回一个加密后的字符串。 先贴一下Sekiro的官方文档,如果目标网站是https请根据官方文档下载根证书并安装。
过程:将js代码注入浏览器环境(下面这个是官网的例子)
function SekiroClient(e){if(this.wsURL=e,this.handlers={},this.socket={},!e)throw new Error("wsURL can not be empty!!");this.webSocketFactory=this.resolveWebSocketFactory(),this.connect()}SekiroClient.prototype.resolveWebSocketFactory=function(){if("object"==typeof window){var e=window.WebSocket?window.WebSocket:window.MozWebSocket;return function(o){function t(o){this.mSocket=new e(o)}return t.prototype.close=function(){this.mSocket.close()},t.prototype.onmessage=function(e){this.mSocket.onmessage=e},t.prototype.onopen=function(e){this.mSocket.onopen=e},t.prototype.onclose=function(e){this.mSocket.onclose=e},t.prototype.send=function(e){this.mSocket.send(e)},new t(o)}}if("object"==typeof weex)try{console.log("test webSocket for weex");var o=weex.requireModule("webSocket");return console.log("find webSocket for weex:"+o),function(e){try{o.close()}catch(e){}return o.WebSocket(e,""),o}}catch(e){console.log(e)}if("object"==typeof WebSocket)return function(o){return new e(o)};throw new Error("the js environment do not support websocket")},SekiroClient.prototype.connect=function(){console.log("sekiro: begin of connect to wsURL: "+this.wsURL);var e=this;try{this.socket=this.webSocketFactory(this.wsURL)}catch(o){return console.log("sekiro: create connection failed,reconnect after 2s:"+o),void setTimeout(function(){e.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
zh-cn/sekiro-article/sekiro-js-1/
首先先抽取一个幸运儿,找个登陆接口
可以看到请求参数如下
其中password明显是通过某种方式加密了(请求参数中其他参数来源不是重点~),所以本文主要内容就是:
如何在前端找到加密过程 如何使用Sekiro进行远程RPC调用 第一部分:在前端找到加密的过程 针对前端对password是如何加密的,先列结果:
通过前序API获得盐+公钥 对盐+密码原文进行拼接 通过公钥一并加密 进行编码 然后来具体地看看
进到encrypt()方法(我这里的明文密码是222333,前面的是加盐
getKey()是获取公钥就不看了,看下encrypt()和c()
encrypt()
里头doPublic就是使用公钥加密
c()
这里出来的r就是我们想要的password了
对比一下最后的请求参数里的password,嗯确实是一致的
第二部分:使用Sekiro进行远程RPC调用 首先说一哈,这个例子的password加密不是仅仅一个函数,分散了很多步骤,还涉及前序请求的盐+公钥,实行起来会麻烦一点。
我们简化一下,假设前端代码是utility.getPwdEncrypt() ,返回一个加密后的字符串。 先贴一下Sekiro的官方文档,如果目标网站是https请根据官方文档下载根证书并安装。
过程:将js代码注入浏览器环境(下面这个是官网的例子)
function SekiroClient(e){if(this.wsURL=e,this.handlers={},this.socket={},!e)throw new Error("wsURL can not be empty!!");this.webSocketFactory=this.resolveWebSocketFactory(),this.connect()}SekiroClient.prototype.resolveWebSocketFactory=function(){if("object"==typeof window){var e=window.WebSocket?window.WebSocket:window.MozWebSocket;return function(o){function t(o){this.mSocket=new e(o)}return t.prototype.close=function(){this.mSocket.close()},t.prototype.onmessage=function(e){this.mSocket.onmessage=e},t.prototype.onopen=function(e){this.mSocket.onopen=e},t.prototype.onclose=function(e){this.mSocket.onclose=e},t.prototype.send=function(e){this.mSocket.send(e)},new t(o)}}if("object"==typeof weex)try{console.log("test webSocket for weex");var o=weex.requireModule("webSocket");return console.log("find webSocket for weex:"+o),function(e){try{o.close()}catch(e){}return o.WebSocket(e,""),o}}catch(e){console.log(e)}if("object"==typeof WebSocket)return function(o){return new e(o)};throw new Error("the js environment do not support websocket")},SekiroClient.prototype.connect=function(){console.log("sekiro: begin of connect to wsURL: "+this.wsURL);var e=this;try{this.socket=this.webSocketFactory(this.wsURL)}catch(o){return console.log("sekiro: create connection failed,reconnect after 2s:"+o),void setTimeout(function(){e.
http://154.39.149.86:5612/zh-cn/sekiro-article/sekiro-js-1/
Beta Was this translation helpful? Give feedback.
All reactions