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

JS逆向 - YandexSmartCaptcha (worker线程)

文章目录

    • 概要
    • 整体架构流程
    • 小结

概要

提示:仅供学习,不得用做商业交易,如有侵权请及时联系

逆向:JS逆向 - YandexSmartCaptcha (worker线程)

URL:aHR0cHM6Ly9jYXB0Y2hhLWFwaS55YW5kZXgucnUvZGVtbw==

在这里插入图片描述

整体架构流程

提示:分析参数生成以及worker调用

1、当我们去点击框框时,会触发一个接口:check

在这里插入图片描述
在这里插入图片描述

2、我们可以看到主要还是这几个参数,观察发现这几个都是base64加密的

在这里插入图片描述

3、这里可以直接去断xhr去分析,或者直接去搜索btoa,hook的话只能hook到轨迹的加密,也就是tdata的值

btoa_ = btoa;
btoa = function(a){let res = btoa_(a);console.log('a::',a,'res::',res)debugger;return res;
}

4、刷新网页

  1. picasso的值:这里的t其实是随机一个值pic: [Math.floor(1e3 * Math.random()), Math.floor(1e3 * Math.random())]
    在这里插入图片描述
[{seed: t[0],rounds: 5,width: 300,height: 300,fontSizeFactor: 1.5,maxShadowBlur: 50}, {seed: t[1],rounds: 10,width: 300,height: 300,fontSizeFactor: 2,maxShadowBlur: 70}]

中间e.map(Z)操作魔改的md5

在这里插入图片描述

  1. rdata生成:window.PGreed.safeGet异步生成的指纹加密,是在captchapgrd的js文件生成
    在这里插入图片描述

3、前面都是初始化的值,当我们点击的时候,会发送一个check包

在这里插入图片描述

4、继续,会通过P.calculateNonce对象走异步,然后生成pdata

在这里插入图片描述
在这里插入图片描述

这里我们可以看得,调用异步操作的时候,创建了worker,blob会创建一个临时的js文件,丢了一个很长的js进去

  • 什么是worker
    浏览器中的Web Worker是HTML5引入的API,用于在后台线程中执行JavaScript脚本,实现多线程操作,避免阻塞主线程,通过消息传递(postMessage/onmessage) 与主线程交换数据,避免共享内存冲突
  • 怎么使用worker
    const Worker = require(‘worker_threads’);
    const parentPort = require(‘worker_threads’);
// 主线程 
const worker = new Worker('worker.js'); 
worker.postMessage({  data: '任务开始' });
worker.onmessage  = (e) => console.log(e.data); // worker.js  
self.onmessage  = (e) => {const result = heavyCalculation(e.data); self.postMessage(result); 
};

我们可以直接替换一手文件,直接在刚刚那段字符串js里面插入debugger

在这里插入图片描述

到这里之后我们可以发现它是一个webpack,传入的值也是上一个接口返回的,所以我们复制到nodejs进行调用即可,最后生成这个pdata

btoa(JSON.stringify({powNonce: nonce,powCalcTime: Math.floor(1e3 * Math.random()),powPrefix: prefix}))

在这里插入图片描述

小结

提示:学习交流主页,星球持续更新中:链接https://t.zsxq.com/AJTw2(+星球主页+v)

http://www.dtcms.com/a/282543.html

相关文章:

  • 基于WebRTC构建应用的可复用模块
  • 下载webrtc M114版本源码只能使用外网googlesource源-命令版
  • i.mx8 RTC问题
  • TEngine学习
  • 【Noah-MP模型】陆面生态水文模拟与多源遥感数据同化的实践技术应用
  • JavaScript进阶篇——第六章 内置构造函数与内置方法
  • alpineLinux修改包管理为国内源
  • 越野小车结构设计\越野小车设计cad【6张】三维图+设计说明书
  • 【Java】【力扣】101.对称二叉树
  • 数据结构与算法——Leetcode215. 数组中的第K个最大元素
  • 中国1km分辨率逐月平均气温数据集 - matlab按shp批量裁剪
  • Git远程仓库与协作技巧详解
  • 【add vs commit】Git 中的 add 和 commit 之间的区别
  • 秘塔AI搜索的深度研究推出:它的“免费午餐”还能走多远?
  • NULL值处理:索引优化与业务设计实践指南
  • GIT版本回退
  • 堆排序算法详解:原理、实现与C语言代码
  • ubuntu--自启动程序
  • Docker Compose 清理指南:`down` 与 `down -v` 的核心区别与使用场景
  • Jenkins credentials 增加了github credential 但是在Git SCM 凭证中不显示
  • 基于SpringBoot+Uniapp球场预约小程序(腾讯地图API、Echarts图形化分析、二维码识别)
  • 如何用 Charles 中文版抓包工具高效调试 API 并优化网络性能
  • 自适应哈希索引 和 日志缓冲区
  • 结构体(二)
  • XXE漏洞1-XXE 漏洞简介-XML 语法-DTD 讲解-外部实体讲解
  • 【React Native】安装配置 Expo Router
  • HTML基础P1 | HTML基本元素
  • Jmeter中Parallel Controller的配置方法(并发)
  • 小白学HTML,操作HTML文件篇(2)
  • 二进制枚举