【JavaScript 逆向】网易易盾滑块逆向分析

article/2025/9/18 14:59:33

声明

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

案例目标

验证码:aHR0cHM6Ly9kdW4uMTYzLmNvbS90cmlhbC9qaWdzYXc=

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

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

案例分析

抓包

清空浏览器缓存(必须),刷新页面,network 中抓包到 d 接口和 b 接口:

d 接口请求头

d 接口响应内容

b 接口请求头

b 接口响应内容

由上可知,两个接口的请求参数都为 d、v、cb,d 经过加密,二者的 d 参数加密逻辑大致相同,有很多环境校验,比如鼠标事件、canvas、user-agent、document等等;cb 为 __wmjsonp+字符串,可以扣到也可以固定;v 为版本号,有几种,类似主备域名,对应的 js 也有几套,不过只是变量名不同,可以从 config/js 接口中获取到:

getconf 接口,bid、pn 不同网站不一样,可以理解为验证码的标识:

get?referer 接口返回滑块和背景图,请求参数中 cb、acToken 需要逆向分析:

check?referer 接口返回验证结果及 validate 参数的值,请求参数中 data、cb 需要逆向分析:

逆向分析

d、b 参数

清除浏览器缓存,刷新网页即会出现 d 接口,从 OC 跟进去,然后跟栈到 anonymous 中,在第 3720 行打下断点,第 3719 行的 d 及 d 接口请求参数中 d 的值:

d 是传进来的:

通过跟栈会发现,d 参数由下图位置传入,环境校验了 window.navigator、window.screen、window.document 等等:

回到开始位置,跟进到 Ya() 中,c、d 此时为空,l、d 为 undefined,m 为固定值,不用网站不一样,其他的扣即可,注意作用域,变量名可能冲突:

同样通过跟栈,b 接口请求参数 d 的生成位置即下图 e,扣即可,和 d 接口大差不差:

c、d 为 d 接口响应的第二、三个值,l、m 为固定值,不同网站不一样,q 为随机数,扣即可:

cb 参数

全局搜索 cb: ,跟进到 core.v2.21.3.min.js 文件中,在第 10398 行打下断点即会断住,c() 即生成 cb 参数的方法:

跟进去,e 为 uuid,将 e 及 P 方法扣下来即可,这个站点没校验 cb 参数:

fp 参数

一开始断在 cb 处的时候,fp 参数值就已经生成了,往上跟栈会发现 fingerprint 即 fp 参数的值:

fingerprint 位置为 Object ---> state ---> fingerprint,this.state 定义在第 5186 行,打断点后换个模式的滑块即会断住,因为 fp 参数在滑块图片生成之前生成:

接着向上跟栈到 a 中,此时的 fingerprint 已经生成值,参数 a 定义在第 3998 行,为 window["gdxidpyhxde"],可以通过 hook 的方式定位:

hook 代码如下:

(function() {'use strict';var fp_hook = "";Object.defineProperty(window,'gdxidpyhxde',{set:function(val){console.log("fp参数的值为: ", val);debugger;this._value = val;return val;},get:function(){return fp_hook;}});
})();

清除浏览器缓存后刷新网页即会断住:

此时 fp 参数的值已经生成,向上跟栈到 N 中,由下图可知,fp 参数的值为 Ri + : + 时间戳得到的:

这里看着扣就行了,需要注意的是 R 参数,扣完如果缺少环境会导致生成数字不全,校验了 canvas、languages、User-Agent、localStorage,toDataURL 等等,需要注意的是官网请求头中同样校验了 languages,其他的例如知乎登录、某税务局并没发现存在这个问题

acToken 参数

全局搜索 acToken,逐个打断点,点击滑块验证,在第 10416 行断住后向上跟栈:

e[t(2332)] 即 acToken 的值,其定义在上面的 resolve 中:

在第 2480 行打断点,重新加载滑块,下步断点,直至 acToken 参数生成,向上跟栈到 g 中:

跳转到 watchman.min.js 文件中,红框处即生成 acToken 参数的真正位置:

跟进 dc 方法中,La(JSON[b[392]](a)) 即 acToken 参数值,a 字典中有三个值,r 为固定值 1,这里的 d 为请求时的 d 接口响应返回的第三个值,所以 d 请求扣的有问题会导致 acToken 也有问题,b 为上面红框处的 r 值,是个随机数,定义在第 3770 行,acToken 对于随机数校验并不严,但不能写成固定值,其他的慢慢扣就行了:

即 bc() 方法生成,跟进去将相关内容扣下来即可:

data 参数

