前言
该文章为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系作者删除~
需求
目标网站:
aHR0cDovL3EuMTBqcWthLmNvbS5jbi8=
简介
RPC 在逆向中,简单来说就是将本地和浏览器,看做是服务端和客户端,二者之间通过 WebSocket
协议进行 RPC
通信,在浏览器中将加密函数暴露出来,在本地直接调用浏览器中对应的加密函数,从而得到加密结果,不必去在意函数具体的执行逻辑,也省去了扣代码、补环境等操作,可以省去大量的逆向调试时间。
sekiro RPC 可自行百度环境配置及使用方式
正文
抓包可知cookie值有一个v参数是加密的,且每次加载都会不一样
v=A8JnuPYkFUKgLwkeNYmpdiRAE8Mhk8TveJa6awzb76ngpGx99CMWvUgnCuzf
用hook找以下位置
(function () {
Object.defineProperty(document, 'cookie', {
set: function (val) {
if (val.indexOf('v') != -1) {
debugger;
}
console.log('Hook捕获到cookie设置->', val);
return val;
}
});
})();
断住以后往下调用栈堆,找到这个位置
rt.update()就是生成的参数,进入方法内部
实际上是调用了方法D。在控制台导出,可以通过自己设置一个变量名进行调用
把所有断点放开,再测试是否能调用
接下来控制台注入RPC连接(复制以下代码到控制台)
https://sekiro.virjar.com/sekiro-doc/assets/sekiro_web_client.js
接下来写一段代码连接服务器并转发。也是控制台注入
function guid() {
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
// 连接服务端
var client = new SekiroClient("ws://127.0.0.1:5620/business-demo/register?group=ths&clientId="+guid());
// 业务接口
client.registerAction("v",function(request, resolve, reject){
resolve(xxx());
})
通过PY访问,同时开启sekiro提供的服务器
import requests
data = {"group": "ths",
"action": "v",
}
res = requests.get("http://127.0.0.1:5620/business-demo/invoke",params=data )
print(res.text)
最后
欢迎联系作者交流更多