声明:本文/代码/软件/网站等内容仅供学习交流使用,不涉及任何商业目的或利益。如有侵犯版权或其他问题,请联系作者删除。作者对本文/代码/软件/网站等内容的正确性、完整性、可靠性、安全性等不作任何保证,使用者需自行承担风险和责任。

又相亲失败了,写个文章吧。今天介绍的是一个关于蜜蜂窝学习一下评论获取。其中在请求数据时有一个_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的更多相关文章

  1. jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)

    上一篇记录了BaiduTemplate模板引擎使用示例附源码,在此基础上对使用方法进行了封装 自定义插件jajaxrefresh.js 代码如下: //闭包限定命名空间 (function ($) { ...

  2. leaflet 结合 Echarts4 实现迁徙图(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  3. openlayers5-webpack 入门开发系列结合 turf.js 实现等值线(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

  4. leaflet结合turf.js实现多边形分割(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  5. leaflet实现风场图(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  6. Vue过渡和动画效果展示(案例、GIF动图演示、附源码)

    前言 本篇随笔主要写了Vue过渡和动画基础.多个元素过渡和多个组件过渡,以及列表过渡的动画效果展示.详细案例分析.GIF动图演示.附源码地址获取. 作为自己对Vue过渡和动画效果知识的总结与笔记. 因 ...

  7. arcgis api 3.x for js 入门开发系列批量叠加 zip 压缩 SHP 图层优化篇(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  8. cesium 实现风场图效果(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  9. arcgis api 3.x for js 解决 textSymbol 文本换行显示(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  10. Ext.NET 4.1 系统框架的搭建(后台) 附源码

    Ext.NET 4.1 系统框架的搭建(后台) 附源码 代码运行环境:.net 4.5  VS2013 (代码可直接编译运行) 预览图: 分析图: 上面系统的构建包括三块区域:North.West和C ...

随机推荐

  1. LoadRunner——安装教程以及创建与录制(一)

    theme: channing-cyan 1. loadrunner12|loadrunner12官方版下载(附安装教程)+网盘下载+汉化包 CSDN下载及安装教程: https://blog.csd ...

  2. jetbrains账户的注册

    注册步骤 1.进入官网界面 官网地址在这里啦:https://www.jetbrains.com/ 官网本来显示的是这个界面: 点击右上角的Learning Tools,然后选择该页面内的这里: 2. ...

  3. PatriotCTF 2022 RE

    PatriotCTF 2022 RE String Cheese ida 打开 Shift+F12 即可得到flag PCTF{d0nt_string_m3_410ng_b3_my_v413ntin3 ...

  4. 树状分级框架UI实例

    树状分级框架UI实例:(内容参考https://zhuanlan.zhihu.com/p/108485875) #coding:utf8 #!/usr/bin/env python #@author: ...

  5. python爬虫基础教程

    爬虫介绍 爬虫就是程序,是从互联网中,各个网站上爬取数据(能浏览到的网页才可以爬),做数据清洗,入库 爬虫本质: 模拟http请求,获取数据,入库 网站/app > 抓包 我们日常使用的baid ...

  6. 【读书笔记】组合计数-Tilings-正文 学一半的笔记

    Tilings-正文部分 目录 9.2 转移函数方法 例子 补充 9.3 其余的方法 9.3.1 the path method 9.3.2 The permanent-determinant and ...

  7. springboot多环境开发兼容问题(Maven和boot)

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven ...

  8. 发布新版博客备份功能:生成 sqlite 数据库文件,vscode 插件可查看

    大家好,最近我们重新开发了园子的博客备份功能,今天发布第一个预览版,欢迎大家试用. 点击博客后台侧边栏的博客备份进入新版博客备份: 点击创建备份按钮创建博客备份任务(目前每天只能创建一次备份),待备份 ...

  9. GOROOT、GOPATH、Go Modules 三者的关系介绍

    GOROOT GOROOT路径即为存放Golang语言内建的程序库的所在位置,简单地说就是Golang的安装路径 若按照Folang-Download and install流程,则由go env命令 ...

  10. Docker常用软件安装

    jdk dockere pull openjdk:11 docker run -d -t --name java-11 openjdk:11 MySQL 可以从docker hup中查找自己想要安装的 ...