JS逆向寻找生成bid变量的加密算法,一顿操作猛如虎,结果发现原来是混淆代码

news2024/9/28 11:23:53

分享一下最近我JS逆向的心得。

我最近使用Python爬取某个网站某个链接,cookie必须加入qgqp_b_id参数才能获取数据。

这个参数是一个32位字符串,通过浏览器的开发者工具分析网页源代码,了解到这个qgqp_b_id变量不是服务器返回给客户端的,而是前端JS的某段代码运算出来的。经过一段时间设断点、单步跟踪、反复调试(在此省略一万字),发现这个变量源自bid变量,bid又是哪里算出来的?

起初以为32位字符串是MD5的算法,但随着深入逆向分析JS代码(在jQuery.js、usercollect.min.js、require.min.js、main.js等多个JS代码里跳来跳去),终于在usercollect.min.js找到了一段x64hash128的加密算法:

 然后在这个JS代码里再查找x64hash128可以找到是把变量 r 进行加密运算:

再往上找变量r,r = e, e是一大堆JS代码,在获取当前操作环境的参数,如user-agent、系统语言、显示色深、屏幕像素比、屏幕分辨率等,这些信息都以~~~符号串联起来。

 得出的字符串很长很长,其中占比最多的是canvasKey(e)和webglKey(e)这两个函数生成的字符串。查找canvasKey(e),发现里面有个笑脸符号,嘿嘿,非常有意思:

这段canvasKey(e)函数生成的是base64加密的字符串。我把它进行base64解密,得出的是一个PNG图片。

再看另一个函数webglKey(e),也是生成一个图片然后转base64密文。图片如下:

哈哈,为了层层加密,居然还要代码画个图然后转成密文再来进一步加密,作为JS小白的我真是活久见了。

这还没完,上面说了 r = e,e的最后一个元素通过fontskey (e)函数获取字体名称列表,它是u这个字体名称列表中筛选出当前系统中存在的字体名称,组成一串字体名称。

bid变量正是由系统环境信息、加上两个实时生成的图片转base64密文、再加上字体名称列表,撮合起来,然后进行x64hash128()加密运算。

x64hash128()加密运算还调用x64Add、x64Multiply、x64Xor、x64Rotl等子函数综合计算……问你怕未!

看罢,令我倒吸一口凉气。如果要把它们这么多代码转换成Python代码,相信已劝退了99%的人。我也没有对其逐个转换。

在后来的调试中,我尝试把qgqp_b_id参数随便改了个字符,然后requests.get()。嘿!返回的status_code是200!可以连接成功!

我又尝试把qgqp_b_id的值乱改一通,比如:qgqp_b_id = '9527-3547-709394'(广东人你懂的)。居然也连接成功!

这说明什么?

逆向JS分析了一大轮,一顿操作猛如虎,这些加密代码原来是混淆代码,就是用来吓唬小白的,所谓加密算出来的变量,服务器那边根本不校验,随便编造一个变量都能蒙混过关!真系混吉!

还说明了为什么某些网站加载需要那么长时间,即使是高配置电脑,加载含有大量JS代码的网页所花的时间,跟十几年前低配电脑加载少量JS代码的时间相比,好像差不了多少。现在的网站为了提高安全性,JS代码设计得越来越复杂,运行JS代码消耗了大部分加载时间。

最后我得知,这波信息采集叫做fingerprint2用户指纹,可以参考下面文章了解一下:

fingerprint2生成的用户指纹重复踩坑 - 掘金

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Whids:一款针对Windows操作系统的开源EDR

关于Whids Whids是一款针对Windows操作系统的开源EDR,该工具所实现的检测引擎基于先前的 Gene项目构建,并专门设计可以根据用户定义的规则匹配Windows事件。 功能特性 1、为社区提供一款功能强大且开源的Windows EDR; 2、支持检测规则透明化…

有了java基础,迅速学完Python并做了一份笔记

面向过程Python简介Python和Java的解释方式对比Java:源代码 -> 编译成class -> Jvm解释运行Python:源代码 -> Python解释器解释运行我经常和身边的Java开发者开玩笑说:“Java真变态,别的语言都是要么直接编译要么直接解释…

无线蓝牙耳机哪个好用?好用的无线蓝牙耳机推荐

随着苹果取消3.5mm耳机孔,近几年蓝牙耳机便逐渐取代有线耳机以强势的姿态闯入人们的日常生活。听歌、游戏、运动等,使用蓝牙耳机的人越来越多。经常看到有人问,无线蓝牙耳机哪个好用?针对这个问题,我来给大家推荐几款好…

消息称索尼计划为PS5推出两款蓝牙耳机,Find My蓝牙耳机用途广

根据国外科技媒体 Insider Gaming 报道,索尼计划进一步丰富 PlayStation 5 的配件生态,将会推出两款耳机,一款采用类似于 AirPods 的 TWS 设计,另一款则是无线头戴式耳机。 消息称 TWS 耳机的内部代号为“Project Nomad”&#…

Debug分支在什么场景下使用?怎样创建Debug分支?

在项目的正常开发过程中,之前发布过的版本可能很会出bug,这时就需要停下来现在的开发任务,先去修改bug,完成后再回来继续开发任务。git中stash提供了保存现场的功能,可以把当前工作区、暂存区中的内容不需要提交而保存…

