七麦analysis参数加密分析

文章目录

  • 1. 接口分析
  • 2. 断点调式
  • 3. 补环境重写加密
  • 4. 验证结果

1. 接口分析

目标站点

aHR0cHM6Ly93d3cucWltYWkuY24vcmFuay9tYXJrZXRSYW5r

先刷新网页,请求接口中的analysis参数本次分析的目标

在这里插入图片描述

2. 断点调式

打上XHR断点,刷新页面之后断点会断在接口处,接下来单步调式分析找到加密位置
在这里插入图片描述
这里我们可以看到e就是加密后生成的analysis值。不过这上图加密区域的代码逻辑还是有些复杂的,不能直接扣下来用

得分析每一个函数,还有其中有一些固定的值(这个值是会经常变动的),接下来我们开始补环境然后还原最终的JS加密代码

3. 补环境重写加密

function v(t) {t = encodeURIComponent(t).replace(/%([0-9A-F]{2})/g, function (n, t) {return o("0x" + t)});try {return btoa(t)} catch (n) {return Buffer.from(t).toString("base64")}
}function o(n) {let f2 = '66';let s2 = '72';let d2 = '6f';let m2 = '6d';let l2 = '43';let v2 = '68';let p2 = '61';let h2 = '64';let y2 = '65';t = "",[f2, s2, d2, m2, l2, v2, p2, s2, l2, d2, h2, y2].forEach(function (n) {t += unescape("%u00" + n)});var t, e = t;return String.fromCharCode(n)
}function h(n, t) {t = t || u();for (var e = (n = n.split("")).length, r = t.length, a = "charCodeAt", i = 0; i < e; i++)n[i] = o(n[i][a](0) ^ t[(i + 10) % r][a](0));return n.join("")
}function encrypted(key) {var s = 1359var H = 0var e, r = +new Date() - (s || H) - 1661224081041, a = [];var v1 = "@#"// 固定值var d = "xyz517cda96abcd"// a = a[Ot]()[I1](_),a = a.sort().join("")a = (a += v1 + key) + (v1 + r) + (v1 + 3)e = (0,v)((0,h)(a, d))return e
}

现在我们来说一说上面重写的JS代码流程,首先看这一行代码var e, r = +new z[W] - (s || H) - 1661224081041, a = [];

z[W]我们鼠标放置可以看到它是一个Data(),然后我们需要做的就是把s、H两个变量的值拿到,这两个值写死就可以
在这里插入图片描述

通过上述方法,将d、v两个参数的值找到填好即可。这里需要注意的是d的值是在后续可能随时会变化的,相当于一个令牌

接下来我们需要找到代码中的i[jt]、i[qt]两个函数方法

i[jt]方法断点如下:
在这里插入图片描述

i[qt]方法断点如下:

在这里插入图片描述

其中h方法,我们也需要补一下值,直接替换一下方法跟值:

原始代码:for (var e = (n = n$1)[R], r = t[R], a = q1, i = H; i < e; i++)

替换:for (var e = (n = n.split(“”)).length, r = t.length, a = “charCodeAt”, i = 0; i < e; i++)

接下来处理一下v方法中的这行代码,也是需要重写还原的:

