爬虫逆向之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
相关推荐
跨境技工小黎5 小时前
IPFoxy动态住宅IP实测:做数据采集和爬虫可行吗?
爬虫·网络协议·tcp/ip
玫瑰互动GEO5 小时前
企业官网SEO优化技术架构:从服务器配置到爬虫友好的全链路实践
爬虫·架构
梅孔立6 小时前
Docker 部署 Python3\.11 Flask爬虫项目 终极稳定教程(解决线程报错/挂载失效/pip报错)
爬虫·docker·flask
傻啦嘿哟20 小时前
猫眼电影TOP100爬虫:Requests+正则表达式实战
爬虫·正则表达式
MgArcher21 小时前
抖音a_bogus参数逆向实战:JSVMP环境模拟与Hook技术(2025最新)
javascript·爬虫·python
MgArcher21 小时前
极验GT4滑块验证码全链路逆向:w参数生成与验证流程(2025最新)
爬虫
fangzhanpeng1681 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
亿牛云爬虫专家1 天前
聊聊数据的“冷热分离“:如何对历史爬虫数据进行合理的归档与压缩存储?
爬虫·爬虫代理·架构设计·隧道代理·大数据处理·压缩存储·数据分层存放
袁袁袁袁满1 天前
Python爬虫实战:利用巨量IP获取跨境电商数据
爬虫·python·网络爬虫·爬虫实战·跨境电商·电商爬虫
拿本唠嗑AI研究1 天前
现代前端架构爬虫指南:从静态页面到 React/Vue 单页应用
前端·爬虫·架构