github: https://github.com/jxhczhl/JsRpc

简介:

通过远程调用(rpc)的方式免去抠代码补环境

原理:

在网站的控制台新建一个WebScoket客户端链接到服务器通信,调用服务器的接口 服务器会发送信息给客户端 客户端接收到要执行的方法执行完js代码后把获得想要的内容发回给服务器 服务器接收到后再显示出来

使用:

1)下载已经打包好的服务端软件, 在命令行中启动

window_amd64.exe

# 也可以指定配置文件
window_amd64.exe -c config.yaml # 可以根据自己的需求修改配置中的参数: 端口, 是否启用https/wss等配置项

2) 通过暴露的http的api进行访问

3)在浏览器中注入/resouces/JsEnv_De.js中的代码

4)建立通信

// 注入环境后连接通信
var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=zzz");
// 可选
//var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=zzz&clientId=hliang/"+new Date().getTime())

5)在脚本中调用接口就可以进行相关操作了

'''
js-rpc使用
'''
import json import requests js_rpc_server_url = 'http://localhost:12080' group_id = 'xxx'
def execjs():
"""传入js代码,让其在浏览器中执行"""
js_code = """
(function(){
console.log("this is a test")
return "执行成功"
})()
"""
url = js_rpc_server_url + '/execjs'
data = {
"group": group_id,
"code": js_code
}
res = requests.post(url, data=data)
print(res.text) def call_fun_no_param():
"""调用远程方法 - 无参数传递"""
url = js_rpc_server_url + '/go'
params = {
'group': group_id,
'action': 'hello', # 调用的方法名称
}
res = requests.get(url, params=params)
print(res.text) def call_fun_with_param():
"""调用远程方法 - 参数传递"""
url = js_rpc_server_url + '/go'
params = {
'group': group_id,
'action': 'hello2', # 调用的方法名称
'param': 123456, # 传递的参数
}
res = requests.get(url, params=params)
print(res.text) def post_call_fun_with_param():
"""post调用远程方法 - 参数传递"""
url = js_rpc_server_url + '/go'
data = {
'group': group_id,
'action': 'hello3', # 调用的方法名称
'param': json.dumps({"user": "xing", "status": "努力奋斗"}), # 传递的参数
}
res = requests.post(url, data=data)
print(res.text) def get_page_info():
"""
获取页面信息
页面html
页面cookie
:return:
"""
params = {
'group': group_id,
}
res = requests.get(js_rpc_server_url+'/page/html', params=params)
print('HTML:', res.json()) res = requests.get(js_rpc_server_url+'/page/cookie', params=params)
print('COOKIE:', res.json()) res = requests.get(js_rpc_server_url+'/list', params=params)
print('客户端信息:', res.json()) if __name__ == '__main__':
# execjs()
# call_fun_no_param()
# call_fun_with_param()
# post_call_fun_with_param()
get_page_info()

注意点: group的指定

