|
@@ -1,14 +1,13 @@
|
|
|
# JsRPC
|
|
|
+
|
|
|
##### 黑脸怪-hliang
|
|
|
|
|
|
-- js逆向之远程调用(rpc)免去抠代码补环境
|
|
|
|
|
|
> tip:懒得自己编译的 ,[releases](https://github.com/jxhczhl/JsRpc/releases)中有已经编译好的包 (win和Linux的都有~)
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- [JsRPC](#jsrpc)
|
|
|
- - [黑脸怪-hliang](#黑脸怪-hliang)
|
|
|
+ - [黑脸怪-hliang](#黑脸怪-hliang)
|
|
|
- [目录结构](#目录结构)
|
|
|
- [基本介绍](#基本介绍)
|
|
|
- [实现](#实现)
|
|
@@ -26,9 +25,8 @@
|
|
|
- [其他案例](#其他案例)
|
|
|
- [TODO](#todo)
|
|
|
|
|
|
-
|
|
|
-
|
|
|
## 目录结构
|
|
|
+
|
|
|
```dart
|
|
|
-- main.go (服务器的主代码)
|
|
|
-- resouces/JsEnv.js (客户端注入js环境)
|
|
@@ -47,7 +45,6 @@
|
|
|
在https的网站想要新建WebSocket连接如果是连接到普通的ws可能会报安全错误,好像连接本地(127.0.0.1)不会报错~ 可以用本地和wss 你自己看着玩
|
|
|
|
|
|
1. 无https证书者。直接编译main.go 我试了一下,发现使用本地ip(127.0.0.1)可以在https的网站直接连接ws使用 默认端口12080
|
|
|
-
|
|
|
2. 有https证书者。修改main.go文件 把r.Run()注释掉,把r.RunTls注释取消掉 并且参数设置证书的路径 直接输入名字就是当前路径 默认端口:12443
|
|
|
|
|
|
> 另外的题外话,有域名没证书不会搞的 或者有域名有公网(非固定IP的)都可以搞成的,自己研究研究
|
|
@@ -59,7 +56,6 @@
|
|
|
如下图所示
|
|
|

|
|
|
|
|
|
-
|
|
|
**api 简介**
|
|
|
|
|
|
- `/list` :查看当前连接的ws服务 (get)
|
|
@@ -67,10 +63,9 @@
|
|
|
- `/go` :获取数据的接口 (get | post)
|
|
|
- `/execjs` :传递jscode给浏览器执行 (get | post)
|
|
|
|
|
|
-
|
|
|
-说明:接口用?group和name来区分任务 如 ws://127.0.0.1:12080/ws?group={}&name={}"
|
|
|
+说明:接口用?group和name来区分任务 如 ws://127.0.0.1:12080/ws?group={}&name={}"
|
|
|
//注入ws的例子 group和name都可以随便起名(必填)
|
|
|
-http://127.0.0.1:12080/go?group={}&name={}&action={}¶m={} //这是调用的接口
|
|
|
+http://127.0.0.1:12080/go?group={}&name={}&action={}¶m={} //这是调用的接口
|
|
|
group和name填写上面注入时候的,action是注册的方法名,param是可选的参数 接口参数暂定为这几个,但是param还可以传stringify过的json(字符串) 下面会介绍
|
|
|
|
|
|
### 注入JS,构建通信环境
|
|
@@ -80,14 +75,17 @@ group和name填写上面注入时候的,action是注册的方法名,param是
|
|
|

|
|
|
|
|
|
### 连接通信
|
|
|
+
|
|
|
```js
|
|
|
// 注入环境后连接通信
|
|
|
var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=zzz&name=hlg");
|
|
|
```
|
|
|
+
|
|
|
#### I 远程调用0:
|
|
|
+
|
|
|
##### 接口传js代码让浏览器执行
|
|
|
-浏览器已经连接上通信后 调用execjs接口就行
|
|
|
|
|
|
+浏览器已经连接上通信后 调用execjs接口就行
|
|
|
|
|
|
```python
|
|
|
import requests
|
|
@@ -108,10 +106,11 @@ data = {
|
|
|
res = requests.post(url, data=data)
|
|
|
print(res.text)
|
|
|
```
|
|
|
+
|
|
|

|
|
|
|
|
|
+#### Ⅱ 远程调用1: 浏览器预先注册js方法 传递函数名调用
|
|
|
|
|
|
-#### Ⅱ 远程调用1: 浏览器预先注册js方法 传递函数名调用
|
|
|
##### 远程调用1:无参获取值
|
|
|
|
|
|
```js
|
|
@@ -124,12 +123,14 @@ demo.regAction("hello", function (resolve) {
|
|
|
resolve(Js_sjz);
|
|
|
})
|
|
|
```
|
|
|
+
|
|
|
访问接口,获得js端的返回值
|
|
|
http://localhost:12080/go?group=zzz&name=hlg&action=hello
|
|
|
|
|
|

|
|
|
|
|
|
##### 远程调用2:带参获取值
|
|
|
+
|
|
|
```js
|
|
|
//写一个传入字符串,返回base64值的接口(调用内置函数btoa)
|
|
|
demo.regAction("hello2", function (resolve,param) {
|
|
@@ -138,11 +139,11 @@ demo.regAction("hello2", function (resolve,param) {
|
|
|
resolve(base666);
|
|
|
})
|
|
|
```
|
|
|
- 访问接口,获得js端的返回值
|
|
|
-
|
|
|
|
|
|
+ 访问接口,获得js端的返回值
|
|
|
|
|
|
##### 远程调用3:带多个参获 并且使用post方式 取值
|
|
|
+
|
|
|
```js
|
|
|
//假设有一个函数 需要传递两个参数
|
|
|
function hlg(User,Status){
|
|
@@ -155,7 +156,9 @@ demo.regAction("hello3", function (resolve,param) {
|
|
|
resolve(res);
|
|
|
})
|
|
|
```
|
|
|
+
|
|
|
访问接口,获得js端的返回值
|
|
|
+
|
|
|
```python
|
|
|
url = "http://localhost:12080/go"
|
|
|
data = {
|
|
@@ -168,14 +171,13 @@ print(data["param"]) #dumps后就是长这样的字符串{"user": "\u9ed1\u8138\
|
|
|
res=requests.post(url, data=data) #这里换get也是可以的
|
|
|
print(res.text)
|
|
|
```
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
## 食用案例-爬虫练手-xx网第15题
|
|
|
|
|
|
本题解是把它ajax获取数据那一个函数都复制下来,然后控制台调用这样子~
|
|
|
|
|
|
-
|
|
|
1.f12查看请求,跟进去 找到ajax那块,可以看到call函数就是主要的ajax发包 输入页数就可以,那我们复制这个函数里面的代码备用
|
|
|
|
|
|

|
|
@@ -185,13 +187,18 @@ print(res.text)
|
|
|
|
|
|

|
|
|
|
|
|
- 3.调用接口就完事了,param就是传参页数
|
|
|
+ 3.调用接口就完事了,param就是传参页数
|
|
|
|
|
|

|
|
|
|
|
|
控制台可以关,但是注入的网页不要关哦
|
|
|
|
|
|
+## BUG修复
|
|
|
+
|
|
|
+1.修复ResultSet函数,在并发处理环境下存在数据丢失,响应延迟等问题。
|
|
|
+
|
|
|
## 其他案例
|
|
|
+
|
|
|
1. JsRpc实战-猿人学-反混淆刷题平台第20题(wasm)
|
|
|
https://mp.weixin.qq.com/s/DemSz2NRkYt9YL5fSUiMDQ
|
|
|
2. 网洛者-反反爬练习平台第七题(JSVMPZL - 初体验)
|
|
@@ -199,7 +206,6 @@ print(res.text)
|
|
|
|
|
|

|
|
|
|
|
|
-
|
|
|
## TODO
|
|
|
|
|
|
- [ ] ssl Docker Deploy
|