远程RPC+插桩巧解瑞数5,人人都能懂的瑞数(附源码)

2023-11-12

前言:

        众所周知,rpc对于一些复杂的加密有奇效,我们只需要找到加密函数所在的位置即可通过RPC远程调用,从而省去了扣代码补环境等掉头发过程。本篇以维普期刊为例,一探瑞数的奥秘。

1、抓包分析请求接口

通过抓包分析可知,我们要找的url是SearchList?xxxx,对比可知该接口对字符串参数和cookie进行了加密操作。由此确定了我们这次要解的参数一共有两个G5tA5iQ4和GW1gelwM5yZuT。

 

2.解密G5tA5iQ4参数

首先全局搜索G5tA5iQ4参数,发现无结果。进行跟栈send,打断点分析如下。

 通过分析可知在u.open函数中对url进行了加密操作,继续跟进u.open函数找到加密函数_$BZ,传递的参数是"/Search/SearchList"。 导出_$BZ函数到全局保存。

 3.解密cookie加密参数GW1gelwM5yZuT

由于cookie通常保存在document中,因此我们对document.cookie进行hook定位。

window.cason_cookie = document.cookie;
Object.defineProperty(document, 'cookie', {
    get:()=>{
        return window.cason_cookie;
    },
    set:(x)=>{
        debugger; window.cason_cookie = x;
    }
})

 定位到cookie,跟堆栈向前查找。

找到参数所在位置的变量名,添加断点。

 找到_$re的定义位置,添加日志断点,再次刷新还原打印函数的调用流程。

 

 

观察发现断点执行前的_$re值分别为275,276,457。定义window.casonIoo=[]继续添加条件断点打印验证。

逐步调试到_$re == 374,分析加密过程,找到加密位置与之前断点位置重合,证明分析流程正确。继续修改条件断点,打印出_$CK值的变化。

由此可知加密过程发生在_$re值为457--276之间,修改条件断点使其定位到加密之前457。

 找到加密函数跟栈分析

确定加密函数为_$rs,导出保存到全局。成功拿到加密值

4.RPC本地调用取值

我们成功通过导出全局的方式拿到了需要加密的两个参数

 之后我们可以通过RPC在本地部署调用请求,RPC操作详情参考python通过RPC远程调用获取请求参数实例

成功后截图如下

 

总结:

        本文通过hook,插桩,跟栈,RPC等一系列操作成功破解瑞数5加密,由于没有实现本地运行属于取巧的一种方法,对于爬取一些需求量不大但加密繁琐的网站还是十分合适。解密思路来源于B站up主陈不不and挽风的逆向的一期视频js逆向瑞数5解密讲解与插桩讲解,感兴趣的可以观看原视频。如果本篇文章对您有帮助还请给个免费的赞支持一下哦~

附源码:

# coding:utf-8
import requests
from lxml import etree


def get_url_cookie():
    rpc_url = 'http://127.0.0.1:9420/cbb?type=S&webId=1001&data=12'
    res = requests.get(rpc_url)
    wp_url = 'http://qikan.cqvip.com:80/Search/SearchList?' + \
             res.text.split('http://qikan.cqvip.com:80/Search/SearchList?')[1].split('"')[0]
    wp_cookie = 'GW1gelwM5YZuS=5.GTgDKU1Gpbz5ZsqN_0cK6sxHb8z9K7hB8h.zauqK5m3XmDfw6t2lMBQerygmlEioWgsndYhhKNP5A2bFIe7na; ae51635ca5836b4864=94ee5fb45ad7f8f15d2d00578ab61262; f5d52daf4f=a8689784c908323177b0bd80577db832; ASP.NET_SessionId=4wo05dxpa1pmjfiqlr2xj3qi; search_isEnable=1; GW1gelwM5YZuT=' + \
                res.text.split('false},"')[1].split('"]')[0]
    return wp_url, wp_cookie


