得物小程序逆向+qt可视化(不含sku)

声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872              
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除!q 2766958292

前言:

重新研究227几天,我发现淘系事件真的太恶心了。一直在调整事件执行顺序。最终把s89 s90 s46 s5给搞了。非淘不检测这几个。中途不知道触发了什么事件把s46加上去,s5没上去导致非淘都过不去。淘系我手动测了一下过了几次。轨迹太恶心了。还有那个ai轨迹研究不明白。怎么收集轨迹没搞懂,最后生成的文件轨迹更差了。有懂的告诉我一下,大家相互交流一下。

接着就是得物,太恶心了风控。我就失败了一次,直接被风控了。进都进不去。ck,st检测很严格。还有code,必须有生成auth token,没有资源跑不起来。我就随便测了几个风控不严格得接口。

1.逆向过程

data,sign就不说了。一个env aes 加密几天没看我也忘了为了交个课程结课作业完成了个大概就没管了。很容易就找到了,sign时md5。

2.收集指纹

为了增加代码行数,方便大作业演示直接全丢给内存跑就行了,丢给缓存吃力不讨好。直接用window环境就行了。

3.code授权

42开源了一个code frida自动授权的。有需要的自己去找我就当宣传一下了。

4.完整代码如下

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import numpy as np
from PyQt5.QtWebEngineWidgets import *
import os
import json
import random
import execjs
import requests
from openpyxl import Workbook
import pandas  as pd
from pyecharts.charts import Map,Page
from openpyxl.utils.dataframe import dataframe_to_rowsclass Ui_MainWindow(QMainWindow):def __init__(self):super(QtWidgets.QMainWindow,self).__init__()self.pageNo=Noneself.setupUi(self)self.retranslateUi(self)def on_lineEdit_textChanged(self, text):try:# 这里处理输入框内容的变化self.pageNo=textexcept Exception as e:print("发生异常:", e)sys.exit(1)  # 或者其他错误处理方式def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(800, 600)self.centralWidget = QWidget(MainWindow)self.centralWidget.setObjectName("centralWidget")MainWindow.setCentralWidget(self.centralWidget)# 使用网格布局self.gridLayout = QGridLayout(self.centralWidget)# 创建输入框并添加到布局中self.lineEdit = QLineEdit()self.lineEdit.setPlaceholderText("输入爬取页数")# textChanged事件连接到相应的槽self.lineEdit.textChanged.connect(self.on_lineEdit_textChanged)self.gridLayout.addWidget(self.lineEdit, 1, 0, 1, 2)  # 行,列,行占比,列占比# 创建爬取数据按钮并添加到布局中self.pushButtonCrawl = QPushButton()self.pushButtonCrawl.setText("爬取数据")# clicked事件连接到相应的槽self.pushButtonCrawl.clicked.connect(self.spider)self.gridLayout.addWidget(self.pushButtonCrawl, 0, 0)# 创建打开列表按钮并添加到布局中self.pushButtonOpenList = QPushButton()self.pushButtonOpenList.setText("打开列表")# clicked事件分别连接到两个不同的槽self.pushButtonOpenList.clicked.connect(self.openfile)self.pushButtonOpenList.clicked.connect(self.creat_table_show)self.gridLayout.addWidget(self.pushButtonOpenList, 0, 1)# 创建表格控件并添加到布局中self.tableWidget = QTableWidget()self.tableWidget.setColumnCount(0)self.tableWidget.setRowCount(0)self.tableWidget.setStyleSheet("selection-background-color:pink")self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)self.gridLayout.addWidget(self.tableWidget, 2, 0, 1, 2)  # 表格控件在第三行,横跨两列# 必要时添加所需的方法,如 on_lineEdit_textChanged, spider, openfile, creat_table_showdef retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "窗口名字(自定义)"))def openfile(self):###获取路径===================================================================openfile_name = QFileDialog.getOpenFileName(self,'选择文件','','Excel files(*.xlsx , *.xls)')#print(openfile_name)global path_openfile_name###获取路径====================================================================path_openfile_name = openfile_name[0]def creat_table_show(self):###===========读取表格,转换表格,===========================================if len(path_openfile_name) > 0:input_table = pd.read_excel(path_openfile_name)print(input_table)#print(input_table)input_table_rows = input_table.shape[0]input_table_colunms = input_table.shape[1]#print(input_table_rows)#print(input_table_colunms)input_table_header = input_table.columns.values.tolist()#print(input_table_header)###===========读取表格,转换表格,============================================###======================给tablewidget设置行列表头============================self.tableWidget.setColumnCount(input_table_colunms)self.tableWidget.setRowCount(input_table_rows)self.tableWidget.setHorizontalHeaderLabels( ['商品id', '封面路径', '标题', '价格', '开售时间', '属性id值', '价格类型', '商品类型','类别id','活动期间价格', '授权价格', '售卖数量', '产品单元id', '最优价格'])###======================给tablewidget设置行列表头============================###================遍历表格每个元素,同时添加到tablewidget中========================for i in range(input_table_rows):input_table_rows_values = input_table.iloc[[i]]#print(input_table_rows_values)input_table_rows_values_array = np.array(input_table_rows_values)input_table_rows_values_list = input_table_rows_values_array.tolist()[0]#print(input_table_rows_values_list)for j in range(input_table_colunms):input_table_items_list = input_table_rows_values_list[j]#print(input_table_items_list)# print(type(input_table_items_list))###==============将遍历的元素添加到tablewidget中并显示=======================input_table_items = str(input_table_items_list)newItem = QTableWidgetItem(input_table_items)newItem.setTextAlignment(Qt.AlignHCenter|Qt.AlignVCenter)self.tableWidget.setItem(i, j, newItem)###================遍历表格每个元素,同时添加到tablewidget中========================else:self.centralWidget.show()def spider(self):# 创建一个工作簿print("开始爬取")tab_headers = ['商品id', '封面路径', '标题', '价格', '开售时间', '属性id值', '价格类型', '商品类型','类别id','活动期间价格', '授权价格', '售卖数量', '产品单元id', '最优价格']wb = Workbook()# 选择活动工作表ws = wb.active# ws.append(tab_headers)store_data = []for count in range(int(self.pageNo)):# 设置表头headers = {}envs = [放入自己的指纹]env = random.choice(envs)headers['User-Agent'] = env['dua']mode = env['dmo']  # 手机型号cp = execjs.compile(open('./得物.js', 'r', encoding='utf8').read())data = cp.call('getSk', env)['data']json_data = {'data': data,}response = requests.post('###/webSk', headers=headers, json=json_data)sk = response.textltk = cp.call('getLtK', env, mode)headers['ltk'] = ltkheaders['SK'] = sk# 第一次是21 然后变20# lastId '' 第二次开始 '1' '2'if count == 0:limit = 21else:limit = 20lastId = count+1json_data = cp.call('getSign', limit, lastId)response = requests.post('#/v1/h5/index/fire/index', headers=headers, json=json_data)hotList = json.loads(response.text)['data']['hotList']for hot in hotList:typeId = hot['typeId']if 'product' in hot:sku = hot["product"]["spuId"]logoUrl = hot["product"]["logoUrl"]title = hot["product"]["title"]price = hot["product"]["price"] / 100if 'sellDate' in hot["product"]:sellDate = hot["product"]["sellDate"]else:sellDate = '未知'propertyValueId = hot["product"]["propertyValueId"]priceType = hot["product"]["priceType"]goodsType = hot["product"]["goodsType"]categoryId = hot["product"]["categoryId"]activityPrice = hot["product"]["activityPrice"] / 100authPrice = hot["product"]["authPrice"] / 100soldCountText = hot["product"]["soldCountText"]cspuId = hot["product"]["cspuId"]if "newOptimalPrice" in hot["product"]:newOptimalPrice = hot["product"]["newOptimalPrice"] / 100else:newOptimalPrice = '未知'store_data.append([sku, logoUrl, title, price, sellDate, propertyValueId, priceType, goodsType,categoryId, activityPrice, authPrice, soldCountText, cspuId, newOptimalPrice])df = pd.DataFrame(store_data, columns=tab_headers)# 现在,我们将 DataFrame 中的数据逐行追加到工作表中for row in dataframe_to_rows(df, index=False, header=False):print(row)if row:  # 这将跳过空行ws.append(row)# 保存工作簿wb.save('./得物.xlsx')page = Page(layout=Page.DraggablePageLayout)# 先生成render.html文件page.render()print("爬取完成")QMessageBox.about(self, 'ok', '数据已爬取完成')if __name__ == "__main__":import sysapp = QtWidgets.QApplication(sys.argv)MainWindow = QtWidgets.QMainWindow()ui = Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())

