首页 > 其他分享 >【JS逆向】新X社评论数据获取——逆向Signature参数

【JS逆向】新X社评论数据获取——逆向Signature参数

时间:2024-02-01 18:22:06浏览次数:27  
标签:逆向 Timestamp sm3 times 11880956 Signature JS Request

免责申明

本公众号的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!

URL分析

本文章只针对单篇文章进行分析
请求id为134d749的文章,利用浏览器F12大法进行分析,找到包含评论数据的数据包。

定位数据包

直接在调式工具中搜索关键字,例如评论的数据,找到包含评论数据的数据包

请求数据包的URL目录为1014/n/newsapi/h5/news-detail/newscomment

复制当前请求包数据到爬虫工具库中生成爬虫工具库requests的Python代码

分析参数

通过对请求头、和GET请求中提交的参数,发现只有Signature和Timestamp会影响校验
随机修改Signature的值后再请求,提示非法的数据签名

随机修改Timestamp会出现请求已超时的提示,通过分析得当前参数是时间戳

JS逆向分析Signature参数

以上分析完成参数,只需要分析Signature参数如何生成
直接搜索Signature,并设置断点

通过分析得到,Signature参数是由当前代码生成Signature: v = Object(y.sm3)(v),其中var v = "Key=" + s + "&Timestamp=" + l + "&DeviceAccessId=" + o + "&DeviceNet=&Longitude=&Latitude=&Token=" + r + "&Request=" + d;
"" === o && (v = "Key=" + s + "&Timestamp=" + l + "&Token=" + r + "&Request=" + d);
断点分析,在请求当前页面时v的值为'Key=4bb7c7298e0778524f45f240d922d85b5bbc525c313a2f011148273f4ccbd186&Timestamp=1706781303802&Token=&Request={"docid":"11880956","doctype":0,"loadtype":0,"lastcommid":0,"pageSize":20}'
其中KEY为固定值

Request为当前请求是提交的参数{"docid":"11880956","doctype":0,"loadtype":0,"lastcommid":0,"pageSize":20}'

Signature: v = Object(y.sm3)(v),分析y函数有哪些方法,包括sm2,sm3,sm4,利用sm3对v进行hash处理得到Signature的值

利用python构建获取Signature的值

    param = '{"docid":"11880956","doctype":0,"loadtype":0,"lastcommid":0,"pageSize":20}'
    times = str(int(time.time()) * 1000)
    # print(times)
    key = f'Key=4bb7c7298e0778524f45f240d922d85b5bbc525c313a2f011148273f4ccbd186&Timestamp={times}&Token=&Request={param}'
    Signature =sm3.sm3_hash(func.bytes_to_list(key.encode("utf-8")))
#获取到当前Signature 的值为98d9f16745100bde7dbd6f1e50a9cd9316953757c4e0e0718075ceeb171450f0

完善之前的爬虫代码,将Signature,Timestamp替换成对应的值
完整代码如下:

import requests,time
import json
from gmssl import  sm3,func

def get_pson(Signature,times):
    data = {
        "docid": "11880956",
        "doctype": 0,
        "loadtype": 0,
        "lastcommid": 0,
        "pageSize": 20
    }

    headers = {
        "Accept": "application/json, text/plain, */*",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Connection": "keep-alive",
        "Content-Type": "application/json;charset=UTF-8",
        "Device-Access-Id": "",
        "Origin": "https://h.xxxxx.com",
        "Referer": "https://h.xxxxx.com/vh512/share/11880956?d=134d749",
        "Sec-Fetch-Dest": "empty",
        "Sec-Fetch-Mode": "cors",
        "Sec-Fetch-Site": "same-origin",
        "Signature": Signature,
        "Timestamp": times,
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
        "sec-ch-ua": "\"Not A(Brand\";v=\"99\", \"Google Chrome\";v=\"121\", \"Chromium\";v=\"121\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\""
    }
    url = "https://xxxxx/1014/n/newsapi/h5/news-detail/newscomment"
    data = json.dumps(data, separators=(',', ':'))
    response = requests.post(url, headers=headers, data=data)
    print(response.text)
    print(response)

