【JS逆向】【多图+附源码】 2023 python获取某蜂窝 _sn
声明:本文/代码/软件/网站等内容仅供学习交流使用,不涉及任何商业目的或利益。如有侵犯版权或其他问题,请联系作者删除。作者对本文/代码/软件/网站等内容的正确性、完整性、可靠性、安全性等不作任何保证,使用者需自行承担风险和责任。
又相亲失败了,写个文章吧。今天介绍的是一个关于蜜蜂窝学习一下评论获取。其中在请求数据时有一个_sn参数需要处理一下。简单说一下思路。
第一步 抓包
这里随便先进一个酒店的介绍页
想要找到包含评论数的数据包,首先在请求中搜索一下,不过根据结果来看是没有找到的,接下来就在数据包中一个一个查看

尴尬的是找了一遍也没看到,试着切换下一页在请求一下

这里可以看到在点击下一页的时候马上跳出来了一个请求,那这个大概率就是数据包了。
在请求数据时携带了一些参数,下边比较关键的几个标注出来了,其中_sn就是这次的主角

在请求相应回来的数据可以看到有一个html属性,里面是一个包含了样式和内容的html标签

参数和请求url先拿到

第二步 找到加密位置
从调用栈跟值应该都有点了解,我这里就直接上图了
直接从发起程序这里找调用栈,不过数据加密一般都在中间的几个请求

例如我这里从第一个e.send进去,直接打断点从调用栈往回一个一个找。
这里再ajax这个调用栈中发现了一个位置,url参数在上一行还是/hotel/info/comment_list,在下一行就拼接上了_ts和_sn,所以大概率是在这里面完成的加密操作

进去函数中经过一番调试,发现在函数中有这么一行代码

第一次调用的时候没有做任何操作,在通过return第二次进入的时候
就会跳转到这么一个乱七八糟的js文件中

第三步 加密逻辑
通过运行了几次发现了一些其中的逻辑
- 黄色框中的结果就是
_sn的值 - 红色框中的返值就是黄色框中的结果

此外,红色框中的运算逻辑就是 浏览器传递的参数
即下图中
1. 参数:除了_sn以外所有参数组成的对象 通过 JSON.stringify转换后的字符串
2. 盐 即固定值(c9d6618dbc657b41a66eb0af952906f1)
这二者拼接后的字符串经过md5(32位)加密后使用·slice(2,12)取出的字符串
将内容转换为明文即
而_0xe7fex2.hash 就是md5加密
无需进入方法内部查看,具体是否为标准的md5加密一试便知

