X-Bogus流程分析

news2024/9/20 14:28:19

 声明:本文仅限学习交流使用,禁止用于非法用途、商业活动等。否则后果自负。如有侵权,请告知删除,谢谢!本教程也没有专门针对某个网站而编写,单纯的技术研究

目录

一、混淆还原

二、插桩还原

三、还原X-Bogus 


一、混淆还原

1.先跟栈,看看X-Bogus怎么生成的

12d8e09c851a4643aff9c0cf112ffb6e.png

6818f75f284441029a86e62ff30ba422.png

 2.使用v_jstools插件还原混淆,git地址: https://github.com/cilame/v_jstools

292ae4705fd54bcf8c0ae4b0fac74c1b.png

 3.替换JS,文件路径可以在桌面上创建一个,替换完成基本JS就能看了

3ddb1060cd974360a6156e738b1fecd8.png

29ea939c55fd476c840d2c194fd42cd2.png

 二、插桩还原

1.覆盖本地JS之后呢,栈变量名也变了,下断点

f01e9501900a4f8d9405dd384229f483.png

 2.刚开始没有生成X-Bogus,单步跟

db033341947e4542839893a82bb58579.png

 3.多跟几次发现A是跳转索引,O是加密结果,插桩两个for循环处,182与409

console.log(`索引: ${A}, 值:${JSON.stringify(O, function(key, value) {if (value == window) {return undefined} return value})}`);

ddcf833635bc44a08f33654ccacca6bc.png

 4.打印的日志也挺多的大概几万行,搜一下结果加密值

6a3d3423c39c4c8fa5a6853d0f53c5eb.png

 5.往上找日志,发现一处可疑的地方,通过两个值(具体多少个不知道先断点)生成的 "D"

b3c5457d24954cb495f364f941bc4130.png

 6.下断点,A索引如果是460就停住

aa10d78d0dd24350a21ee0c4a3c967b1.png

7.然后"X-Bogus"出现了,放开再看,之后就出现了一串类似md5,往上找日志是在索引134的时候生成的,下断点132(为什么132因为134已经生成了,看上一步怎么生成的)单步跟看看是什么东西

5ae763e5a8774001b396356498d374ed.png

a62b124f729b48169c3c4f38115ed20c.png

dbf71300fa6d4662b6922a90059db885.png

 8.断上之后,单走就能发现是md5加密了请求URL的路由,你以为这样就完了?还没有单步跟,之后就发现了重点将md5字符串转成了数组,都断点上

0c6d2aec24874894b97dcaece0c72599.png

bdd2296d736048dca5217f2ca412eb80.png

 9.最后本来想还原一下算法发现又断上132了进来一看好家伙又md5一次,套娃*1,现在数组也拿到了继续跟,头疼,最后还有一串字符串”d41d8cd98f00b204e9800998ecf8427e“不知道什么东西刷新发现不变,先凉着反正跟这套流程一样不打紧

let md5 = require("md5");
let Array = [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, null, null, null, null,
    null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 10, 11, 12, 13, 14, 15];

function md5_str_to_array(a) {
    let array = [];
    for (let idx = 0; idx < a.length;) {
        array.push(Array[a.charCodeAt(idx++)] << 4 | Array[a.charCodeAt(idx++)])
    }
    return array;
}

function encrypt(url_path) {
    return md5_str_to_array(md5(md5_str_to_array(md5(url_path))));
}

console.log(encrypt("device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=MS4wLjABAAAA6hGmDnaFyeR9iKX1hVsWK8JRimRzwi9ilHV824AmOHk&max_cursor=1670591754000&locate_query=false&show_live_replay_strategy=1&count=10&publish_video_strategy_type=2&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1920&screen_height=1080&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=105.0.0.0&browser_online=true&engine_name=Blink&engine_version=105.0.0.0&os_name=Windows&os_version=10&cpu_core_num=6&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7182114934540060200&msToken=ZwASt-8IFiF8HQ2Ku-2ZgzZq1IsLRHncgNG5k8Qosw-1N6GFPnQLR3KAh0p3eJCXIpPPGat4GaZ5l3nROYhExs7CWf6Jc1jkqXp0fTV_T6neCWqq-hBAAiZwsFvapg=="))

d52d90c3dcaa40c3a43b28b332349ebd.png

73848c3b15de41b48437126b9df31719.png

 10.继续断460这里数值出现了但是有一串乱码

55e14cae42734ca0a609f6e560db1dbf.png

 11. 乱码的生成也是用刚刚的数组计算而来断断点886

5a5a7ae34d8940c6b1132fe26c73f0d7.png

 12.之后就在这里生成了乱码,不知道什么鬼东西,怪丑的,ok了,接下来还断460030de7f08d7043768f93ea299bc298ff.png

 13.这一步主要是取值生成 X-Bogus了,问题来了之前的操作没用?白搞了?白搞就白搞吧.

