【js逆向学习】极志愿 javascript+python+rpc

JSRPC使用方式

    • 逆向目标
    • 逆向过程
    • 逆向分析
      • 1、什么是 websocket
      • 2、websocket的原理
      • 3、总体过程
        • 3.1 环境说明
        • 3.2 python服务端代码
        • 3.3 python客户端代码
      • 4、Sekiro-RPC
        • 4.1 执行方式
        • 4.2 客户端环境
        • 4.3 参数说明
        • 4.4 SK API
        • 4.5 python代码调试
        • 4.6 代码注入流程
    • 逆向总结

逆向目标

网址:https://www.jizhy.com/44/rank/school
接口:https://www.jizhy.com/open/sch/rank-list
加密参数:
- sign
- app_id

逆向过程

此目标网站前面已经分析过了,感兴趣的可以去我的主页看下具体的分析过程 大学竞争力2021排行榜, 本篇文章只介绍 rpc 的使用

逆向分析

要使用 rpc 必然要先了解websocket

1、什么是 websocket

  • WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)
  • 它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的
  • Websocket是一个持久化的协议

2、websocket的原理

  • websocket约定了一个通信的规范,通过一个握手的机制,客户端和服务器之间能建立一个类似tcp的连接,从而方便它们之间的通信
  • 在websocket出现之前,web交互一般是基于http协议的短连接或者长连接
  • websocket是一种全新的协议,不属于http无状态协议,协议名为"ws"

3、总体过程

  • 首先,客户端发起http请求,经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;
  • 然后,服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;
  • 最后,客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。
3.1 环境说明
pip install websockets
3.2 python服务端代码
import asyncio
import websockets# 接收客户端消息并处理,这里只是简单把客户端发来的返回回去
async def recv_msg(websocket):while True:recv_text = await websocket.recv()response_text = f"your submit context: {recv_text}"await websocket.send(response_text)# 服务器端主逻辑
# websocket和path是该函数被回调时自动传过来的,不需要自己传
async def main_logic(websocket, path):await recv_msg(websocket)# 把ip换成自己本地的ip
start_server = websockets.serve(main_logic, '127.0.0.1', 8000)
# 如果要给被回调的main_logic传递自定义参数,可使用以下形式
# 一、修改回调形式
# import functools
# start_server = websockets.serve(functools.partial(main_logic, other_param="test_value"), '10.10.6.91', 5678)
# 修改被回调函数定义,增加相应参数
# async def main_logic(websocket, path, other_param)asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
3.3 python客户端代码
import asyncio
import websockets# 向服务器端发送认证后的消息
async def send_msg(websocket):while True:_text = input("please enter your context: ")if _text == "exit":print(f'you have enter "exit", goodbye')await websocket.close(reason="user exit")return Falseawait websocket.send(_text)recv_text = await websocket.recv()print(f"{recv_text}")# 客户端主逻辑
async def main_logic():async with websockets.connect('ws://127.0.0.1:8000') as websocket:await send_msg(websocket)asyncio.get_event_loop().run_until_complete(main_logic())

4、Sekiro-RPC

了解了上述内容之后我们就可以进入主题了,RPC 在逆向中,简单来说就是将本地和浏览器,看做是服务端和客户端,二者之间通过 WebSocket 协议进行 RPC 通信,在浏览器中将加密函数暴露出来,在本地直接调用浏览器中对应的加密函数,从而得到加密结果,不必去在意函数具体的执行逻辑,也省去了扣代码、补环境等操作,可以省去大量的逆向调试时间。对于业务时间比较急着上的项目可以作为一种临时方案。
官网地址:https://sekiro.iinti.cn/sekiro-doc/
在这里插入图片描述

4.1 执行方式

首先要有 Java 环境,服务安装有三种方式,具体安装教程参考sekiro安装教程

4.2 客户端环境

链接

4.3 参数说明
  • 使用原理:客户端注入到浏览器环境,然后通过 SekiroClientSekiro 服务器通信,即可直接 RPC 调用浏览器内部方法官方提供的 SekiroClient 代码样例如下:
