当前位置: 首页 > news >正文

【JavaScript 逆向】安居客滑块逆向分析

声明

本文章中所有内容仅供学习交流,相关链接做了脱敏处理,若有侵权,请联系我立即删除!

案例目标

验证码:aHR0cHM6Ly93d3cuYW5qdWtlLmNvbS9jYXB0Y2hhLXZlcmlmeS8/Y2FsbGJhY2s9c2hpZWxkJmZyb209YW50aXNwYW0=

以上均做了脱敏处理,Base64 编码及解码方式:

import base64
# 编码
# result = base64.b64encode('待编码字符串'.encode('utf-8'))
# 解码
result = base64.b64decode('待解码字符串'.encode('utf-8'))
print(result)

案例分析

抓包

进入网页后,F12 打开开发者人员工具,进行抓包,getInfoTp 接口响应返回 info 和 responseId:

  • info:AES 加密,解密后为图片 url 地址(背景图、滑块图)及实际渲染宽度等相关信息,基本样式如下:

{"level":310,"isimgUrls":1,"bgImgUrl":"https://wos3.58cdn.com.cn/HimeDcBazHkN/captchaimg/301e8298-af09-4198-882c-1399a66b0c23.png","width":"280","tip":"请点击并将滑块拖动到指定位置","puzzleImgUrl":"https://wos3.58cdn.com.cn/HimeDcBazHkN/captchaimg/2c2ecb8f-8678-425b-8354-544013e498e2.png","type":"1"}
  • responseId:checkInfoTp 接口(校验验证是否通过)的请求参数

getInfoTp 接口请求参数如下:

  • sessionId:网页源代码中获取

  • dInfo:浏览器 user-agent、location.href、sessionId 等经过 AES 加密得到

滑动滑块后,会抓包到 checkInfoTp 接口,校验滑块是否通过,失败则返回:

checkInfoTp 接口的请求参数:

  • sessionId:网页源代码中获取

  • responseId:getInfoTp 接口响应返回

  • dInfo:浏览器 user-agent、location.href、sessionId 等经过 AES 加密得到

  • data:缺口距离、轨迹等经过 AES 加密得到

参数逆向

sessionId

ctrl + f 局部搜索 sessionId,在网页源代码中,通过正则匹配出来即可:

dInfo

全局搜索 dInfo,就一个 js 中包含,跟进到 isd_captcha_v20210125173727.js 中,格式化后再局部搜索 dInfo,有四个结果,逐个打下断点,滑动滑块,在第 574 行断住,控制台打印各部分内容:

(0, _taN)() 为定值,包含浏览器 user-agent、location.href 等,_Lnn 定义在第 571 行,为 sessionId,_0x90o[67] 打印结果为 AESEncrypt,可以推测为 AES 加密,跟进到 _fSL[_0x90o[2]][_0x90o[67]] 中,在第 1181 行打下断点,可以看到初始向量 iv(sessionId)、加密模式 mode(CBC)以及填充方式 padding:

跟到 _GrF 的 pad 中即可看到填充方式,为 Pkcs7,至此确定为 AES 加密,引库或者扣出算法都可:

  • Block Cipher:第 8433行 _0x90o[491] 为 BlockCipher,块加密,又被称为分组加密或分块加密,是对称加密的一种常见形式,如 DES、AES,基本思路是将明文分成多个等长的块( block ),然后用相同的一个密钥,对每个块进行加密,得到密文块

  • CBC:Cipher Block Chaining(密码块链接模式),是一种循环模式,前一个分组的密文和当前分组的明文异或操作后再加密,这样做的目的是增强破解难度

  • PKCS7:在填充时首先获取需要填充的字节长度 = 块长度 - (数据长度 % 块长度), 在填充字节序列中所有字节填充为需要填充的字节长度值

data

data 定义在 dInfo 的下面,为 _5DD 的值:

向上跟栈到 slide.e26ac29666e3ea4e6cbd.js 文件的第 1085 行,即 data 参数的生成位置:

_ctu[_0x9pl[7]][_0x9pl[247]] 跟进去是与 dInfo 一样的 AES 加密,_Ugo 包含缺口距离、滑块轨迹及 p[0,0],也就是 sessionId 与 _Ugo 经过 AES 加密得到的 data,_Ugo 定义在第 1033 行:

轨迹由 x、y 及时间间隔组成,依据此及格式构造轨迹算法,缺口可通过 opencv、ddddocr 或者打码平台识别:

info

info 包含图片相关信息,安居客不同模块滑块图片的 url 拼接方式不一样,本例的 url 样式为:

a37ff22c-3b96-4bd2-9dc8-9d24e42f0665.png