js逆向之jsRpc的更多相关文章

  1. 网络爬虫之记一次js逆向解密经历

    1 引言 数月前写过某网站(请原谅我的掩耳盗铃)的爬虫,这两天需要重新采集一次,用的是scrapy-redis框架,本以为二次爬取可以轻松完成的,可没想到爬虫启动没几秒,出现了大堆的重试提示,心里顿时 ...

  2. 爬虫05 /js加密/js逆向、常用抓包工具、移动端数据爬取

    爬虫05 /js加密/js逆向.常用抓包工具.移动端数据爬取 目录 爬虫05 /js加密/js逆向.常用抓包工具.移动端数据爬取 1. js加密.js逆向:案例1 2. js加密.js逆向:案例2 3 ...

  3. 兄弟,你爬虫基础这么好,需要研究js逆向了,一起吧(有完整JS代码)

    这几天的确有空了,看更新多快,专门研究了一下几个网站登录中密码加密方法,比起滑块验证码来说都相对简单,适合新手js逆向入门,大家可以自己试一下,试不出来了再参考我的js代码.篇幅有限,完整的js代码在 ...

  4. 兄弟,别再爬妹子图了整点JS逆向吧--陆金所密码加密破解

    好久没有写爬虫文章了,今晚上得空看了一下陆金所登录密码加密,这个网站js加密代码不难,适合练手,篇幅有限,完整js代码我放在了这里从今天开始种树,不废话,直接开整. 前戏热身 打开陆金所网站,点击到登 ...

  5. 这个爬虫JS逆向加密任务,你还不来试试?逆向入门级,适合一定爬虫基础的人

    友情提示:在博客园更新比较慢,有兴趣的关注知识图谱与大数据公众号吧.这次选择苏宁易购登录密码加密,如能调试出来代表你具备了一定的JS逆向能力,初学者建议跟着内容调试一波,尽量独自将JS代码抠出来,实在 ...

  6. 爬虫必看,每日JS逆向之爱奇艺密码加密,今天你练了吗?

    友情提示:优先在公众号更新,在博客园更新较慢,有兴趣的关注一下知识图谱与大数据公众号,本次目标是抠出爱奇艺passwd加密JS代码,如果你看到了这一篇,说明你对JS逆向感兴趣,如果是初学者,那不妨再看 ...

  7. 通过JS逆向ProtoBuf 反反爬思路分享

    前言 本文意在记录,在爬虫过程中,我首次遇到Protobuf时的一系列问题和解决问题的思路. 文章编写遵循当时工作的思路,优点:非常详细,缺点:文字冗长,描述不准确 protobuf用在前后端传输,在 ...

  8. JS逆向-抠代码的第二天【手把手学会抠代码】

    今天的学习项目:沃支付:https://epay.10010.com/auth/login 清空浏览器缓存后,打开网页,输入手机号,密码222222,按照网站要求填入验证码(sorry,我没有账号密码 ...

  9. JS逆向-抠代码的第一天【手把手学会抠代码】

    首先声明,本人经过无数次摸爬滚打及翻阅各类资料,理论知识极其丰富,但是抠代码怎么都抠不会. 无奈之下,只能承认:这个活,需要熟练度. 本文仅对部分参数进行解析,有需要调用,请自行根据现实情况调整. 第 ...

  10. 我去!爬虫遇到JS逆向AES加密反爬,哭了

    今天准备爬取网页时,遇到『JS逆向AES加密』反爬.比如这样的: 在发送请求获取数据时,需要用到参数params和encSecKey,但是这两个参数经过JS逆向AES加密而来. 既然遇到了这个情况,那 ...

随机推荐

  1. 在.net core使用Serilog,只要简单的三步

    第一步:在项目上用nuget安装 Serilog.AspNetCore 最新的稳定版即可 ,安装这个会把其他需要的包都给包含着 第二步:修改 Program.cs 的 CreateHostBuilde ...

  2. 从Linq的Where方法理解泛型、委托应用场景

       最近遇到了一个问题,Linq的Where里面传递的是什么?Where的功能是什么实现的?没有第一时间答上来,在整理相关资料后决定自行实现Linq的Where方法来加深印象. 什么是泛型   指在 ...

  3. JavaScript Bom和Dom的一般性详解

    一.JavaScript的组成 JavaScript的实现包括以下3个部分: ECMAScript(核心) 描述了JS的语法和基本对象. 文档对象模型 (DOM) 处理网页内容的方法和接口 浏览器对象 ...

  4. SQL Server的Descending Indexes降序索引

    SQL Server的Descending Indexes降序索引 背景索引是关系型数据库中优化查询性能的重要手段之一.对于需要处理大量数据的场景,合理的索引策略能够显著减少查询时间. 特别是在涉及多 ...

  5. 将Sublime Text添加到鼠标右键

     事件起因: 在众多 文本文档软件中,个人用过比较多,notepad++ / Edit / EditPlus / notepad--  / Sublime Text 等等,但是比较偏爱的还是 Subl ...

  6. `std::packaged_task`、`std::thread` 和 `std::async` 的区别与联系

    std::packaged_task.std::thread 和 std::async 的区别与联系 std::packaged_task.std::thread 和 std::async 都是 C+ ...

  7. 2022年4月中国数据库排行榜:华为GaussDB 挺进前四,榜单前八得分扶摇直上

    四月暖阳至,行业春风来.2022年4月的 墨天轮中国数据库流行度排行榜 已在墨天轮发布,本月共有205个数据库参与排名,相比上月新增六个数据库.本月整体排名变动不大,但排行榜上数据库整体得分涨幅较大. ...

  8. 存储事件 storage

    // 去手动删除本地存储触发存储事件 window.addEventListener('storage', function () { console.log('存储事件触发了') }) const ...

  9. 前端 vue.config.js 处理跨域问题 proxy 代理

    问: 业务中的跨域问题是如何解决的? 这个的话我们公司⼤概分了俩种环境,⼀种是开发的时候,⼀种是上⽣产的时候,开发的时候因为要对 接的后端可能会⽐较多,他们配置不太⽅便,这个时候采取的是⽐较⽅便的前端 ...

  10. NTPShell

    NTPShell 获取地址:https://github.com/aplyc1a/NTPShell 通过NTP协议来负载C2数据. 编译 gcc ntp.c -lpthread -o ntp 使用 c ...