前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jsrpc学习——某条加密参数Sign变化的网站hook教程

Jsrpc学习——某条加密参数Sign变化的网站hook教程

作者头像
前端皮皮
发布2022-08-17 16:03:44
8790
发布2022-08-17 16:03:44
举报
文章被收录于专栏:前端进阶学习交流

大家好,我是皮皮。今天我们介绍的这个网站是cookie参数不变,但是加密参数Sign变化的一个网站,一起来使用jsrpc来攻破它吧!

1、这里使用的网站是fec2bc913be604a5162540c03d45532c,MD5加密处理过的。

2、需要抓取首页相关信息,如下图所示。

3、打开浏览器抓包,然后打断点调试,依次点击右边的Call Stack内的东西,直到找到加密函数,里边的值对应请求参数即可判定。仔细寻找,发现加密的函数在这里了。下图直接用的是十一姐的图,十一姐文章原文链接:

代码语言:javascript
复制
https://blog.csdn.net/weixin_43411585/article/details/123030973

4、之后可以在控制台输入指令window.dcpeng = window.byted_acrawler.sign,其中window.byted_acrawler.sign为加密函数。注意:这个地方挺重要的,很多时候我们会写成ct.update(),这样会有问题!加了括号就是赋值结果,没加就是赋值整个函数!千差万别。

5、关闭网页debug模式。注意:这个地方挺重要的,很多时候如果不关闭,ws无法注入!

6、此时在本地双击编译好的文件win64-localhost.exe,启动服务。

7、之后在控制台注入ws,即将JsEnv.js文件中的内容全部复制粘贴到控制台即可(注意有时要放开断点)。

8、连接通信,在控制台输入命令var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=para&name=test");

9、随后继续输入命令:

代码语言:javascript
复制
// 注册一个方法 第一个参数get_v为方法名,
// 第二个参数为函数,resolve里面的值是想要的值(发送到服务器的)
// param是可传参参数,可以忽略
demo.regAction("get_para", function (resolve, param) {
 console.log(param);
    var res = dcpeng(param, {"url":"https://www.toutiao.com/?wid=1641423780855"});
    resolve(res);
})

这个地方要记得传参,不然你拿不到数据的。(这里排查了好久才出来)

10、之后就可以在浏览器中访问数据了,打开网址 http://127.0.0.1:12080/go?group={}&name={}&action={}&param={} ,这是调用的接口 group和name填写上面注入时候的,action是注册的方法名,param是可选的参数,这里续用上面的例子,网页就是:http://127.0.0.1:12080/go?group=para&name=test&action=get_para

11、如上图所示,我们看到了那个变化的参数v的值,直接通过requests库可以发起get请求。

12、现在我们就可以模拟数据,进行请求发送了。

13、将拷贝的内容可以丢到这里进行粘贴:http://tool.yuanrenxue.com/curl

14、之后将右侧的代码复制到Pycharm中即可用,非常便利。

15、之后就可以构造请求了,加一个整体循环,然后即可获取翻页的内容,整体代码如下所示。

代码语言:javascript
复制
# coding:utf-8

# @Time : 2022/5/10 16:30
# @Author: 皮皮
# @公众号: Python共享之家
# @website : http://pdcfighting.com/
# @File : 头jsrpc.py
# @Software: PyCharm

import requests
import json
import urllib.parse
import time


param_url = "http://127.0.0.1:12080/go?group=para&name=test&action=get_para"
response = requests.get(url=param_url).text
response_json = json.loads(response)
sign = response_json["get_para"]
print(sign)
behot_time = int(time.time())
params = {
            "offset": 0,
            "channel_id": 0,
            "max_behot_time": 1641416108,
            "category": "pc_profile_recommend",
            "aid": 24,
            "app_name": "toutiao_web",
            "disable_raw_data": "true",
            "_signature": sign
        }
url = f'https://www.toutiao.com/api/pc/list/feed'

response_detail = requests.get(url, params=params).json()
print(response_detail["data"])

运行结果如下图所示,和网页上呈现的数据一模一样。

16、至此,请求就已经完美的完成了,如果想获取全部网页,构造一个range循环翻页即可实现。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python共享之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档