def get_content():
    for i in range(1, 11):
        wp_url, wp_cookie = get_url_cookie()
        headers = {
            'Cookie': wp_cookie,
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Origin': 'http://qikan.cqvip.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'
        }
        data = {
            'searchParamModel': '{"ObjectType":1,"SearchKeyList":[],"SearchExpression":null,"BeginYear":null,"EndYear":null,"UpdateTimeType":null,"JournalRange":null,"DomainRange":null,"ClusterFilter":"","ClusterLimit":0,"ClusterUseType":"Article","UrlParam":"U=人工智能","Sort":"0","SortField":null,"UserID":"0","PageNum":%s,"PageSize":20,"SType":null,"StrIds":null,"IsRefOrBy":0,"ShowRules":"  任意字段=人工智能  ","IsNoteHistory":0,"AdvShowTitle":null,"ObjectId":null,"ObjectSearchType":0,"ChineseEnglishExtend":0,"SynonymExtend":0,"ShowTotalCount":143588,"AdvTabGuid":""}' % i
        }
        res = requests.post(wp_url, data=data, headers=headers)
        html = etree.HTML(res.text)
        title_list = html.xpath('//*[@id="remark"]/dl/dt/a')
        t = ''
        for title in title_list:
            for x in title.xpath('.//text()'):
                t += x
            print(t)
            t = ''


def main():
    get_content()


if __name__ == '__main__':
    main()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

远程RPC+插桩巧解瑞数5,人人都能懂的瑞数(附源码) 的相关文章

