逆向|dy|a_bogus|1.0.1.19-fix.01

news2025/7/19 12:13:40

2025-04-26
请求地址:aHR0cHM6Ly93d3cuZG91eWluLmNvbS91c2VyL01TNHdMakFCQUFBQV96azV6NkoyMG1YeGt0eHBnNkkzRVRKejlyMEs3d2Y2dU9EWlhvd2ttblZWRnB0dlBPMmMwN2J0WFotcVU4V3M=

个人主页的视频数据
我们需要逆向这个接口,所以现在需要分析这个请求,
分析这几个数据包可以发现:
只有max_cursor和a_bogus参数是变化的,其他的参数都不变

在这里插入图片描述

然后我们先仔细来观察第一个数据包,发现其返回的结果中有max_cursor字段,值为:1723795989000然后我们再看第二个数据包的请求的max_cursor的值就是1723795989000,因此可以发现第二个数据包的请求传递的参数max_cursor就是第一个数据包返回的结果.

在这里插入图片描述
第一个数据包

在这里插入图片描述
第二个数据包

那么现在我们要解决的就是a_bogus字段的值,我们从启动器进去打下断点,然后往下面滑动,断点断住之后,一直过掉,到我们要的请求的接口的位置. 然后我们往前面进行跟栈,发现到X这个栈的时候,参数r._tnc_request_url中并不存在a_bogus字段,所以这个字段很有可能就是在当前function X(t, r, e, n)这个函数内部生成的.

在这里插入图片描述
然后我们重新在函数的开头位置打下断点,继续往下滑动.重新触发断点,分析了发现X这个栈的时候是没有a_bogus字段的,然后继续跟栈走,找其上面的栈

在这里插入图片描述
找到了u这个栈

在这里插入图片描述
然后分析的过程中,本来以为是在u函数中o的变化生成的,随后调试的过程中发现,o这个列表的第二项已经出现了a_bogus参数

在这里插入图片描述

那么之后就分析到d栈中,在d栈中下断点,然后重新再刷新视频的列表,调试的过程中,发现出现了a_bogus参数

在这里插入图片描述
在这里插入图片描述
由于v[++p] = m这一行代码出现太多次了,因此我们直接考虑添加一个条件断点,直接设置:m.length > 100这一个条件,这样就可以很快到找到m的生成,当我们在调试的过程中,发现了乱码的情况,这个m就比较可疑. 然后我们在这个函数的所有的return的位置打下断点,随后在返回的位置找到了一个变量l,它的值就很像参数a_bogus

在这里插入图片描述
在这里插入图片描述
这个时候我们已经知道了,a_bogus肯定是在这个控制流当中生成的,那么这时候,我们在这个函数中关于v数组的运算的地方打下日志断点,涉及到 + - * / >> << 还有n.apply(d, e);的地方都写下日志点,然后我们根据控制台的输出发现:
首先请求的地址 + 字符串"dhzx"

在这里插入图片描述
算法还原太复杂了,看了很多博主的还是没懂,最终选择用补环境的方式来完成,首先把整个bdms_1.0.1.19_fix.js文件给粘贴下来,然后先把万能的代理代码复制到js文件当中,并用jsdom来补充环境.

# 万能代理模板
function get_enviroment(proxy_array) {
    for(var i=0; i<proxy_array.length; i++){
        handler = '{\n' +
            '    get: function(target, property, receiver) {\n' +
            '    if (property === "webviewBridge") {debugger;}else if(property === "bdms"){debugger;}' +
            '        console.log("方法:", "get  ", "对象:", ' +
            '"' + proxy_array[i] + '" ,' +
            '"  属性:", property, ' +
            '"  属性类型:", ' + 'typeof property, ' +
            // '"  属性值:", ' + 'target[property], ' +
            '"  属性值类型:", typeof target[property]);\n' +
            '        return target[property];\n' +
            '    },\n' +
            '    set: function(target, property, value, receiver) {\n' +
            '        console.log("方法:", "set  ", "对象:", ' +
            '"' + proxy_array[i] + '" ,' +
            '"  属性:", property, ' +
            '"  属性类型:", ' + 'typeof property, ' +
            // '"  属性值:", ' + 'target[property], ' +
            '"  属性值类型:", typeof target[property]);\n' +
            '        return Reflect.set(...arguments);\n' +
            '    }\n' +
            '}';
        eval('try{\n' + proxy_array[i] + ';\n'
        + proxy_array[i] + '=new Proxy(' + proxy_array[i] + ', ' + handler + ')}catch (e) {\n' + proxy_array[i] + '={};\n'
        + proxy_array[i] + '=new Proxy(' + proxy_array[i] + ', ' + handler + ')}')
    }
}