cdf1fdc7db8b484d85ffddb23f5e4480.png

三、还原X-Bogus 

1.经过上面的分析得出由一串乱码、下标、字符串取值得到的X-Bogus,至于乱码先等会搞,先看看字符串计算且还原一下算法,找可疑的数值196397,一直往上找

d23b2a918a024ebea5b05bd1ccd3b491.png

ab36162750fc4ca7a49269a4704fbf62.png

 2.最终发现这里很可疑断点308,看看是什么东西演变的

f328ceb956a34e708701da3f96ce462a.png

 3.这里发现取乱码的字符串下标0

6f791531fd9b4566ba34ffed6ccaffd8.png

 4.这里进行了&运算也就是:(2 & 255) << 16 = 131072

35c9bff8efe447b38a200aecc9e40dce.png

 bfa659aaddb2428f9a5cfa859d3db1ae.png

 5.然后开始下一个取值计算: 131072 & 255 << 8

7d08cdfe4e1d4a289d8d723bc7cd79e0.png

6510139720234b16a59922f5a57b3e77.png

 333b52570d374a9dba2b1a4df99b25e1.png

6.基本上流程就是这样一个字符一个字符跟下去还原,最终就能得到纯算法了,当然你可以把计算流程打印出来这样就不用单步跟了 

6185c5ea1b9040738453ce1c7babd43e.png

7.好了看一下乱码,之前也有说过这里就提一下,这里拿了一个时间戳生成最后除1000,得到1672333537240/1000=1672333537.24

24822e8bfd1c408091866d314e3c7b73.png

8.最后调用了这个函数,返回的536919696值可以固定,之后慢慢跟吧不说了900b7c1357bc45ffad08d0e56ff6a541.png

b15e8ecaabf54232b483930eb12355e3.png

最后发现每460断为一组数据,也就是四个字符串可以分成

DFSz  swVu  06tA  NxXh  Skb-  Ul9W  X7nt

慢慢还原吧,还原一个就够了不像知乎有多个

。。。。。。

。。。。

。。

结束语

最后测试可用没问题,还原之后的纯算法大概也就80行吧,虽然不多但是费眼累人~

aHR0cHM6Ly9naXRodWIuY29tL0pheUNvb2w2L0dvb2RQZW9wbGVMaWJyYXJ5LmdpdA==

b3f7b5f88bb6440ca07bdcf2d01f1df0.png

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

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

相关文章

关于Vue中Diff算法详解

一、(Diff)是什么? diff 算法是一种通过同层的树节点进行比较的高效算法 1.1. 特点&#xff1a; 比较只会在同层级进行, 不会跨层级比较在diff比较的过程中&#xff0c;循环从两边向中间比较diff 算法的在很多场景下都有应用&#xff0c;在 vue 中&#xff0c;作用于虚拟 dom…

DAMA数据管理知识体系指南之数据治理