// 连接服务端
var client = new SekiroClient("ws://127.0.0.1:5612/business-demo/register?group=rpc-test&clientId="+Math.random());
// 业务接口 
client.registerAction("register",function(request, resolve, reject){resolve(request['params']);
})
  • group:业务类型(接口组),每个业务一个 groupgroup 下面可以注册多个终端(SekiroClient),同时group 可以挂载多个 Action

  • clientId:指代设备,多个设备使用多个机器提供 API 服务,提供群控能力和负载均衡能力;

  • SekiroClient:服务提供者客户端,主要场景为手机/浏览器等。最终的 Sekiro 调用会转发到 SekiroClient。每个 client 需要有一个惟一的 clientId

  • registerAction:接口,同一个 group 下面可以有多个接口,分别做不同的功能;

  • resolve:将内容传回给服务端的方法;

  • request:服务端传过来的请求,如果请求里有多个参数,可以以键值对的方式从里面提取参数然后再做处理。

4.4 SK API

Sekiro 为我们提供了一些 API

  • 查看分组列表:http://127.0.0.1:5612/business-demo/groupList

  • 查看队列状态:http://127.0.0.1:5612/business-demo/clientQueue?group=test

  • 调用转发:http://127.0.0.1:5612/business-demo/invoke?group=test&action=test&param=testparm

4.5 python代码调试
# encoding: utf-8
"""
@author: 夏洛
@QQ: 1972386194
@file: 测试.py
"""
import requests
params = {"group": "rpc-test","action": "register","params": "测试文本"}
res = requests.get("http://127.0.0.1:5612/business-demo/invoke",params=params)
print(res.text)
4.6 代码注入流程
  • 定位到具体的加密位置
    在这里插入图片描述

  • 注入RPC代码,使用注册后的 js脚本 替换原来的脚本
    在这里插入图片描述
    注入后观察控制台,发现连接成功
    在这里插入图片描述

  • python请求
    使用上面提供的 python 代码去请求
    在这里插入图片描述

逆向总结

以上就是 jsrpc 的介绍,希望能帮到大家,欢迎大家留言共同探讨 sekiro 的更多用法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/440917.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

基于SpringBoot健身房管理系统【附源码】

效果如下: 系统首页界面 系统注册详细页面 健身课程详细页面 后台登录界面 管理员主页面 员工界面 健身教练界面 员工主页面 健身教练主页面 研究背景 随着生活水平的提高和健康意识的增强,现代人越来越注重健身。健身房作为一种专业的健身场所&#x…

28 基于51单片机的两路电压检测(ADC0808)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,通过ADC0808获取两路电压,通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码,PROTEUS8.15进行仿真,全部资源在页尾,提供…

No.6 笔记 | Linux操作系统基础:全面概览与核心要点

1. 简介与历史 1.1 起源 创始人:Linus Torvalds(芬兰赫尔辛基大学学生)初衷:设计一个替代Minix的全功能Unix操作系统首次发布:1991年10月5日,Linux v0.01版本 2. Linux特点 多用户多任务:用…

【斯坦福CS144】Lab1

一、实验目的 1.实现一个流重组器——一个将字节流的小块 (称为子串或段 )按正确顺序组装成连续的字节流的模块; 2.深入理解 TCP 协议的工作方式。 二、实验内容 编写一个名为"StreamReassembler"的数据结构,它负责…

k8s 中存储之 NFS 卷

目录 1 NFS 卷的介绍 2 NFS 卷的实践操作 2.1 部署一台 NFS 共享主机 2.2 在所有k8s节点中安装nfs-utils 2.3 部署nfs卷 2.3.1 生成 pod 清单文件 2.3.2 修改 pod 清单文件增加 实现 NFS卷 挂载的 参数 2.3.3 声明签单文件并查看是否创建成功 2.3.4 在 NFS 服务器 创建默认发布…

15分钟学 Python 第38天 :Python 爬虫入门(四)

Day38 : Python爬虫异常处理与反爬虫机制 章节1:异常处理的重要性 在爬虫开发过程中,网络请求和数据解析常常会遭遇各种异常。正确的异常处理可以提高程序的稳定性,避免崩溃,并帮助开发者快速定位问题。 章节2:常见…

杠铃检测系统源码分享

杠铃检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision 研究…

Python | 由高程计算坡度和坡向

写在前面 之前参加一个比赛,提供了中国的高程数据,可以基于该数据进一步计算坡度和坡向进行相关分析。 对于坡度和坡向,这里分享一个找到的库,可以方便快捷的计算。这个库为:RichDEM,官网地址如下 https…