至此 _sn的解密操作就已经完成了
通过Nodejs 补环境实现
因为可以直接把文件拿下来用这个方法就不过多说了,说一下怎么补环境吧
可以通过nodejs的jsdom来实现,这里就直接贴核心代码了
const jsdom = require("jsdom")
const {JSDOM} = jsdom
const resourceLoader = new jsdom.ResourceLoader({
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63"
})
const html = `<!DOCTYPE html><p>Hello world</p>`
const dom = new JSDOM(html)
document = dom.window.document
window = dom.window
// 这三个是从文件中抠出来的,也可以直接用整个文件,但是这三个是必须有的
var _0xe7fex1 = {...}
var _0xe7fex2 = {...}
function _0xe7fex35(_0xe7fex36){...}
let ls = process.argv.slice(2) // 接收命令行调用时的参数
obj = {"poi_id": 40061,"type": 0,"keyword_id": 0,"page": ls[0],"_ts": ls[1]}
console.log(_0xe7fex35(obj)) //打印/返回结果
python调用需要配置一下node环境
# coding=utf-8
import requests, os, subprocess,requests,time
from lxml import etree
os.environ["NODE_PATH"] = "./node_modules"
# obj = {"poi_id": 40061,"type": 0,"keyword_id": 0,"page": 3,"_ts": 1678937379585}
page = 6
ts = int(time.time()*1000)
sn = subprocess.getoutput(f'node jiudian.js {page} {ts}')
print(sn)
通过Python算法还原实现
通过python的hashlib库进行md5操作,其中的参数值通过字符串拼接完成
import hashlib
import json
# 创建一个md5对象
m = hashlib.md5()
# 将字典转换为JSON格式的字符串并传入md5对象
ts = int(time.time()*1000)
params = {
"_ts": f"{ts}",
"keyword_id": "0",
"page": "7",
"poi_id": "40023",
"type": "0"
}
salt = "c9d6618dbc657b41a66eb0af952906f1"
m.update((json.dumps(params, separators=(',', ':')) + salt).encode())
# 获取md5加密后的十六进制字符串
result = m.hexdigest()[2:12]
params.update({"_sn":_result})
# 打印结果
print(result)
完整代码已上传至 Gitee
【JS逆向】【多图+附源码】 2023 python获取某蜂窝 _sn的更多相关文章
- jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
上一篇记录了BaiduTemplate模板引擎使用示例附源码,在此基础上对使用方法进行了封装 自定义插件jajaxrefresh.js 代码如下: //闭包限定命名空间 (function ($) { ...
- leaflet 结合 Echarts4 实现迁徙图(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- openlayers5-webpack 入门开发系列结合 turf.js 实现等值线(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
- leaflet结合turf.js实现多边形分割(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- leaflet实现风场图(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- Vue过渡和动画效果展示(案例、GIF动图演示、附源码)
前言 本篇随笔主要写了Vue过渡和动画基础.多个元素过渡和多个组件过渡,以及列表过渡的动画效果展示.详细案例分析.GIF动图演示.附源码地址获取. 作为自己对Vue过渡和动画效果知识的总结与笔记. 因 ...
- arcgis api 3.x for js 入门开发系列批量叠加 zip 压缩 SHP 图层优化篇(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- cesium 实现风场图效果(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- arcgis api 3.x for js 解决 textSymbol 文本换行显示(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- Ext.NET 4.1 系统框架的搭建(后台) 附源码
Ext.NET 4.1 系统框架的搭建(后台) 附源码 代码运行环境:.net 4.5 VS2013 (代码可直接编译运行) 预览图: 分析图: 上面系统的构建包括三块区域:North.West和C ...
随机推荐
- virsh虚拟机使用网桥来实现上网
使用virsh-install安装虚拟机后,虚拟机不可以上网 第一步:主机上配置网桥 cp ifcfg-eno16777736 /tmp/ cp ifcfg-eno16777736 ifcfg ...
- SimpleITK和nibable读取nii文件
import SimpleITK as sitk path = 'nii全路径' nii_obj = sitk.GetArrayFromImage(sitk.ReadImage(path)) #sha ...
- 声网发布教育新品:灵动课堂全球覆盖学生超400万,互动白板首创H5课件
3月31日,全球实时互动云服务商声网Agora在北京举行教育产品发布会,正式发布教育行业首款aPaaS产品"灵动课堂",和首个支持H5课件的白板PaaS产品"互动白板&q ...
- Qcon 实时音视频专场:实时互动的最佳实践与未来展望
互动直播.线上会议.在线医疗和在线教育是实时音视频技术应用的重要场景,而这些场景对高可用.高可靠.低延时有着苛刻的要求,很多团队在音视频产品开发过程中会遇到各种各样的问题.例如:流畅性,如果在视频过程 ...
- XCode汇编调试
开启Xcode汇编调试 选中Always Show Disassembly项. XCode -> Debug -> Debug Workflow -> Always Show Dis ...
- XAML 设计器已意外退出。(退出代码: e0434352)
一.前言 开门见山,这个问题我遇到过两次,第一次因为项目刚开始不长时间,我查了很长时间都没解决,然后就直接重写了,几乎一样的写法,但问题没复现了,但程序员思维告诉我,一定还是有比较关键的地方出现了问题 ...
- Windows10彻底关闭自动更新
此文操作流程只针对于Windows10 1803及以下版本,更新版本未测试. Windows10在本地组策略编辑器禁用了自动更新,系统依然会在某个时候触发自动更新,怎么办呢,方法来了. 这个方法是结合 ...
- 分享我通过 API 赚钱的思路
写在最前 我们经常看到非常多的 API 推荐,但又经常收藏到收藏夹里吃灰,仿佛收藏了就是用了. 很多时候没有用起来,可能是因为想不到某类 API 可以用来做什么或者能应用在哪里. 下面我将我思考的一些 ...
- NodeJS V8引擎的内存和垃圾回收器(GC)
一.为什么需要GC 程序应用运行需要使用内存,其中内存的两个分区是我们常常会讨论的概念:栈区和堆区. 栈区是线性的队列,随着函数运行结束自动释放的,而堆区是自由的动态内存空间.堆内存是手动分配释放或者 ...
- Flutter中如何取消任务
前言 在开发过程中,取消需求是很常见的,但很容易被忽略.然而,取消需求的好处也很大.例如,在页面中会发送很多请求.如果页面被切走并处于不可见状态,就需要取消未完成的请求任务.如果未及时取消,则可能会导 ...