if __name__ == "__main__" :
    param = '{"docid":"11880956","doctype":0,"loadtype":0,"lastcommid":0,"pageSize":20}'
    times = str(int(time.time()) * 1000)
    # print(times)
    key = f'Key=4bb7c7298e0778524f45f240d922d85b5bbc525c313a2f011148273f4ccbd186&Timestamp={times}&Token=&Request={param}'
    Signature =sm3.sm3_hash(func.bytes_to_list(key.encode("utf-8")))
    print(Signature)
    get_pson(Signature,times)

标签:逆向,Timestamp,sm3,times,11880956,Signature,JS,Request
From: https://www.cnblogs.com/fuchangjiang/p/18001840

相关文章

  • 使用js获取系统分辨率、系统缩放倍数和浏览器缩放倍数
    做屏幕适配让人头大,用rem适配需要获取到系统缩放倍数和浏览器缩放倍数来计算根节点字体大小,网上找来找去都没看见一个满意的方案,自己折腾一个算是一个比较完美的方案吧,亲测谷歌浏览器120版本有效//获取缩放倍数(1*系统缩放倍数*浏览器缩放倍数)functiongetZoom(){letzoom=......
  • Python | json文件和jsonl文件
    Python|json文件和jsonl文件JSON文件是使用JSON(JavaScriptObjectNotation)格式存储数据的文件。它是一种结构化的文本格式,使用键值对的方式表示数据。JSON文件通常包含一个根对象,可以包含多个嵌套的对象、数组和基本数据类型。而JSONL文件(JSONLines),则是一种每行包含一......
  • 跑通的第一个ethers.js程序HelloVitalik.js
    简介ethers.js是一个本地库,可以让你调用接口,用官方写好的轮子来使用一些常用的函数!学习完这个库,你对node.js就有比较深入的了解了,如果你不做项目,就不涉及智能合约的编写,那么写点脚本学习一下ethers.js是很好的。教程已经有比较完整系统的了:https://www.wtf.academy/ethers-101/H......
  • nvm安装Nodejs时报错,Could not retrieve https://npm.taobao.org/mirrors/node/latest
    1.首先要使用管理员运行命令2.在安装nvm的目录下找到settings.txt,没有就手动增加一个node_mirror:https://npm.taobao.org/mirrors/node/npm_mirror:https://npm.taobao.org/mirrors/npm/这个地方有点奇怪,安装18的时候把上面的Https://去掉以后就下载成功了3.安装19以及......
  • js获取/设置css变量
    -<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title><st......
  • js处理excel数据
    借助xlsx实现js读取处理excel数据,并输出excel文件<inputtype="file"@change="fn"/>import*asXLSXfrom'xlsx'fn(e){letfileObj=e.target.files[0]constfileReader=newFileReader()fileReader.readAsArrayBuffer(fileObj)fileR......
  • jmeter Regular Expression Extractor和JSON Extractor使用
    在Jmete中我们经常遇到需要把当前接口返回内容用于下一个接口请求,应用场景:登录接口返回的cookie或者token等,下面就简单描述一下两种提取器的使用和需要注意的事项:1、RegularExpressionExtractorApplyto:待研究;Fieldtocheck:取值的地方,ReferenceName:取得值后存放值的变量......
  • js使用map
     js使用map  getData(){      //调用接口方法      getlistInspectionnum().then(response=>{        console.log("######234#######")        //console.log(response.length)       ......
  • 解决前端JSZip读取压缩包内文件中文名称乱码问题
    1importJSZipfrom"jszip";23functionjszipFile(file){4if(!/\.zip$/i.test(file.name)){5reject(`文件"${file.name}"不是zip文件`);6return;7}89constfileReader=newFileReader();1011//转换文件为Arra......
  • 逆向实战28——补环境过瑞数6
    前言本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!此外出于某种原因。本章大部分调试会省略,仅简单说个大概。之前写了补环境瑞数4的流程。小伙伴有空可以翻一......