爬虫逆向之X音a_bogus参数分析

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

此文章重在学习调试技巧。模拟参数生成。

目录

网站难点

加密位置

第一次插桩

三个执行顺序

第二次插桩

第三次插桩

附Node环境


目标网址:aHR0cHM6Ly93d3cuZG91eWluLmNvbS91c2VyL01TNHdMakFCQUFBQW9tcFhrUG9ZT0dzQTE1MmRxWW95dEt5Y2pJWl9hQ0N4SHdHbUxYNUlzRE0/ZnJvbV90YWJfbmFtZT1tYWluZA==

接口:aHR0cHM6Ly93d3cuZG91eWluLmNvbS9hd2VtZS92MS93ZWIvYXdlbWUvcG9zdA==

网站难点

网页生成a_bogus执行方法有三种个三个执行入口,每一次刷新进入随机一个执行入口,你断点可能断不了一点,所以最好是三个执行入口一起断住。

这个网页除了补环境外,最大的挑战就是插桩。a_bogus值会生成多次,一个接口生成一次,不同接口生成a_bogus值不一样,所以就是找特征下断点。关键词:'post'

加密位置

XHR断住后,往每个JS文件入扣处打上断点,经分析,加密位置在bdms.JS文件里,并且每次加载进入bdms.JS文件不一样,有三处地方(天哪,第一次做调试到奔溃)

更加正确位置是X函数里的s值

其实有个技巧,跟栈不一定是一个栈一个栈找,也可以一个文件一个文件找。最好的是往每个文件入口处打上断点,就可以分析在那个文件进行加密。

其实上可以在这个文件打上日志断点,不要往初始化的地方打上日志断点。

第一次插桩

很显然就是s坐标9的位置就是参数生成位置,这个参数会生成很多次不一样的值。关键词post

找执行bdms.JS的最开始地方,这里设置条件断点

先对比接口和a_bogus,发现有这个规律。s9和s6两两对应,这是生成位置。

断住后跟栈找,S生成的6坐标对应相应的接口,生成的9坐标则是对应相应接口加密的a_babogus,每个接口的a_bogus值不一样,入口传入参数不一样。所以我们设置添加断点,让它能对应相应接口生成的a_babogus值。

三个执行顺序

跟栈发现在index.js

但是有时调试时会加载别的JS文件,不一定是index.js,,还有可能是client-entry~.js

还有是browser.cn.js接口

心好累,有时调试时候,打上断点,风控就是是执行顺序老变,妨碍调试,搞得很崩塌,但事实上逻辑都是一样的。而且是我电脑原因吗,调试越久越卡。(写个博客心态都崩了!!!)

第二次插桩

接下来就是看看入口的传参了,经调试,在入口处设置这个条件断点即可,这是生成a_b值入口。

重新进入,发现跟栈变了。

往这里继续打断点,

又戳戳变了,这个有点难分析,不过没关系,重新刷新,刷到我们断住的断点为止

分析得出入口在这里

就算断住后也要注意函数名,可能先执行,但下一步不是生成的JS函数,也可能后执行。

不断刷新,直到断指(断住)

this要分析(不一定是this,也可能是e,看你断住得地方),t写死,n如何导出?

首先全扣代码 bdms.JS文件,补完环境后,导出n函数,因为n函数会有很多个接口经过然后对a_b值加密,所以要设置一个特有的条件断点。

第三次插桩

但post接口经过时,e参数是这样的。这是导出a_b值条件。

所以在自己node环境也设置这个条件断点

函数执行处有XML对象,u写死

定义一个对象

传入

然后吐出环境

copy一下,整理得出

uifd是请求体得uifd要一一对应,args是请求接口处a_b值外的url。其中的uifid也要对应。

包括请求头要一一对应

最后在X函数,s9就是a_b值,

顺利得出

模拟参数生成。搞定!!

附Node环境

javascript 复制代码
EventTarget = function EventTarget() {
}
EventTarget.prototype.toString = function toString() {
    return 'function EventTarget() { [native code] }'
}
Window = function Window() {
}
Window.prototype.toString = function toString() {
    return 'function Window() { [native code] }'
}
Window.prototype.requestAnimationFrame = function requestAnimationFrame(res) {
}
Object.setPrototypeOf(Window.prototype, EventTarget.prototype)
window = new Window()
window.toString = function () {
    return '[object Window]'
}

XMLHttpRequest = {}
window.XMLHttpRequest = {}
XMLHttpRequest.prototype = {}

class Location{
    constructor() {
        this.Symbol = "Location"
    }

}


location = new  Location()
location.href = "xxxxx"
location.ancestorOrigins = {}
location.origin = "xxx"
location.protocol = "https:"
location.host = "xxxxx"
location.hostname = "xxxxx"

window.location = location

// -----------------navigator---------------
Navigator = function Navigator() {}
Navigator.prototype.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"

navigator = new Navigator()
window.navigator = navigator



screen = {}
window.screen = screen
相关推荐
wangruofeng18 小时前
68K Star,一个爬虫框架凭什么统一了 HTTP、浏览器和 AI Agent
爬虫·github·ai编程
Bryce学亮1 天前
1688 半自动化拟人浏览信息处理工具爬虫
爬虫·python
简简单单就是我_hehe1 天前
前端埋点日志解决方案:完整 User-Agent 解析工具实现,爬虫识别、设备品牌、操作系统、浏览器版本全解析(附完整源码)
前端·爬虫
上海云盾-小余2 天前
遭 CC 攻击店铺直接瘫痪?WAF + 流量防护双重锁死恶意爬虫
爬虫
IP搭子来一个2 天前
爬虫代理IP怎么选?短效代理 vs 隧道代理选型指南(2026最新)
爬虫·tcp/ip
Web极客码2 天前
跨国网络抖动下的 AI 爬虫流调优:我如何用 Claude 打造“智能退避”资讯清洗管道
网络·人工智能·爬虫
武子康2 天前
调查研究-217 Fortress:当浏览器 Agent 开始被网站识别,开源 Chromium 反拦截引擎来了
人工智能·爬虫·agent
标致的自行车3 天前
Selenium 爬虫固定开头:
爬虫·selenium·测试工具
深蓝电商API3 天前
Flutter App逆向初探:Dart编译产物的分析思路
爬虫
taocarts_bidfans4 天前
Playwright 浏览器指纹伪装 + 住宅代理池 日系电商爬虫防封禁实战
爬虫·bidfans