akamai _sbsd
📅 2026/8/1 10:40:24
👁️ 阅读次数
📝 编程学习
目标网站:aHR0cHM6Ly93d3cuY2VidXBhY2lmaWNhaXIuY29tL2VuLVBILw==
请求流程:
1.请求首页获取sbsd的js链接(不一定会带t参数)
2.获取sbsd的js
3.post 获取bm_sc为2的cookie
4.再次请求首页 获取bm_sc为4的cookie
环境分析
打上xhr断点向上跟一栈就能找到环境数组以及生成发包参数的位置,signals就是需要动态生成的值,每份js的key名都会不同
{ "ver": "uNry3nQX+kQKRhp1qS+f4g==", "signals": { "Vl002": "false", "Vl032": "false", "Vl034": "true", "Vl036": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36", "Vl045": "0,0,0", "Vl047": "1,1,1,1,1,1", "Vl048": "[\"zh-CN\",\"zh\"]", "Vl056": "false", "Vl072": "bc60883952e829c2333c9ee93db52d8b0fb1e9da7de4c64ed667766cea87f2dc", "Vl078": "1620450", "Vl088": "0", "Vl105": "Asia/Shanghai", "Vl129": "Fri Jul 31 2026 14:33:17 GMT+0800 (中国标准时间)", "Vl153": "x86", "Vl163": "1;1;1", "Vl178": "effdebb7-83", "Vl186": "s1:-90|s2:discrete|s3:0,1,1,0|s4:explicit|s5:2048,1024", "Vl190": "Asia/Shanghai", "Vl198": "1785479595134", "Vl214": "true", "Vl243": "0", "Vl245": "[{\"brand\":\"Chromium\",\"version\":\"150.0.7871.182\"},{\"brand\":\"Google Chrome\",\"version\":\"150.0.7871.182\"},{\"brand\":\"Not/A)Brand\",\"version\":\"99.0.0.0\"}]", "Vl253": "32", "Vl258": "1", "Vl266": "0", "Vl269": "Google Inc. (Intel)", "Vl271": "24", "Vl277": "c:0", "Vl306": "1", "Vl319": "0", "Vl334": "x86", "Vl336": "150.0.7871.182", "Vl339": "c:0", "Vl341": "[{\"brand\":\"Chromium\",\"version\":\"150\"},{\"brand\":\"Google Chrome\",\"version\":\"150\"},{\"brand\":\"Not/A)Brand\",\"version\":\"99\"}]", "Vl368": "1", "Vl370": "true", "Vl375": "10.00", "Vl393": "true", "Vl406": "[\"zh-CN\",\"zh\"]", "Vl407": "4395630592,16915022,13988422,150", "Vl410": "32", "Vl412": "1", "Vl424": "true", "Vl428": "", "Vl429": "Windows", "Vl430": "https://www.cebupacificair.com/en-PH/", "Vl431": "12", "Vl436": "0;0", "Vl445": "10.0.0", "Vl469": "1;1;1", "Vl471": "true", "Vl472": "0", "Vl476": "0,0", "Vl478": "00", "Vl486": "10", "Vl487": "0", "Vl490": "zh-CN", "Vl491": "[\"4g\",-1,\"null\"]", "Vl492": "true|", "Vl496": "true", "Vl500": "3e0054cf", "Vl502": "954069|772464|003253", "Vl505": "2560", "Vl507": "Windows", "Vl511": "videoinput,audiooutput", "Vl522": "false", "Vl523": "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36", "Vl533": "1,0,0,0", "Vl534": "google chrome", "Vl540": "zh-CN", "Vl544": "false", "Vl547": ",0", "Vl559": "Google Inc. (Intel)", "Vl568": "24", "Vl578": "4628", "Vl601": "150.0.7871.182", "Vl633": "0,wd", "Vl639": "ANGLE (Intel, Intel(R) UHD Graphics 730 (0x00004692) Direct3D11 vs_5_0 ps_5_0, D3D11)", "Vl643": "true", "Vl653": "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36", "Vl660": "false", "Vl669": "true", "Vl670": "Google Inc. (Intel)", "Vl677": "0", "Vl696": "false", "Vl720": "", "Vl741": "000", "Vl742": "1", "Vl751": null, "Vl754": "80", "Vl757": "Fri Jul 31 2026 14:33:17 GMT+0800 (中国标准时间)", "Vl762": "true,false,true", "Vl781": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36", "Vl786": "landscape-primary", "Vl791": "0,0", "Vl794": "ANGLE (Intel, Intel(R) UHD Graphics 730 (0x00004692) Direct3D11 vs_5_0 ps_5_0, D3D11)", "Vl795": null, "Vl816": "fine,fine", "Vl823": "0", "Vl837": "2", "Vl843": "e6a6b62042f2333998b8357baa6fe8b776aaad3c0b1692df334f2afaf3954baf-22-19", "Vl856": "Win32", "Vl867": "000000", "Vl899": "[{\"brand\":\"Chromium\",\"version\":\"150.0.7871.182\"},{\"brand\":\"Google Chrome\",\"version\":\"150.0.7871.182\"},{\"brand\":\"Not/A)Brand\",\"version\":\"99.0.0.0\"}]", "Vl901": "ANGLE (Intel, Intel(R) UHD Graphics 730 (0x00004692) Direct3D11 vs_5_0 ps_5_0, D3D11)", "Vl910": "1440", "Vl916": "[{\"brand\":\"Chromium\",\"version\":\"150\"},{\"brand\":\"Google Chrome\",\"version\":\"150\"},{\"brand\":\"Not/A)Brand\",\"version\":\"99\"}]", "Vl921": "Google Inc. (Intel)", "Vl928": "12", "Vl932": "d6c65638|s1:16|s2:30|s3:12|s4:1,1|s5:1,1024|s6:32767,32767|s7:16384|s8:24|s9:120|s10:-8", "Vl937": "10.0.0", "Vl954": "[\"4g\",-1,\"null\"]", "Vl956": "fb16a83e", "Vl957": "true", "Vl967": "Win32", "Vl968": "true", "Vl973": "ANGLE (Intel, Intel(R) UHD Graphics 730 (0x00004692) Direct3D11 vs_5_0 ps_5_0, D3D11)", "Vl977": "true", "Vl981": "133742|251807|964836|954069|954069", "Vl982": "uNry3nQX+kQKRhp1qS+f4g==", "Vl674": "704284" }, "perf": 2463, "s": "f", "tid": "ms8kgapaffsiyskjnvq" }部分环境语义:
/* performance.getEntriesByType("resource") 取name属性做计算 跟abck和sbsd的链接有关 */ "Vl981": "133742|251807|964836|954069|954069",// 音频OfflineAudioContext相关的api "Vl956": "fb16a83e",// speechSynthesis.getVoices() "Vl843": "e6a6b62042f2333998b8357baa6fe8b776aaad3c0b1692df334f2afaf3954baf-22-19",// (-1).toFixed(-1) — >传入负数,抛出 RangeError。获取错误消息的长度:Nj["message"]["length"]+Array的toatring()去掉函数名的长度 "Vl754": "80",/* 创建audio和video元素调用canPlayType(),测浏览器是否支持音频格式 var HP = ["audio/mpeg", "audio/mp4; codecs=\"mp4a.40.2\"", "audio/ogg; codecs=\"vorbis\"", "audio/webm; codecs=\"vorbis\""]; var Hb = ["video/mp4; codecs=\"avc1.42E01E\"", "video/webm; codecs=\"vp8, vorbis\""]; var D1 = L["document"]["createElement"]("audio"); var WJ = L["document"]["createElement"]("video"); */ "Vl047": "1,1,1,1,1,1",// canvas 的todataurl() "Vl072": "bc60883952e829c2333c9ee93db52d8b0fb1e9da7de4c64ed667766cea87f2dc",// 获取navigator 自身拥有的属性名 + Navigator.prototype 上的属性名,然后对属性列表做哈希,生成一个浏览器环境指纹。 "Vl178": "effdebb7-83",// jsHeapSizeLimit,totalJSHeapSize ,usedJSHeapSize ,rtt "Vl407": "4395630592,46080560,39398900,100",// L["console"]["groupEnd"]()控制台检测 "Vl660": "false",以下是近期更新新增的环境检测
一、检测原生
"Vl339": "c:0", "Vl277": "c:0",- 检测两类对象:
- Vl277:对象属性:
navigatorwindow.screenCanvasRenderingContext2D.prototypeWebGLRenderingContext.prototypeOfflineAudioContext.prototype
- Vl339:函数/属性方法
Function.prototype.toStringnavigator.permissions.querynavigator.webdrivernavigator.userAgentData.getHighEntropyValuesnavigator.deviceMemorynavigator.hardwareConcurrencynavigator.pluginsnavigator.mediaDevices.enumerateDevicesspeechSynthesis.getVoicesHTMLCanvasElement.prototype.toDataURLWebGLRenderingContext.prototype.getParameter/getExtensionIntl.DateTimeFormat.prototype.resolvedOptionsnavigator.userAgent/appCodeName/platform/languageswindow.devicePixelRatiowindow.matchMedia
- 检测方式
- 使用
Object.getOwnPropertyNames()获取对象自身属性列表。- 遍历目标属性:
- 使用
Object.getOwnPropertyDescriptor()获取属性描述符。- 如果当前对象没有,则继续沿原型链查找。
- 对属性进行分析:
- 如果存在
get:
- 检测 getter 的
toString()是否包含[native code]- 检测 getter 的
name- 检测 getter 的
prototype(正常应为undefined)- 如果没有
get:
- 直接检测属性值或方法。
- 函数检测内容
主要检测:
函数是否为原生函数:
func.toString()是否类似:
function xxx(){ [native code] }函数名称:
func.name函数原型:
func.prototype正常浏览器内置方法通常:
undefined
二、字体指纹
"Vl368": "1",- 创建 Canvas 测量字体宽度
canvas = document.createElement("canvas") ctx = canvas.getContext("2d")设置基准字体
ctx.font = "72px serif"测量基准文本:
ctx.measureText("mmmmmmmmmllllliii").width得到默认字体宽度Ut。
- 检测指定字体是否存在
定义:
Jj(fontName)逻辑:
- 设置字体:
ctx.font = '72px "字体名", serif'- 再测量:
ctx.measureText(text).width- 与默认 serif 宽度比较:
width != Ut如果不同,说明该字体生效,认为该字体存在。
- 检测字体列表
依次检测:
| 字体 | 用途 |
|---|---|
| Roboto / Droid Sans Mono | Android / Chrome 常见字体 |
| Arimo / Ubuntu | Linux 字体特征 |
| Helvetica Neue / Geneva / -apple-system / BlinkMacSystemFont | macOS 字体特征 |
| Lucida Console / Cambria Math / Segoe UI | Windows 字体特征 |
- 根据字体组合判断系统环境
优先级:
Lucida Console Cambria Math Segoe UI ↓ Helvetica Neue Geneva ↓ Arimo Ubuntu ↓ Roboto Droid Sans Mono根据哪个字体存在,推断:
- Windows
- macOS
- Linux
- Android
检测目的
通过 CanvasmeasureText()测量字体渲染差异,判断:
- 操作系统类型
- 系统字体环境
- 浏览器运行环境真实性
三、webgl2参数能力指纹检测
//检测webgl2属性:"MAX_VERTEX_TEXTURE_IMAGE_UNITS,MAX_VARYING_VECTORS,MAX_VERTEX_UNIFORM_BLOCKS,MAX_VERTEX_OUTPUT_COMPONENTS,MAX_VARYING_COMPONENTS,MAX_INTERLEAVED_COMPONENTS,ALIASED_LINE_WIDTH_RANGE,ALIASED_POINT_SIZE_RANGE,MAX_TEXTURE_IMAGE_UNITS,MAX_FRAGMENT_UNIFORM_BLOCKS,MAX_FRAGMENT_INPUT_COMPONENTS,MIN_PROGRAM_TEXEL_OFFSET,MAX_PROGRAM_TEXEL_OFFSET,MAX_VIEWPORT_DIMS,MAX_TEXTURE_SIZE,MAX_COMBINED_TEXTURE_IMAGE_UNITS,MAX_TEXTURE_LOD_BIAS,MAX_UNIFORM_BUFFER_BINDINGS,UNIFORM_BUFFER_OFFSET_ALIGNMENT,MAX_COMBINED_UNIFORM_BLOCKS" "Vl932":"d6c65638|s1:16|s2:30|s3:12|s4:1,1|s5:1,1024|s6:32767,32767|s7:16384|s8:24|s9:120|s10:-8", //webgl2对象getExtension("WEBGL_compressed_texture_pvrtc"/"WEBKIT_WEBGL_compressed_texture_pvrtc") "Vl791": "0,0",四、AudioContext 环境检测
"Vl186": "s1:-90|s2:discrete|s3:0,1,1,0|s4:explicit|s5:2048,1024",- 创建音频上下文
new AudioContext()获取浏览器音频处理环境。
- 创建音频节点
创建:
AnalyserNode- 检测频谱分析参数
OscillatorNode- 生成振荡信号
GainNode- 音量控制
AudioDestinationNode- 音频输出设备
流程:
OscillatorNode ↓ GainNode ↓ AudioDestinationNode- 采集关键参数
检测:
| 字段 | 含义 |
|---|---|
minDecibels | 分析器最低分贝阈值 |
channelInterpretation | 声道解释方式 |
numberOfInputs | 节点输入数量 |
numberOfOutputs | 节点输出数量 |
channelCountMode | 声道计算模式 |
fftSize | 频谱 FFT 大小 |
- 生成音频指纹
结果:
s1:-90 | s2:discrete | s3:0,1,1,0 | s4:explicit | s5:2048,1024验证
编程学习
技术分享
实战经验