而在 aHR0cHM6Ly9hcGkuYW5qdWtlLmNvbS93ZWIvZ2VuZXJhbC9jYXB0Y2hhTmV3Lmh0bWw= 中,图片 url 样式为:

# 背景图片
captcha_img?rid=f3cf84ac3eff4d63a3314bcf8be1851e&it=_big
# 滑块图片
captcha_img?rid=f3cf84ac3eff4d63a3314bcf8be1851e&it=_puzzle

这种拼接方式获取图片就相对容易了,rid 即 responseId,而本例需要解密 info 才能获取到图片相关信息,跟栈到 _jzC 即 info 的值:

也是 AES 加密,解密即可:

实际图片的大小与渲染的不一致,需要进行缩放,或者直接处理缺口距离也可以:

结果验证

相关文章:

【JavaScript 逆向】安居客滑块逆向分析

声明本文章中所有内容仅供学习交流,相关链接做了脱敏处理,若有侵权,请联系我立即删除!案例目标验证码:aHR0cHM6Ly93d3cuYW5qdWtlLmNvbS9jYXB0Y2hhLXZlcmlmeS8/Y2FsbGJhY2s9c2hpZWxkJmZyb209YW50aXNwYW0以上均做了脱敏处…...

【STM32】【HAL库】遥控关灯1主机

相关连接 【STM32】【HAL库】遥控关灯0 概述 【STM32】【HAL库】遥控关灯1主机 【STM32】【HAL库】遥控关灯2 分机 【STM32】【HAL库】遥控关灯3 遥控器 需求 主机需要以下功能: 接收来自物联网平台的命令发送RF433信号给从机接收RF433信号和红外信号驱动舵机动作 方案设计…...

Java 初始化块

文章目录1、初识初始化块2、实例初始化块和构造器3、类初始化块1、初识初始化块 Java 使用构造器来对单个对象进行初始化操作,使用构造器先完成对整个 Java 对象的状态初始化,然后将 Java 对象返回给程序,从而让该 Java 对象的信息更加完整。…...

超详细讲解长度受限制的字符串函数(保姆级教程!!!)

超详细讲解长度受限制的字符串函数(保姆级教程!!!)长度受限制的字符串函数strncpy函数strncpy函数的使用strncpy函数的模拟实现strncat函数strncat函数的使用strncat函数的模拟实现strncmp函数strncmp函数的使用strncm…...

【c#】c#常用小技巧方法整理(4)——cmd命令提示符,c#调用cmd

CMD命令是一种命令提示符,CMD是command的缩写,位于系统System32的目录下,是大多数Windows操作系统中可用的命令行解释器应用程序。用于执行输入的命令。其中大多数命令通过脚本和批处理文件自动执行任务,执行高级管理功能&#xf…...

在项目中遇到的关于form表单的问题

前言 以下内容都是基于element Plus 和 vue3 一个form-item校验两个下拉框 有时候不可避免会遇到需要一个form-item校验两个下拉框的情况,比如: 这种情况下传统的校验已经无法实现,需要通过form表单提供的自定义校验来实现。以上面的必填…...

德国奔驰、博世和保时捷的员工年薪有多少?

点击 欧盟IT那些事 关注我们公告:因企鹅审核规定,本公众号从《德国IT那些事》更名为《欧盟IT那些事》。从职场新人到总裁,一个个盘。位于德国斯图加特的梅赛德斯-奔驰集团及其子公司梅赛德斯-奔驰是世界最知名的汽车制造商之一。奔驰车代表着…...

Mybatis与微服务注册

目录 一,Springboot整合MybatisPlus 创建商品微服务子模块 二,SpringBoot整合Freeamarker 三、SpringBoot整合微服务 &gateway&nginx 整合微服务之商品服务zmall-product 创建并配置网关gateway服务 安装配置SwitchHosts 安装配置Windo…...

JAVA练习47-合并两个有序数组

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目-合并两个有序数组 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以添加本文要记录的大概内容: 2月11日练习…...

右键菜单管理 - Win系统

右键菜单管理 - Win系统前言软件工具管理右键菜单360右键管理右键管家前言 Windows系统可以借助软件工具对右键菜单进行管理,可对指定的右键菜单进行删除和恢复。下面以Win10系统为例介绍管理方法。 注意:使用本文提及的工具将某软件的右键菜单删除后&…...

背包问题求方案数、具体方案

背包问题求方案数、具体方案01背包问题求体积恰好等于V的方案数完全背包问题求体积恰好等于V的方案数01背包问题求最优选法的方案数完全背包问题求最优选法的方案数01背包问题求具体方案01背包问题求体积恰好等于V的方案数 原题链接AcWing278. 数字组合 考虑状态表示&#x…...