5.运行结果

有点垃圾将就着用了。

窗体展示
​​​

 

wx a15018601872   
q 2766958292
仅用于学习交流👉侵权+wx

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

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

相关文章

canvas层级太高?解决方法

这个方法主要是依赖于邀请好有页面展示的canvas二维码二维码以及其他容器的图片 有一个保存图片功能,这个保存图片是需要将二维码以及涉及到的其他容器比如下图: 所以这时候需要canvas来绘制一个保存图片的效果,然后对这个canvas绘制的图片保…

AI写作工具的革命:AIGC如何提升内容生产效率

AIGC,即人工智能生成内容,是一种新兴的内容生产方式,它利用人工智能技术来自动生成文本、图像、音频、视频等多种形式的内容即进入实际应用层面。 所以AI不再是高深的、让人望尘莫及的算力算法,而是真实地贴近了我们的生活&#…

抖店重磅新规!保证金下调,一张营业执照能开多个店铺了!

哈喽~我是月月 抖音平台为助力小商家实现开店低成本,轻负担,高收益的模式 在5月30日正式实施了两个政策:保证金下调,一证多开 政策一:保证金下调 这次政策,涉及的类目优惠包含了,平台近70%的…

视频营销的智能剪辑:Kompas.ai如何塑造影响力视频内容

引言: 在当今数字化的营销领域,视频内容已经成为品牌吸引用户注意力、建立品牌形象和提升用户参与度的重要方式。然而,要想制作出具有影响力的视频内容,并不是一件容易的事情。这就需要借助先进的技术和工具,如人工智能…