然后这个时候就直接执行js代码,缺什么就补充什么,一直到代码不发生报错为止.
这里有一个比较难的点就是,这个jsvmp当中应该是检测了XMLHttpRequest,我们需要将其补充在globalThis这个对象当中.

在这里插入图片描述

一直补充到没有报错为止,而且我们需要提前将window.a_bogus这个参数进行导出.然后当我们补充完整之后,发现代码没有走if(e.length == 2 && e[0] === ‘a_bogus’){这个代码
在这里插入图片描述

这里其实是因为,它a_bogus的生成是需要xhr对象调用send方法之后才会生成的,因此我们还需要手动来调用xhr的send方法.这样才会执行生成a_bogus

在这里插入图片描述
这里还有一个要注意的点就是,虽然代码执行get_a_bogus函数结束后返回了a_bogus,但是它的jsvmp代码还在执行,也就是说这个js文件还没有执行完毕,因此我们需要在js文件代码最后添加process.exit(0);
来手动结束代码的执行.
生成a_bogus结果如下:

在这里插入图片描述
然后我们需要注意一下就是,因为我们直接结束了js的进程,因此在python中不能用execjs来调用这个函数,是拿不到结果的.我们可以用subprocess模块来调用.

在这里插入图片描述
最终的结果如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2343839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高效使用DeepSeek对“情境+ 对象 +问题“型课题进行开题!

目录 思路"情境 对象 问题"型 课题选题的类型有哪些呢&#xff1f;这要从课题题目的构成说起。通过对历年来国家社会科学基金立项项目进行分析&#xff0c;小编发现&#xff0c;课题选题类型非常丰富&#xff0c;但一般是围绕限定词、研究对象和研究问题进行不同的组…

springboot项目配置nacos,指定使用环境

遇到这样一个问题&#xff0c;在开发、测试、生成环境之间切换的问题。 大多数的操作是通过修改spring.profiles.active来确定指向使用的环境配置文件&#xff0c;对应项目中需要增加对应的配置文件。 但是现在几乎所有公司都会有代码管理不管是SVN、git&#xff0c;这样就会涉…

DIFY 浅尝 - DIFY + Ollama 添加模型

准备物料 Dify 本地部署 Ollama 下载 Open WebUI 好了现在&#xff0c;假设访问 http://localhost/apps 应该可以打开 Dify&#xff0c;设置用户登录后应该可以看到以下界面 打开 http://localhost:3000/, 你应该可以看到部署好的Open WebUI&#xff0c;并假设有下载好你感…

Java 异常处理全解析:从基础到自定义异常的实战指南

Java 异常处理全解析&#xff1a;从基础到自定义异常的实战指南 一、Java 异常体系&#xff1a;Error 与 Exception 的本质区别 1. 异常体系核心架构 Java把异常当作对象来处理&#xff0c;并定义一个基类java.lang.Throwable作为所有异常的超类。 在Java API中已经定义了许…

开源AI智能名片链动2+1模式S2B2C商城小程序源码赋能下的社交电商创业者技能跃迁与价值重构

摘要&#xff1a;在移动互联网深度重构商业生态的背景下&#xff0c;社交电商创业者面临流量成本攀升、用户粘性不足、供应链协同低效等核心痛点。本文以“开源AI智能名片链动21模式S2B2C商城小程序源码”技术体系为研究对象&#xff0c;通过分析其技术架构、商业逻辑及实战案例…

WSL 中 nvidia-smi: command not found的解决办法

前言 在使用基于 Linux 的 Windows 子系统&#xff08;WSL&#xff09;时&#xff0c;当我们执行某些操作后&#xff0c;可能会遇到输入 nvidia-smi 命令却无法被系统识别的情况。 例如&#xff0c;在终端中输入nvidia-smi 后&#xff0c;系统返回提示 -bash: nvidia-smi: co…

FPGA前瞻篇-组合逻辑电路设计-多路复用器

多路选择器&#xff08;MUX&#xff09;简介 基本概念 多路选择器&#xff08;MUX&#xff0c;Multiplexer&#xff09;是一种多输入、单输出的组合逻辑电路。 它通过选择控制信号&#xff0c;在多个输入信号中选择一个连接到输出端。 可以理解为一个多路数字开关。 &…

【Castle-X机器人】五、物联网模块配置与调试

持续更新。。。。。。。。。。。。。。。 【Castle-X机器人】五、物联网模块配置与调试 五、物联网模块配置与调试5.1 物联网模块调试物联网模块测试:控制物联网模块:物联网模块话题五、物联网模块配置与调试 5.1 物联网模块调试 调试前需确保Castle-x与mqtt主机服务器处于同…

20250426在ubuntu20.04.2系统上打包NanoPi NEO开发板的FriendlyCore系统刷机eMMC的固件

20250426在ubuntu20.04.2系统上打包NanoPi NEO开发板的FriendlyCore系统刷机eMMC的固件 2025/4/26 21:30 缘起&#xff1a;使用NanoPi NEO开发板&#xff0c;编译FriendlyCore系统&#xff0c;打包eMMC固件的时候报错。 1、在ubuntu14.04下git clone异常该如何处理呢&#xff…

JAVA---字符串

ctrlN 搜索界面&#xff08;idea&#xff09; API和API帮助文档 API &#xff1a; 应用程序编程接口&#xff08;换句话说&#xff0c;就是别人已经写好了&#xff0c;我们不需要再编写&#xff0c;直接使用即可&#xff09; Java API &#xff1a;就是JDK中提供的各种功能…

MacOS 10.15上能跑大语言模型吗?

MacOS 10.15上能跑大语言模型吗&#xff1f; 下载安装Ollama运行大语言模型引申出的问题 MacOS 10.15.7&#xff08;发布于2020年9月&#xff09;作为已经发布了将近5年的系统版本能够运行当今流行的大语言模型吗&#xff1f;这篇文章简要介绍了在MacOS 10.15上通过Ollama运行d…

AI Agent开发第37课-DeepSeek的多模态版JanusPro-7B本地安装

开篇 搜遍Janus Pro git issues、谷哥、国内网络,教程全都是错的。因此还是决定写一本全网唯一正确的教程。 目前网上的教程包括外网的教程都是“缺斤少量”,按照那些教程操作下来不是装不起来,就是装起来只能CPU运行,或者运行起来了Janus的Web前端老是转啊转不出内容。 …

神经网络笔记 - 感知机

一 感知机是什么 感知机&#xff08;Perceptron&#xff09;是一种接收输入信号并输出结果的算法。 它根据输入与权重的加权和是否超过某个阈值&#xff08;threshold&#xff09;&#xff0c;来判断输出0还是1。 二.计算方式 感知机的基本公式如下&#xff1a; X1, X2 : …

阿里云基于本地知识库构建RAG应用 | 架构与场景

RAG&#xff08;检索增强生成&#xff0c;Retrieval-Augmented Generation&#xff09;是一种结合了检索和生成技术的框架&#xff0c;旨在通过外部知识库的检索来增强大语言模型&#xff08;LLM&#xff09;的生成能力。 其核心架构包括两个主要部分&#xff1a; 检索模块&a…

CSS简单实用的加载动画、骨架屏有效果图

效果图 .wxml <!-- 骨架屏 --> <view wx:for"{{skeleton}}" wx:key"index" class"container center" style"--w:{{item.w}}rpx;--h:{{item.h}}rpx" /> <!-- 加载 --> <view class"arco-loading center&quo…

3:QT联合HALCON编程—海康相机SDK二次程序开发

思路&#xff1a; 1.定义带UI界面的主函数类 1.1在主函数中包含其它所有类头文件&#xff0c;进行声明和实例化&#xff1b;使用相机时&#xff0c;是用公共相机的接口在某一个具体函数中去实例化具体的海康相机对象。 1.2设计界面&#xff1a;连接相机&#xff0c;单次采集&a…

【前后端分离项目】Vue+Springboot+MySQL

文章目录 1.安装 Node.js2.配置 Node.js 环境3.安装 Node.js 国内镜像4.创建 Vue 项目5.运行 Vue 项目6.访问 Vue 项目7.创建 Spring Boot 项目8.运行 Spring Boot 项目9.访问 Spring Boot 项目10.实现 Vue 与 Spring Boot 联动11.安装 axios12.编写请求13.调用函数请求接口14.…

数据结构和算法(八)--2-3查找树

目录 一、平衡树 1、2-3查找树 1.1、定义 1.2、查找 1.3、插入 1.3.1、向2-结点中插入新键 1.3.2、向一棵只含有一个3-结点的树中插入新键 1.3.3、向一个父结点为2-结点的3-结点中插入新键 1.3.4、向一个父结点为3-结点的3-结点中插入新键 1.3.5、分解根结点 1.4、2…

Unity-Shader详解-其二

前向渲染和延迟渲染 前向渲染和延迟渲染总的来说是我们的两种主要的渲染方式。 我们在Unity的Project Settings中的Graphic界面能够找到渲染队列的设定&#xff1a; 我们也可以在Main Camera这里进行设置&#xff1a; 那这里我们首先介绍一下两种渲染&#xff08;Forward R…

深入浅出理解并应用自然语言处理(NLP)中的 Transformer 模型

1 引言 随着信息技术的飞速发展&#xff0c;自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;作为人工智能领域的一个重要分支&#xff0c;已经取得了长足的进步。从早期基于规则的方法到如今的深度学习技术&#xff0c;NLP 正在以前所未有的速度改变着我…