第3章 数据治理 3.1 简介 数据治理是对数据资产管理行使权力和控制的活动集合(规划、监控和执行&#xff09;。数据治理职能指导其他数据管理职能如何执行。数据治理是在高层次上执行数据管理制度。 3.2 概念和活动 有效的数据管理&#xff0c;特别是在数据治理方面&#…

2023最新前端面试题4(持续更新)

JavaScript 59、JS的几条基本规范 1、不要在同一行声明多个变量 2、请使用/&#xff01;来比较true/false或者数值 3、使用对象字面量替代new Array这种形式 4、不要使用全局变量 5、Switch语句必须带有default分支 6、函数不应该有时候有返回值&#xff0c;有时候没有返回值 …

如何写出有效的单元测试?

如何写出有效的单元测试&#xff1f; 目录&#xff1a;导读 什么是单元测试 为什么需要单元测试 什么是有效的单元测试 为什么有效的单元测试如此重要 如何写有效的单元测试 补充单元测试应该从哪里开始 可测试的设计 单元测试与重构 做不到TDD&#xff0c;可以做到测…

LaoCat带你认识容器与镜像(四【下】)

基础概念章节是告一段落了&#xff0c;不知道各位童鞋是否阅读的顺畅&#xff0c;欢迎各位童鞋踊跃的提出意见和看法并指正。 本章内容 Dockerfile基础命令详解。 本文实操全部基于Ubuntu 20.04 宿主机 > linux服务器本身 上节粗略介绍了Dockerfile相关命令&#xff0c;这节…

国电投-风机叶片开裂故障预警比赛(记录)

1 前言 1-1 简介 DataFountain平台举办的比赛&#xff0c;赛题&#xff1a;风机叶片开裂故障预警。以下是比赛链接:风机叶片开裂故障预警 Competitions - DataFountain 1-2 任务背景 SCADA是风场设备管理、监测、和控制的重要系统&#xff0c;通过实时收集风机运行的环境参数、…

oracle direct path read等待事件处理案例

一 问题描述 收到短信告警&#xff0c;提示direct path read(110)。 直接路径读取不过SGA缓存&#xff0c;直接从磁盘上读数据&#xff0c;每次查询都会产生大量的物理读&#xff0c;导致IO比较高&#xff0c;影响数据库性能。 二 排查思路 生成AWR报告及ASH报告&#xff0…

springboot 整合mybatis-plus的自动生成代码包含service和controller

版本信息springboot&#xff1a;<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.13.RELEASE</version></parent>mybatis相关依赖版本如下&#xff1a…

压缩包文件上传导致覆盖rce

制作恶意压缩包 tgao.jsp文件内容&#xff1a; <html> <body><%out.println("zip slip getshell.");%> </body> </html>编写python脚本将jsp文件内容内容压缩至DocSystem.war中&#xff0c;并指定name为../../DocSystem/tgao.jsp&am…

ElasticSearch - RestClient查询文档

目录 查询文档-快速入门 查询文档-match查询 查询文档-精确查询 查询文档-布尔查询 查询文档-排序和分页 查询文档-高亮显示 查询文档-快速入门 文档的查询基本步骤包括&#xff1a; (1)准备Request对象(2)准备请求参数&#xff0c;构建查询条件(3)发起请求&#xff0c;得…

OpenSSL下载安装教程

OpenSSL下载 &#xff08;加急&#xff09;下载地址&#xff1a;Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 首先&#xff0c;进入官网 Shining Light Productions - Home &#xff0c;可以看到如下界面&#xff1a; 这里演示用的版本是V1.1的版…

nodejs+vue考研信息查询系统vscode项目

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 2 第3章 系统分析 3 3.1 需求分析 3 3.2 系统可行性分析 4 3.2.1技术可行性&#xff1a;技术背景 4 3.2.2经…

2023蓝桥杯学习与刷题建议

前两天天给你们组了队&#xff0c;经过两天发现各位都有这样的问题&#xff1a; 不愿意交流。小组不会规划刷题计划。可能是因为没有人带头和具体刷题计划&#xff0c;所以都处于迷茫&#xff0c;不交流、不刷题。还有可能是大家都不认识&#xff0c;都比较羞涩。同时也有我个…

OSCP_VULHUB_DC: 2

文章目录前言信息收集Web账号密码爆破ssh登录绕过rbash限制git提权前言 kali攻击&#xff1a;192.168.132.139 目标主机&#xff1a;192.168.132.146 环境配置参照https://www.vulnhub.com/entry/dc-2,311/ 下载&#xff1a;https://download.vulnhub.com/dc/DC-2.zip 信息收…

开发第四天+第五天读书笔记

首先用C语言实现内存写入: 光是成功的让画面黑屏是不够的&#xff0c;还是要往画面上画点什么。首先修改naskfunc.nas。写成这样&#xff1a; ; naskfunc ; TAB4[FORMAT "WCOFF"] ; 创建对象文件的模式 [INSTRSET "i486p"] …

Linux进程间通信(基于管道通信)

目录 一、进程间通信 1.1 通信目的 1.2 通信发展 二、管道 2.1 管道的概念和分类 2.2 匿名管道 2.2.1 匿名管道&#xff08;基于父子血缘关系) 2.2.2 匿名管道单向性 2.2.3 匿名管道是内存级别文件 2.2.4 匿名管道指令实现 2.2.5 代码实现匿名管道&#xff08;pipe()…

一文讲清楚shell 中的变量是怎么回事

目录 变量和引用 一&#xff0c; 什么是变量 二&#xff0c; 根据数据类型分类 三&#xff0c; 根据作用域分类 1、环境变量 2、普通变量 四&#xff0c; 变量的定义 1、变量定义示例&#xff1a;变量名变量值 2、位置参数和预定义变量 五&#xff0c; shell中的引用 六&…

【GPLT 二阶题目集】L2-022 重排链表

输入格式&#xff1a; 每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数&#xff0c;即正整数N (≤10^5 )。结点的地址是5位非负整数&#xff0c;NULL地址用−1表示。 接下来有N行&#xff0c;每行格式为&#xff1a; Address Data Next 其中Addres…

深拷贝和浅拷贝对比

JavaScript存储引用数据&#xff08;对象&#xff09;都是存地址的&#xff0c;存放在堆内存中的对象&#xff0c;在栈内存中存的是一个指针&#xff0c;这个指针指向堆内存一个位置。再从堆内存中取得所需的数据。 深拷贝&#xff1a;对数据进行拷贝之后&#xff0c;修改拷贝之…

Python:从协议到抽象基类

本章话题是接口&#xff1a;鸭子类型代表特征动态协议&#xff1b; 使接口更明确、能验证实现是否副了规定的抽象基类ABC(Abstact Base Class).Python语言诞生15年后&#xff0c;Python2.6中才引入了抽象基类&#xff0c;抽象基类。对于java、C#类似的语言&#xff0c;会觉得鸭…