Windows系统编程(四)远程线程

本章内容讲解远程线程 远程线程 我们之前所学过的CreateThread()是创建一个本地线程,其本质是启动一个进程然后执行一个函数。而我们学习网络安全经常会与shellcode打交道,其本质上是以特殊的编程手法所编写的一段普通的代码。这段代码可以在任意环境下…

pWnOS2.0 靶机渗透( cms 渗透,php+mysql 网站渗透,密码碰撞)

pWnOS2.0 靶机渗透( ) 靶机介绍 vulnhub 靶机 本地搭建 由于靶机特性,靶机网卡位nat模式扫不到,原来需要改 nat 的地址 参考方法 https://blog.csdn.net/Bossfrank/article/details/131415257 作者主页 https://blog.csdn.net/Bossfrank?typeblog P…

Hallo部署指南

一、介绍 Hallo是由复旦大学、百度公司、苏黎世联邦理工学院和南京大学的研究人员共同提出的一个AI对口型肖像图像动画技术,可基于语音音频输入来驱动生成逼真且动态的肖像图像视频。 该框架采用了基于扩散的生成模型和分层音频驱动视觉合成模块,提高了…

【Unity学习笔记】解决疑似升级Win11或使用Unity6导致Unity旧版本无法打开的问题

【Unity学习笔记】解决疑似升级Win11或使用Unity6导致Unity旧版本无法打开的问题 一句话省流: 确保项目地址没有任何中文,重新申请个许可证,然后该咋就咋,完事。 ——————————————————————————————…

Oracle登录报错-ORA-01017: invalid username/password;logon denied

接上文:Oracle创建用户报错-ORA-65096: invalid common user or role name 我以为 按照上文在PDB里创建了用户,我以为就可以用PLSQL远程连接了,远程服务器上也安装了对应版本的Oracle客户端,但是我想多了,客户只是新建…

Nginx06-静态资源部署

零、文章目录 Nginx06-静态资源部署 1、静态资源概述 静态资源:是在Web开发中不经常改变的文件,比如图片、CSS样式表、JavaScript脚本文件等。这些资源通常是预先编译好的,不需要服务器端的动态处理。动态资源:是在Web开发中需…

【自动驾驶】《Planning-oriented Autonomous Driving》UniAD论文阅读笔记

1.参考 论文:https://arxiv.org/pdf/2212.10156 代码:https://github.com/OpenDriveLab/UniAD 2.摘要 原来的自动驾驶任务都是分为模块化的,感知,预测,规划等。每个独立的任务可能都优化得很好,但可能会…

深度学习基础—Anchor Boxes与YOLO 算法

前言:在之前的博客中,我依次总结了目标检测算法、算法的卷积改进、Bounding Box预测算法、交并比与非极大值抑制等内容,这些是YOLO 算法的重要细节,现在还差一柄利剑,我们就可以构建YOLO算法了,现在让我们先…

OJ在线评测系统 微服务高级 网关跨域权限校验 集中解决跨域问题 拓展 JWT校验和实现接口限流降级

微服务网关跨域权限校验 集中的去解决一下跨域 这段代码是用来配置跨源资源共享(CORS)过滤器的。它创建了一个 CorsConfiguration 实例,允许所有方法和头部,并支持凭证(如 Cookies)。setAllowedOriginPat…

【论文笔记】DKTNet: Dual-Key Transformer Network for small object detection

【引用格式】:Xu S, Gu J, Hua Y, et al. Dktnet: dual-key transformer network for small object detection[J]. Neurocomputing, 2023, 525: 29-41. 【网址】:https://cczuyiliu.github.io/pdf/DKTNet%20Dual-Key%20Transformer%20Network%20for%20s…

本田汽车投资SiLC Technologies:携手共促自动驾驶技术新飞跃

SiLC Technologies获本田汽车投资:加速自动驾驶技术革新 近日,硅谷光子学初创公司SiLC Technologies宣布获得本田汽车的投资,这一合作标志着双方将共同推进自动驾驶技术领域的革新与发展。本田此次投资不仅体现了对SiLC Technologies技术实力的认可,也彰显了本田在自动驾驶…