向上跟栈到 onMouseUP 处,在 core.v2.21.3.min.js 文件的第3391 行打下断点,断住后于控制台打印 data: 后面部分的把内容,即 data 参数的值:

第 3385 行定义了 a、r 及 o,根据控制台打印的内容可以看出,a 为轨迹数组,并且经过了加密处理,s[e(986)](this[e(2236)], l),l 为固定值 50,意思是取原轨迹数组的前 50 位进行加密处理,不论轨迹有多长,只校验前 50 个,不过易盾对于轨迹的校验并不严格,易盾智能无感模式里面也有个滑块,那个滑块甚至没校验轨迹,只校验了缺口距离;r 为 get 接口响应返回的 token 值;o 即滑动滑块的距离经过相关计算后加密的得到的值,这里的 width 宽度需要与请求中的一致:

原始轨迹的位置在 onMouseMove 中:

[Math["round"](r["dragX"] < 0 ? 0 : r["dragX"]), Math["round"](r["clientY"] - r["startY"), s["now"]() - r["beginTime"]];
// [x, y, time]
Math["round"](r["dragX"] < 0 ? 0 : r["dragX"]) // index_0 ---> x
Math["round"](r["clientY"] - r["startY") // index_1 ---> y
s["now"]() - r["beginTime"]  // index_2 ---> time

相应地方用 console.log 打印一下,替换 js 后就能看到原始轨迹,也验证了只会加密前 50 个轨迹,根据打印出的情况对应写轨迹算法,其他的直接扣即可:

结果验证

结言

d 请求很关键,d 不对 acToken 就不对,如果失败大概率是 d 的问题,注意环境问题,轨迹几乎不校验,根据观察,最近可能是要更新一些逻辑,官网存在阉割情况,建议去实测,网易严选(js未混淆)、知乎、某苏税务局等。


http://chatgpt.dhexx.cn/article/9y39gq4O.shtml

相关文章

【JavaScript 逆向】今日头条 jsvmp,_signature 参数分析

前言 现在一些网站对 JavaScript 代码采取了一定的保护措施&#xff0c;比如变量名混淆、执行逻辑混淆、反调试、核心逻辑加密等&#xff0c;有的还对数据接口进行了加密&#xff0c;这次案例是通过补环境过 jsvmp。 声明 本文章中所有内容仅供学习交流&#xff0c;相关链接…

【JavaScript 逆向】拼多多 anti_content 参数逆向解析

前言 现在一些网站对 JavaScript 代码采取了一定的保护措施&#xff0c;比如变量名混淆、执行逻辑混淆、反调试、核心逻辑加密等&#xff0c;有的还对数据接口进行了加密&#xff0c;这次案例是通过补环境过加密。 声明 本文章中所有内容仅供学习交流&#xff0c;相关链接做…

CTF逆向基础

更多资源请进入&#xff1a;https://github.com/SycloverTeam/SycRevLearn 查看。 1 IDA定位main函数 运行T1.exe。 将可执行程序放入IDA中&#xff0c;并查找字符。 双击。 按F5&#xff0c;进入代码。 可以对函数进行重新命名&#xff0c;此时也已经得到了flag。 2 …

[系统安全] 一.什么是逆向分析、逆向分析基础及经典扫雷游戏逆向

您可能之前看到过我写的类似文章&#xff0c;为什么还要重复撰写呢&#xff1f;只是想更好地帮助初学者了解病毒逆向分析和系统安全&#xff0c;更加成体系且不破坏之前的系列。因此&#xff0c;我重新开设了这个专栏&#xff0c;准备系统整理和深入学习系统安全、逆向分析和恶…

逆向--基础知识篇

基础知识 可执行文件 计算机中可以被直接执行的程序被称之为可执行文件&#xff0c;可执行文件中是由指定操作系统的可执行文件格式规范与当前CPU机器指令码组成。不同的操作系统、不同的CPU之间的可执行文件都可能存在或多或少的差异。本篇主要以Windows操作系统、x86架构的…

逆向入门到入土

第一章 概述 学了几个月的逆向&#xff0c;记得10月份国庆节刚开始学的时候 感觉找flag蛮有意思&#xff0c;看着一个up主的视频&#xff0c;那时候c语言也没怎么学&#xff0c;所以就单纯他怎么做&#xff0c;我自己怎么做&#xff0c;后面去一些ctf靶场做了几道题&#xff0…

BNU1064:人品问题

“人品既不能被创生&#xff0c;也不能被消灭。只能从一个人转移到另一个人&#xff0c;从一个层面转化到另一个层面&#xff0c;而在转移和转化的过程当中&#xff0c;人品的总和保持不变。” 至此引出人品学(Characterics)三定律&#xff1a; 第一定律&#xff1a;即人品守恒…

开发者的人品问题

程序员都知道&#xff1a;绝大多数编程中的问题&#xff0c;最终都是自己的人品问题。当遇到奇怪的问题时&#xff0c;我们总是喜欢怀疑系统、怀疑编译器、怀疑网络、怀疑硬件……就是不愿意怀疑自己的人品。熬过几个不眠之夜后&#xff0c;最终还是发现自己的代码存在人品问题…

A. 人品问题

A. 人品问题 Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: Main Submit Status PID: 1064 Font Size: - “人品既不能被创生&#xff0c;也不能被消灭。只能从一个人转移到另一个人&#xff0c;从…

BNU 1082 人品问题

这个题我是1A 突然觉得自己好叼 #include<bits/stdc.h> int main() {printf("25\n");return 0; }

人品问题

Description 网上出现了一种高科技产品——人品测试器。只要你把你的真实姓名输入进去&#xff0c;系统将自动输出你的人品指数。yzx不相信自己的人品为0。经过了许多研究后&#xff0c;yzx得出了一个更为科学的人品计算方法。这种方法的理论依据是一个非常重要的结论&#xff…

人品差的人,开口闭口都是这些话,一定不要深交!

说话之道&#xff0c;也是为人之道。 言语是思想的发声&#xff0c;从一个人的话里&#xff0c;往往可以听出其内心的声音。 从而初步判断出一个人的人品如何&#xff0c;是否值得交往。 那些人品差的人&#xff0c;开口闭口都离不开以下三种话&#xff0c;身边若有此类人&a…

adb logcat 命令行用法

本文为转载。 作者 :万境绝尘 转载请著名出处 eclipse 自带的 LogCat 工具太垃圾了, 开始用 adb logcat 在终端查看日志; 1. 解析 adb logcat 的帮助信息 在命令行中输入 adb logcat --help 命令, 就可以显示该命令的帮助信息; [plain] view plain copy octopusoctopus:~$ ad…

java logcat_logcat -- 基本用法

1.Log类是一个日志类&#xff0c;我们可以在代码中使用logcat打印出消息 常见的日志记录方法有&#xff1a; v(String,String) --verbose 显示全部信息 d(String,String) -- debug 显示调试信息 i(String,String) -- information 显示一般信息 w(String,String) -- warning 显…

Logcat使用

目录 一、Logcat窗口 二、过滤 logcat 消息 三、Logcat的日志级别 四、设置日志信息颜色 一、Logcat窗口 Logcat在哪里&#xff1f;我都是直接点击工具栏中的Logcat图标。 Logcat窗口是用来查看应用日志的啦&#xff0c;我把每个部分标注了一下。 二、过滤 logcat 消息 一…

[Android]Logcat调试

Android采用Log(android.util.log)工具打印日志&#xff0c;它将各类日志划分为五个等级。 Log.e 打印错误信息 Log.w 打印警告信息 Log.i 打印一般信息 Log.d 打印调试信息 Log.v 打印冗余信息 不同等级的日志信息&#xff0c;在日志栏中会以不同颜色和等级(E、W、…

java logcat_使用 Logcat 写入和查看日志

Android Studio 中的 Logcat 窗口会显示系统消息,例如在进行垃圾回收时显示的消息,以及使用 Log 类添加到应用的消息。此窗口可以实时显示消息,也可以保留历史记录,因此您可以查看较早的消息。 要仅显示感兴趣的信息,您可以创建过滤器、修改消息中显示的信息量、设置优先级…

adb 抓取logcat 日志

&#xff08;1&#xff09;确保计算机里面有以下三个文件&#xff0c;才能抓取logcat日志&#xff08;只需要这三个文件就可以了&#xff09;。如果你的计算机有android sdk&#xff0c;以下三个文件会在你的sdk下的platform-tools文件夹里面。如果需要打印logcat日志的计算机没…

新版logcat最全使用指南

前言&#xff1a; 俗话说&#xff0c;工欲善其事&#xff0c;必先利其器。logcat是我们通过日志排查bug的重要武器之一。从某个版本开始&#xff0c;logcat改版了&#xff0c;改版之后&#xff0c;也许某些人觉得不太习惯&#xff0c;但是如果稍微学习下之后&#xff0c;就发现…

logcat命令介绍

1.android log系统 2.logcat介绍 logcat是android中的一个命令行工具&#xff0c;可以用于得到程序的log信息 log类是一个日志类&#xff0c;可以在代码中使用logcat打印出消息 常见的日志纪录方法包括&#xff1a; 方法 描述 v(String,String) (vervbose)显示全部信息d(Stri…