随机推荐

  • 10.文件操作

    CSAPP笔记 1 shell程序设计 2 内存管理 3 链接库 4 文件操作 5 多进程 6 多线程 7 网络编程 8 makefile 9 调试技巧与调试工具 文章目录 CSAPP笔记 前言 一 基础知识 1 文件复制 2 扫描目录 3
  • SpringBoot 2 -SpringBoot入门

    SpringBoot 2 SpringBoot入门 1 简介 2 第一个SpringBoot程序 3 升级 4 响应封装类配置 1 简介 springboot是什么 Spring Boot它本身并不提供Spring框架的核心特性以及扩展功能
  • 安装mysql5.7笔记

    1 查看系统中是否自带安装mysql yum list installed grep mysql 2 删除系统自带的mysql及其依赖 防止冲突 yum y remove mysql libs x86 64 3 安装wget命令 yum i
  • 计算机网络的体系结构--学习计算机网络的重中之重

    一 计算机网络体系结构的设计 1 为什么需要计算机网络体系结构 连接在网络上的两台计算机需要互相传送文件 a 必须有一条传送数据的通路 b 发起通信的计算机要将数据通信的通路激活 激活就是发出一些信令 保证要传送的计算机数据能在这条通路上正
  • 图的m着色问题(回溯法-满m叉树)

    span style font family none background color rgb 255 255 255 1 问题描述 span 给定无向连通图G和m种不同的颜色 用这些颜色为图G的所有顶点着色 每个顶点着一种颜色 每条边的
  • 时域采样,频域为什么周期延拓了

    频域周期延拓只是表面现象 其实质是不同的信号采样后的像可能相同 不可区分 如果硬要做实验 还是要有一定的编程基础 起码要整一个声音出来 让你听一听 可是你要重复这一实验可能又太难了 所以我还是讲一讲简单的数学原理 并用简单的三角函数及程序验
  • Linux系统同时安装MySQL5.7和MySQL8.0

    本文是在一台Centos7虚拟机上面同时安装mysql5 7和mysql8 0的步骤 记录一下 方便后续回顾 这篇文章之后会接着学习搭建两台虚拟机一主一从的架构 其中配置的文件名称 目录 端口号 IP地址要根据自己电脑的实际情况进行更改 m
  • Ubuntu 22.04上安装Docker的完整过程

    更新系统软件包 sudo apt update 安装所需的依赖包 以允许APT使用HTTPS sudo apt install apt transport https ca certificates curl software proper
  • Docker构建tomcat无法用startup.sh启动,无法输出catalina.out

    最近部署测试环境 想尝试一下docker 毕竟技术人不能落伍 So 我先学习了一下docker的简单使用 很多东西都是实践出真知 没必要看书找教程 大概看一下能干就可以了 菜鸟教程地址Docker 教程 菜鸟教程 初学者可以了解一下 下面进
  • 编程变量命名的一些技巧

    最近做项目仿真时 在编程的时候发现自己对变量的命名比较混乱 没有统一的规则 故搜集了一些资料对变量命名的技巧和原则有所了解和总结 总的来说 就是英文字母大小写 数字 下划线 按照一定的规则搭配 自己比较喜欢的是帕斯卡 pascal 命名法和
  • stm32f103 TIM2定时器4路PWM输出实验

    这里以TIM2为例 pwm c include pwm h uint16 t TIM2 CCR1 Val uint16 t TIM2 CCR2 Val uint16 t TIM2 CCR3 Val uint16 t TIM2 CCR4 Va
  • 【前端】HTML基础总结

    概要 html基本结构 nbsp 空格 emsp 空字符 html标签 h1 h1 标题标签1 6之间字体大小逐渐减小 p p 段落标签 b b 加粗 strong strong 加粗优化搜索 i i 斜体 div div 块级元素 spa
  • 数据结构学习——栈的应用:迷宫问题

    简介 基于栈的迷宫问题本质上是深度优先遍历 从起点开始深度优先搜索 遇到碰壁的情况时 根据栈的特性 可以 回溯 到之前走过的路 并继续搜索未搜索的方向 具体实现 我使用的ide是qt 它里面的一些图形库有助于我更加直观地理解深度优先搜索的过
  • 华为OD机试真题-评论转换输出-2023年OD统一考试(B卷)

    题目描述 在一个博客网站上 每篇博客都有评论 每一条评论都是一个非空英文字母字符串 评论具有树状结构 除了根评论外 每个评论都有一个父评论 当评论保存时 使用以下格式 首先是评论的内容 然后是回复当前评论的数量 最后是当前评论的所有子评论
  • 服务器显示中国移动,中国移动服务器地址是什么

    中国移动服务器地址是什么 内容精选 换一换 域名的DNS服务器定义了域名用于解析的权威DNS服务器 通过华为云注册成功的域名默认使用华为云DNS进行解析 详细内容 请参见华为云DNS对用户提供域名服务的DNS是什么 若您选择非华为云DNS进
  • 微服务部署:蓝绿部署、滚动部署、灰度部署(金丝雀部署)、功能开关发布

    简介 产品或项目不可能一步到位 一次性推向用户 故而有版本的存在 在app版本更新或者项目迭代的过程中 不可避免需要发布 发布就是部署 部署就是修改 修改则意味着风险 目前有很多用于部署的技术 本文将目前常用的布署方案做一个总结 备注 本文
  • C++指针的注意事项

    1 定义指针时 切勿忘记初始化 2 当指针作为函数参数时 函数体内记得判空 3 动态申请内存时 不要忘记判断内存申请是否成功 4 勿忘释放内存 并且只释放堆内存 即动态申请的内存 5 内存释放后 记得将指针置空 6 函数返回值一定不要是局部
  • 恶意域名解析

    原因 今天在使用搜狗搜索我们公司的网站名称的时候搜索到一个域名为 test99 cn的网站 打开直接弹出了我们的后台管理系统 后果 非法网站被工信部扫描到之后 将会影响到该主机客户的域名备案等信息 另外我们的后台管理系统就这样被暴露了 解决
  • linux内核配置支持ipv6,Linux系统IPv6配置

    1 自动获取IPV6地址 修改 etc sysconfig network文件 加入下列配置文本 NETWORKING IPV6 yes 然后 运行命令service network restart 用命令ifconfig a 查看IPV6
  • 远程RPC+插桩巧解瑞数5,人人都能懂的瑞数(附源码)

    前言 众所周知 rpc对于一些复杂的加密有奇效 我们只需要找到加密函数所在的位置即可通过RPC远程调用 从而省去了扣代码补环境等掉头发过程 本篇以维普期刊为例 一探瑞数的奥秘 1 抓包分析请求接口 通过抓包分析可知 我们要找的url是Sea