电商导购CPS,淘宝联盟如何跟单实现用户和订单绑定

前言 大家好,我是小悟 做过自媒体的小伙伴都知道,不管是发图文还是发短视频,直播也好,可以带货。在你的内容里面挂上商品,你自己都不需要囤货,如果用户通过这个商品下单成交了,自媒体平台就会…...

【Shell1】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc,bmc_wtd,

文章目录1.shell语法:Shell是用C语言编写的程序,它是用户使用Linux的桥梁,硬件>内核(os)>shell>文件系统1.1 变量:readonly定义只读变量,unset删除变量1.2 函数:shell脚本传递的参数中包含空格&am…...

刷题记录:牛客NC208250牛牛的最美味和最不美味的零食

传送门:牛客 题目描述: 牛牛为了减(吃)肥(好),希望对他的零食序列有更深刻的了解,所以他把他的零食排成一列,然后对每一 个零食的美味程度都打了分,现在他有可能执行两种操作&…...

微搭低代码从入门到精通08-轮播容器

我们上一篇讲解了基础布局组件,讲解了普通容器和文本组件的用法,本篇我们继续介绍布局组件。 小程序中经常会有个功能是轮播图展示的功能,多张图片可以顺序进行切换。我们学习使用轮播容器的时候,先考虑切换的图片从哪来&#xf…...

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测 目录分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测分类效果基本介绍模型描述程序设计参考文献分类效果 基本介绍 1.Matlab实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测&…...

华为10年经验测试工程师,整理出来的python自动化测试实战

前言 全书共分11章,第一章是基础,了selenium家谱,各种组件之间的关系以及一些必备知识。第二章告诉如何开始用python IDLE写程序以及自动化测试环境的搭建。第三章是webdriver API,我花了相当多时间对原先的文档,冗余…...

OpenCV杂谈 - 如何导出图像到内存中其他结构

前言 最近在net环境使用OpenCV,记录些疑难杂点. ​​​ 一、OpenCV主要结构 Mat 二、Cols,Rows 和 Width,Hight 三、导入\导出到内存中其他结构 四、按矩形 在Mat之间复制 总结 一、OpenCV主要结构 Mat Mat是OpenCV中的主要结构. 主要有两个用途. 1 存储图片信息,2 存…...

Session与Cookie的区别(四)

咖啡寄杯的烦恼 虽然店里生意还可以,但小明无时无刻不想着怎么样发大财赚大钱,让店里的生意变得更好。 他观察到最近好多便利商店开始卖起了咖啡,而且时不时就买一送一或是第二件半价,并且贴心地提供了寄杯的服务。 寄杯就是指说你…...

Linux 文件锁 - fcntl

什么是文件锁&#xff1f; 即锁住文件&#xff0c;不让其他程序对文件做修改&#xff01; 为什么要锁住文件&#xff1f; 案例&#xff0c;有两个程序&#xff0c;都对一个文件做写入操作。 #include <unistd.h> #include <stdio.h> #include <stdlib.h> …...

CellularAutomata元胞向量机-2-初等元胞自动机MATLAB代码分享

%% 二维元胞自动机%imagesc(a)的色度矩阵a中0->256由蓝变黄% 规则&#xff0c;先把中间点置为1&#xff0c;每一时间每一点如果%周围八个点和为偶数&#xff0c;则变为0&#xff0c;为奇数则变为 1% 颜色控制clc, clearMap [1 1 1; 0 0 0];% [0 0 0] is black, [1 1 1] is …...

OpenStack云平台搭建(6) | 部署Neutron

目录 1.在控制节点登录数据库配置 2.要创建服务证书&#xff0c;完成这些步骤 3.创建网络服务API端点&#xff1a; 4.安装网络组件 5.配置neutron组件 6.配置 Modular Layer 2 (ML2) 插件 7.配置Linuxbridge代理 8.配置DHCP代理 9.配置元数据代理 10.编辑/etc/nova/no…...

Lesson 05.Configuring the Oracle Network Environment

Lesson 05. Configuring the Oracle Network Environment 文章目录Lesson 05. Configuring the Oracle Network Environment1. 监听程序的配置文件有哪些&#xff0c;如何命名&#xff0c;保存在什么位置&#xff1f;2. Oracle 网络的服务名称文件是如何命名的&#xff0c;需要…...

理论五:接口vs抽象类的区别,如何用普通的类模拟抽象类和接口

在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。比如,我们可以使用接口来实现面向对象的抽象特性、多态特性和基于接口而非实现的设计原则,使用抽象类来实现面向对象的继承特性和模板设计模…...

【Hello Linux】 Linux的权限以及Shell原理