原始代码:t = zV1[T](/%([0-9A-F]{2})/g, function(n, t)

替换:t = encodeURIComponent(t).replace(/%([0-9A-F]{2})/g, function (n, t)

至于怎么补怎么还原可以根据断点,分析每一个参数、变量来补就可以,比如上面的z[V1]它就是一个encodeURIComponent方法,T是一个replace方法,数据内容不变

接下来,继续接着往下走,可以看到在v方法内调用了一个o,我们需要将这个o的方法也扣出来

断点调式找到o方法后,可以发现这个方法内有f2、s2、d2…多个参数值,因为外部没有在调用的时候传参,直接补上显示的值:
在这里插入图片描述

let f2 = '66';
let s2 = '72';
let d2 = '6f';
let m2 = '6d';
let l2 = '43';
let v2 = '68';
let p2 = '61';
let h2 = '64';
let y2 = '65';

v方法内还有一个z方法使用同样的方式重写:

原始代码:return z[W1]K1U1

替换:return Buffer.from(t).toString(“base64”)

4. 验证结果

接下来我们简单的写一个python请求调用代码,测试一下效果:

import time
import execjs
import requestsheaders = { 'authority': 'api.qimai.cn','sec-ch-ua': '"Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"','accept': 'application/json, text/plain, */*','sec-ch-ua-mobile': '?0','user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36','sec-fetch-site': 'same-site','sec-fetch-mode': 'cors','sec-fetch-dest': 'empty','accept-language': 'zh-CN,zh;q=0.9',
}url = "https://api.qimai.cn"
url_args = "/rank/marketRank"with open("./qimai.js") as f:js_code = f.read()analysis = execjs.compile(js_code).call("encrypted", url_args)
res = requests.get(f"{url}{url_args}?analysis={analysis}", headers=headers).json()
print(res)

验证如下:

在这里插入图片描述
  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

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

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

相关文章

Linux系统中lib64文件夹下包含:动态链接库,静态链接库,内核模块等

lib64 目录对系统稳定运行有重要作用。 目录 lib64文件动态链接库静态链接库内核模块 lib64文件 lib64 文件夹存放主要是可被程序直接加载并使用的 64 位代码模块,包括动态库、静态库、内核模块等,这些文件对程序运行都至关重要。 在 Linux 系统中,lib64 文件夹通常用于存放…

jmeter errstr :“unsupported field type for multipart.FileHeader“

在使用jmeter测试接口的时候&#xff0c;提示errstr :"unsupported field type for multipart.FileHeader"如图所示 这是因为我们 在HTTP信息头管理加content-type参数有问题 直接在HTTP请求中&#xff0c;勾选&#xff1a; use multipart/form-data for POST【中文…

性能分析之MySQL慢查询日志分析(慢查询日志)

一、背景 MySQL的慢查询日志是MySQL提供的一种日志记录,他用来记录在MySQL中响应的时间超过阈值的语句,具体指运行时间超过long_query_time(默认是10秒)值的SQL,会被记录到慢查询日志中。 慢查询日志一般用于性能分析时开启,收集慢SQL然后通过explain进行全面分析,一…

Selenium 测试用例编写

编写Selenium测试用例就是模拟用户在浏览器上的一系列操作&#xff0c;通过脚本来完成自动化测试。 编写测试用例的优势&#xff1a; 开源&#xff0c;免费。 支持多种浏览器 IE&#xff0c;Firefox&#xff0c;Chrome&#xff0c;Safari。 支持多平台 Windows&#xff0c;Li…

MySQL环境安装

文章目录 MySQL环境安装1. 卸载1.1 卸载不要的环境1.2 检查卸载系统安装包 2. 安装2.1 获取mysql官方yum源2.2 安装mysql的yum源2.3 安装mysql服务 3. 登录(1)(2)(3) 4. 配置my.cnf MySQL环境安装 说明&#xff1a; 安装与卸载中&#xff0c;用户全部切换成为root&#xff0c…

==和equals方法之间的区别,hashcode的理解

和equals方法之间的区别 hashcode是什么&#xff1f;有什么作用&#xff1f; Java中Object有一个方法&#xff1a; public native int hashcode(); &#xff08;1&#xff09;hashcode()方法的作用 hashcode()方法主要配合基于散列的集合一起使用&#xff0c;比如HashSet、…

Java数字化智慧工地管理云平台源码(人工智能、物联网、大数据)

智慧工地优势&#xff1a;"智慧工地”将施工企业现场视频管理、建筑起重机械安全监控、现场从业人员管理、物料管理、进度管理、扬尘噪声监测等现场设备有机、高效、科学、规范的结合起来真正实现工程项目业务流与现场各类监控源数据流的有效结合与深度配合&#xff0c;实…

C语言暑假刷题冲刺篇——day3

目录 一、选择题 二、编程题 &#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C语言每日一练✨其他专栏&#xff1a;代码小游戏C语言初阶&#x1f91d;希望作者的文章能对你有…

iOS自定义下拉刷新控件

自定义下拉刷新控件 概述 用了很多的别人的下拉刷新控件&#xff0c;想写一个玩玩&#xff0c;自定义一个在使用的时候也会比较有意思。使应用更加的灵动一些&#xff0c;毕竟谁不喜欢各种动画恰到好处的应用呢。 使用方式如下&#xff1a; tableview.refreshControl XRef…

定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小

下面画出等效电路图 可以知道单片机内必然有一个电阻RX&#xff0c;为了简化分析&#xff0c;我们假设他是线性电阻&#xff08;不带电容&#xff0c;电感的支路&#xff09; 还有一个基础知识&#xff1a; 电容器的充电放电曲线&#xff1a; 还需要知道电容电压的变化是连续…

Data Abstract for .NET and Delphi Crack

Data Abstract for .NET and Delphi Crack .NET和Delphi的数据摘要是一套或RAD工具&#xff0c;用于在.NET、Delphi和Mono中编写多层解决方案。NET和Delphi的数据摘要是一个套件&#xff0c;包括RemObjects.NET和Delphi版本的数据摘要。RemObjects Data Abstract允许您创建访问…

【C++精华铺】7.C++内存管理

目录 1. C语言动态内存管理 2. C内存管理方式 2.1 new/delete和new T[]/delete[] 2.1.1 操作内置类型 2.1.2 操作自定义类型 2.2 new/delete和new T[]/delete[]的原理 2.2.1 原理 2.2.2 operator new和operator delete 2.2.3 new T[]的特殊处理&#xff08;可以…

docker的资源控制管理——Cgroups

目录 一、对CPU使用率的控制 1.1 CPU 资源控制 1.2 cgroups有四大功能 1.3 设置cpu使用率上限 查看周期限制和cpu配额限制 进行cpu压力测试然后修改每个周期的使用cpu的时间&#xff0c;查看cpu使用率 1.4 设置cpu资源占用比&#xff08;设置多个容器时才有效&#xf…

chatserver服务器开发笔记

chatserver服务器开发笔记 1 chatserver2 开发环境3 编译 1 chatserver 集群聊天服务器和客户端代码&#xff0c;基于muduo、redis、mysql实现。 学习于https://fixbug.ke.qq.com/ 本人已经挂github&#xff1a;https://github.com/ZixinChen-S/chatserver/tree/main 需要该项…

数学建模之“灰色预测”模型

灰色系统分析法在建模中的应用 1、CUMCM2003A SARS的传播问题 2、CUMCM2005A长江水质的评价和预测CUMCM2006A出版社的资源配置 3、CUMCM2006B艾滋病疗法的评价及疗效的预测问题 4、CUMCM2007A 中国人口增长预测 灰色系统的应用范畴大致分为以下几方面: (1&#xff09;灰色关…

小航助学GESP_C++一级模拟测试卷第2套(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

Python实战之使用Python进行数据挖掘详解

一、Python数据挖掘 1.1 数据挖掘是什么&#xff1f; 数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中&#xff0c;通过算法&#xff0c;找出其中的规律、知识、信息的过程。Python作为一门广泛应用的编程语言&#xff0c;拥有丰富的数据挖掘库&#…

2023年国赛数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 最短时…

恒运资本:机构持仓比例多少是重仓?

组织投资者关于股票商场的影响越来越大&#xff0c;其持股份额已成为点评一只股票好坏的重要目标之一。但组织持仓份额究竟多少才算是重仓呢&#xff1f;这涉及到许多要素&#xff0c;让我们从多个视点进行剖析。 1.不同组织的界说不同 首要需求注意的是&#xff0c;不同的组织…

Mr. Cappuccino的第63杯咖啡——Spring之AnnotationConfigApplicationContext源码分析

Spring之AnnotationConfigApplicationContext源码分析 源码分析 源码分析 以上一篇文章《Spring之Bean的生命周期》的代码进行源码分析 AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(SpringConfig02.class); LifeCycleBe…