php开发的js逆向rpc框架

一、前言

我们在写爬虫的时候,经常会遇到各种加密的参数,只能在浏览器打断点然后一步一步的去追代码,想办法把加密部分的js给抠出来在外部调用。这个过程漫长且费力,还需要一定的ast能力,容易把人劝退。所以现在有一种思想,直接在外部调用浏览器内已经生成的函数获取结果,这就是所谓的js-rpc远程调用。

在白度搜索js-rpc框架,有pythongo实现的,所以我如法炮制,基于websocket开发了php版本,取名shermie,我个人觉得使用起来更方便一些,先上效果图:

  • 服务端

  • 浏览器

  • 访问

  • 代码

二、使用方法

  • 启动服务

进入bin目录,在命令行执行下面的命令

./cli.exe Websocket.php
  • 浏览器运行

1.在浏览器创建Websocket连接(把Websocket.js里面的复制出来粘贴到浏览器命令行运行),会返回一个client对象

2.在client对象上注册需要调用的js函数

# 假设我们需要通过http调用btoa这个函数,第一个参数随便命名,第二个参数是函数执行的内容

client.registeCall("btoa",function(params){
    let result = window.btoa(params);
    resolve(result);
});

# 会输出一个访问地址,比如这样

[2022/4/24 18:16:01][info]  连接到服务器成功
> client.registeCall("btoa",function(resolve,params){
    let result = window.btoa(params);
    resolve(result);
});
[2022/4/24 18:16:52][info]  注册函数btoa成功
[2022/4/24 18:16:52][info]  访问地址:http://127.0.0.1:9501/call?group=ef8d3da2-dca4-4236-ba99-82f76a5e1901&action=btoa&input=

# 参数说明

group:客户端分组ID(不用管)

action:注册的需要调用的函数(不用管)

input:调用这个函数传入的参数(需要填写)
  • 访问地址获取结果
    访问上面打印的地址,并传入自定义参数:http://127.0.0.1:9501/call?group=df777a58-ff44-41bb-81ce-935b6bea9c25&action=btoa&input="hh"最终返回的就是:window.btoa(“hh”)执行的结果

三、说明

github不能上传超过100m的文件,所以只能贴一个外部下载链接了,代码仓库只包含最新的php文件和js文件,cli.exe请在文件地址里面下载

文件地址:share.weiyun.com/xKKhm1MC
代码仓库:github.com/kxg3030/js-rpc

四、缺陷

不能在断点的地方植入ws脚本,如果你想在某个断点处直接创建ws连接然后调用断点上下文中的方法是行不通的,浏览器渲染引擎是单线程的,断点会导致整个线程阻塞,我们的注入脚本不会执行。只能在断点的地方用一个全局变量保存函数,然后放开断点,注入脚本执行。

本作品采用《CC 协议》,转载必须注明作者和本文链接
失色天空
本帖由 Summer 于 2个月前 加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

那为何不直接控制台执行 window.btoa ("hh")

2个月前 评论

有个东西叫 PhantomJS 并且还有对应的 PHP 包

2个月前 评论
失色天空 (楼主) 2个月前

思路不错,不过我测试了下,好像有bug,调用的时候有时候会返回ping,时间稍长点,好像注册的函数就没了

2个月前 评论
失色天空 (楼主) 2个月前
justmd5 (作者) 2个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!