作者&#xff1a;小萌新 专栏&#xff1a;Linux 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍Linux的基础命令 Linux的权限以及Shell原理Shell的运行原理权限Linux中权限的概念如何切换用户如何提升当前操作的权限如何添加信任…...

【STM32】【HAL库】遥控关灯2 分机

相关连接 【STM32】【HAL库】遥控关灯0 概述 【STM32】【HAL库】遥控关灯1主机 【STM32】【HAL库】遥控关灯2 分机 【STM32】【HAL库】遥控关灯3 遥控器 需求 接收RF433和红外信号,根据信号内容控制舵机 硬件设计 主控采用stm32F103c6 STM32 433接收 其他接口 软件设计 接…...

代码随想录算法训练营第27天|● 93.复原IP地址 ● 78.子集 ● 90.子集II

93.复原IP地址 看完题后的思路 典型分割问题略lue略剪枝条件 sub&#xff1a; 1&#xff09; 不是一位首字母为0 2&#xff09;大于三位 3&#xff09;介于0-255之间 4) 当已分割得到3个时&#xff0c;第四个直接从startIndex到末尾就行 代码 ArrayList<String> slist…...

Unity UI合批的问题

今天看到一个问题&#xff0c;主要说的是Unity中的UI资源合批的问题之前一直以为主要和UI资源在Hierarchy中的排列顺序有关&#xff0c;但其实这并不是最主要的&#xff0c;因为Unity会对同一个Canvas下的UI进行排序&#xff08;注&#xff1a;不同Canvas下的资源是不能够合批的…...

MWORKS--系统建模与仿真

MWORKS--系统建模与仿真1 系统定义特征2 系统研究2.1 特点与原则2.2 方法百度百科归纳同元杠归纳3 系统建模与仿真3.1 系统、模型、仿真的关系3.2 系统建模4 建模方法4.1 方法4.2 一般流程4.3 目的5 仿真方法5.1 方法5.2 流程参考1 系统定义 系统是由相互作用相互依赖的若干组…...

PC端开发GUI

PC端开发GUI 一、搭建PC端环境:常规方式1、Python2、Pycharm二、搭建PC端环境:创建虚拟环境1、创建文件夹存放虚拟环境相关2、配置环境变量3、创建.ui文件4、.ui文件转成.py文件5、打包.py文件来发布.exe一、搭建PC端环境:常规方式 1、Python 注意Python版本不能超过3.9,…...

乐清网站设计制作/网站百度不收录

IOS7 webview全屏导致状态栏悬浮在页面上解决方案&#xff1a;打开 ios项目/classes/MainViewController.m&#xff0c;修改viewWillAppear方法- (void)viewWillAppear:(BOOL)animated{// View defaults to full size. If you want to customize the views size, or its subvie…...

淘宝客怎样做网站/百度人工投诉电话是多少

规范 RESTful API RESTful 是⼀种架构设计⻛格。核⼼思想是⼀切皆资源。RESTful架构中&#xff0c;将所有的东⻄都视为资源&#xff0c; 每个资源对应了⼀个URI&#xff08;统⼀资源标识符&#xff09;所有的操作都是对资源的增删改查&#xff0c;这些操作对应了 HTTP 的 GET、…...

如何让订阅号菜单做微网站/搜什么关键词能找到网站

项目地址&#xff1a;http://www.freeteam.cn/密码设置从右侧管理菜单点击密码设置进入。输入正确的当前密码和新密码后点击修改即可。转载于:https://blog.51cto.com/3357346/2322921...

做兼职在线抠图网站/广告投放平台有哪些

亲爱的玩家&#xff1a;大家好&#xff01;为了更新游戏内容&#xff0c;提升游戏体验&#xff0c;7k7k《剑灵洪门崛起》将于10月10日7:00-8:00对所有服务器进行更新维护&#xff0c;维护期间无法登陆游戏&#xff0c;维护时间预计1小时。如果在维护期间无法完成维护相关事宜&a…...

汕头做网站公司/广州aso优化公司 有限公司

writing-mode 样式可以控制文本在水平或垂直方向上如何排布&#xff0c;试了下&#xff0c;这里所说的文本应该不局限于文字&#xff0c;div 也可以&#xff1a;从上往下&#xff0c;从左往右html,body{ margin:0; border:0; padding:0; width:100%; height:100%; }.parent{ di…...

推荐完善政府网站建设/重庆网站seo服务

1. 内省(Introspection)函数Introspection(内省)程序在运行时检查对象的类型或属性的能力&#xff0c;他允许对象类由程序员操纵。你将会发现introspection 相当有用当你不知道哪一个类后或者方法在设计时需要被执行.Introspection 在 PHP 提供非常有用的能力去检查类(classes)…...