解析控制台厂家在监控控制台尺寸定制有哪些标准

控制台厂家在监控控制台尺寸定制方面遵循着一系列严格的标准,以确保控制台能够适应不同监控室的具体需求,同时保证工作人员的操作便利和舒适性。以下是一些常见的监控控制台尺寸定制标准: 控制台的整体高度范围通常在720mm至1650mm之间&#…

【大模型】 基于AI和全球化进程的权衡:开源大模型与闭源大模型

【大模型】 基于AI和全球化进程的权衡:开源大模型与闭源大模型 前言 实际上关于开源or闭源,一直以来都是颇有争议的话题,人们争执于数据的隐私性和共享性,到底哪一方能获得的收益更大。而对于开源与闭源哪个更好实际上也就是说是…

clocking wizard IP核通过AXI4-Lite接口实现动态重新配置应用实例

在最近的FPGA应用中,应用到了基于Zynq 7000的Uart串口设计,为了让串口的时钟更精确,采用了外部时钟模式,如下图所示。外部时钟连接到了Clocking Wizard IP核的输出端。 在串口通信时,发现串口有错码出现。例如&#xf…

springboot社区助老志愿服务系统-计算机毕业设计源码96682

摘要 大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在图书馆管理的要求下,开发一款整体式结构的社区助老志愿服务…

芯课堂 | UI Creator 物理键盘移植指南

LVGL提供输入设备的种类一共有5种,分别是:touchpad(触摸板)、mouse(鼠标)、keypad(键盘)、encoder(编码器)、button(外部按键)。而基于…

【源码】一站式Java云商城系统源码,无后门

一站式Java云商城系统源码,无后门,不是java源代码,是编译后的。 系统对接 手动发货 自动发货 兑 换 码 订单监控 商品监控 对象存储 邮箱提醒 加价模板 密价功能 三方支付 会员体系 财务明细 交易分析 售后服务 技术支持 服务器建议配置&a…

简单微信企业群消息推送接口

群管理 群发送接口 POST: JSONURL http://localhost:65029/m/wxapi/sendwxmsg{ "nr":"试", --消息 "at":"wxid_y0k4dv0xcav622,wxid_y0k4dv0xcav622",--群wxid "key":"F98F354F1671A2D21BC78C76B95E96EB",--群k…

不聚焦情绪,不精神内耗:成长的自我修炼

在我们的人生旅途中,总会遇到各种各样的困境和挑战。如何在逆境中保持积极的心态,专注于个人成长,是每一个人都需要面对和思考的问题。这篇文章将探讨如何不抱怨、不指责、不聚焦情绪、不精神内耗,专注于解决困境和个人成长。 问…

【基于 PyTorch 的 Python 深度学习】9 目标检测与语义分割(2)

前言 文章性质:学习笔记 📖 学习资料:吴茂贵《 Python 深度学习基于 PyTorch ( 第 2 版 ) 》【ISBN】978-7-111-71880-2 主要内容:根据学习资料撰写的学习笔记,该篇主要介绍了优化候选框的几种方法。 一、优化候选框的…

C语言——基于stm32G030的温湿度传感器项目实验

一、功能要求: 设备自检功能: 设备上电自检(检查传感器采集是否正常, DHT11有存在响应, 可以自检使用, )自检通过后,由串口打印设备状态信息。 自动控制功能: 进入自动控…

【招聘】易基因科技诚聘销售总监 虚位以待

🚀 关于我们 易基因拥有一支充满活力的科研服务团队,致力于以“引领表观遗传学科学研究与临床应用”为愿景,依托高通量测序技术和云数据分析平台,为医疗机构、科研机构、企事业单位等提供以表观遗传学技术为核心的多组学科研服务…

LeetCode994腐烂的橘子

题目描述 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回 直到单元格中没…

【MySQL】库的操作+表的操作

库的操作表的操作 1.库的操作1.1创建数据库1.2删除数据库1.3查找数据库1.4修改数据库1.5数据库备份和恢复1.6查看连接情况 2.库的操作2.1创建表2.2查看表结构2.3修改表2.4删除表 点赞👍👍收藏🌟🌟关注💖💖 …

深度解析Nginx配置文件:从全局块到upstream块的探索之旅

Nginx配置文件的简介 在浩瀚的互联网世界中,Nginx就如同一座大型交通枢纽,将访问者的请求精准地引导到正确的服务终点。而这一切,都离不开一个神秘而重要的角色——Nginx配置文件。这个文件,就像是一份详尽的路线图,为…

Jetpack架构组件_1.基本知识

1.什么是Jetpack? Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法、减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者可将精力集中于真正重要的编码工作。Jetpack 包含一系列 Android 库,它…

Teamcenter 查询包含Assembly的ItemRevision

问题描述 需要得到所有包含Assembly的ItemRevision。 TC OOTB的查询方式没有可用的,需要在Query Builder中进行自定义。 进一步分析,如果ItemRevision包含Assembly,其必定包含BOMViewRevision。 解决方案 自定义如下查下。 注意&#xff1…