Elasticsearch:Text vs. Keyword - 它们之间的差异以及它们的行为方式

很多刚开始学习 Elasticsearch 的人经常会混淆 text 和 keyword 字段数据类型。 它们之间的区别很简单,但非常关键。 在本文中,我将讨论两者之间的区别、如何使用它们、它们的行为方式以及使用哪一种。 区别 它们之间的关键区别在于,Elastic…

Win 10电脑摄像头提示错误代码0xa00f4244怎么办?

如果你的Windows 10电脑无法打开摄像头,提示“我们找不到你的摄像头”的错误消息,错误代码是0xA00F4244,原因可能是杀毒软件阻止了摄像头,或者是摄像头驱动程序有问题。 小编为你整理了摄像头错误代码0xA00F4244的解决方法&#…

浏览器(以chrome为例)设置对WebGL的支持

某些浏览器由于不支持WebGL渲染,在浏览三维场景服务的时候会报“Your WebGL implementation doesn’t seem to support hardware accelerated rendering”错误,解决方法如下: 1、首先确保电脑支持gpu硬件加速,并下载最新的 GPU 驱…

存储性能软件加速库(SPDK)

存储性能软件加速库SPDK存储加速存储性能软件加速库(SPDK)SPDK NVMe驱动1.用户态驱动1)UIO2)VFIOIOMMU(I/O Memory Management Unit)3)用户态DMA4)大页(Hugepage&#xf…

Part 4 描述性统计分析(占比 10%)——下

文章目录【后续会持续更新CDA Level I&II备考相关内容,敬请期待】【考试大纲】【考试内容】【备考资料】【扩展知识】4、相关分析4.1、相关分析的描述——散点图4.2、相关分析的类型4.3、相关分析的度量4.3.1、协方差4.3.2、相关系数【后续会持续更新CDA Level …

Pyside6(3): 自动生成UI的Qt参数输入对话框

1.前言参数输入界面是桌面软件开发最繁琐的部分之一。特别是当系统中存在多种可编辑的数值模型时,由于各个模型的字段不同,每个字段的输入类型也不同,需要制作不同的UI,使用不同的UI控件,无疑会耗费大量时间&#xff0…

vite+vue3 proxy配置代理服务器解决本地运行跨域问题

vitevue3 proxy配置代理服务器解决本地运行跨域问题 1. 什么是跨域呢? 首先,明白什么是同源策略?同源就是指 协议、域名、端口 都要相同,其中任何一个不同都会出现跨域。例如: http://www.xxx.com:8000 // http 是协…

2023,为什么我的简历还是石沉大海?

对于应聘者来说 ,我们经常见到这样的情况 ,投递的简历要么是已送达(未读),要么是已读不回 ,也有的是沟通上几句就没有了下文 。对于这样的结果我们是既好奇又郁闷 ,好奇的是为啥大多数的简历都石…

新库上线 | CnOpenDataA股上市公司交易所监管措施数据

A股上市公司交易所监管措施数据 一、数据简介 证券市场监管是指证券管理机关运用法律的、经济的以及必要的行政手段,对证券的募集、发行、交易等行为以及证券投资中介机构的行为进行监督与管理。 我国《证券交易所管理办法》第十二条规定,证券交易所应当…

数据结构刷题

数据结构刷题 文章目录数据结构刷题计算时间复杂度练习题答案不带头结点的单链表的插入和删除运算数据结构头插法和尾插法建立单链表二叉树各种方法实现数据结构图的练习题习题答案习题计算时间复杂度练习题 1、设 n 为正整数。试确定下列各程序段中前置以记号的语句的频度。 …

课程规范性要求

课程制作规范 图片规范 允许范围:CC协议 / 作者授权 / 网站代理授权书 图片大小要求:1600 x 1200 dpi 图片长宽比:4:3 每章节格式要求 Week number 本周目标 1.通过背景学习,了解四足机器狗mini pupper上的微型控…

Redis实战—黑马点评(二)缓存篇

Redis实战—黑马点评(二)缓存篇 目录Redis实战—黑马点评(二)缓存篇1. 什么是缓存1.1 缓存的作用和成本2. 添加 Redis 缓存3. 缓存更新策略3.1 三种更新策略3.1.1 主动更新策略4. 缓存穿透4.1 常见两种解决办法4.1.1 缓存空值4.1.…

数仓理论【范式】【维度建模】

数仓理论 1 范式理论 1.1 范式概念 数据建模要遵循一定的规则,在关系建模中,这种规则就是范式 采用范式结构,可以有效的降低数据的冗余性 范式在获取数据时,需要通过join拼接出数据 范式有第一范式(1NF),第二范式…

双击-jar包无法运行解决方法

我自己是通过探索出来的方法解决的,网上的方法适合普通问题 网络流传方法 那种-jar和run.bat的就是曲解了问题意思,问题不是如何运行,而是如何双击jar包就可以直接运行。 普通小问题就是修改注册表,将java路径写进去后面加个 %1…

基于JDBC框架的事务管理

事务: Transaction, 是数据库中的一种能够保证多个写操作要么全部成功, 要么全部失败的机制在基于Spring JDBC的数据库编程中, 在业务方法上添加Transactional注解, 即可使得这个业务方法是事务性的举例, 一个银行转账操作, 转账时需要执行的sql语句大致是:UPDATE 存款表 SET 余…