a_bogus逆向分析

a_bogus逆向分析

  • 前言
  • log插桩
  • 步骤一分析
  • 步骤二分析

前言

最新版本的a_bogus生成步骤大致分为以下4步:
步骤操作
根据请求的params、data、useragent以及环境参数生成四个数组
通过一些规则把步骤一生成的四个数组组合成一个大数组
通过一些随机数生成一个乱码字符串1,根据步骤二生成的大数组生成一个乱码字符串2,把乱码字符串1和乱码字符串2拼接成一个字符串并再次进行处理生成最终的乱码字符串。
根据最终的乱码字符串生成a_bogus

在这里插入图片描述

log插桩

添加合适的日志断点a_bogus的逆向基本上就成功一半了,a_bogus的逆向大部分依赖日志分析,只有步骤三需要动态调试,所以本文的重点会放在打日志断点上,具体的分析逻辑太过繁琐就不细说了。首先打开f12,在页面进行点赞操作,然后找到点赞请求查看调用堆栈,如下图所示:
在这里插入图片描述
点进标红的位置后来到下图位置,往前翻看代码发现这是一个循环,碰到循环二话不说,先在下图标示位置添加日志断点"fucn:",s,"content:",b,"args:",u,"result:",l,然后清空控制台,再次点击点赞按钮。
在这里插入图片描述
找到刚刚点赞的请求,复制a_bogus的值在控制台搜索。
在这里插入图片描述
可以看到已经定位到a_bogus生成的日志,红框里面就是生成a_bogus的方法以及传入的参数,args就是l = s.apply(b, u)里面的u,我们可以根据u的值打条件断点,这样做的目的是为了减少一些不必要的日志,我们先回到上面打日志断点的位置打上条件断点typeof u == "object" && u[0]==0 && u[1]==1 && u[3].indexOf("device_platform=webapp")==0 && u[4].indexOf("aweme_id=")==0 && u[5].indexOf("Mozilla/5.0")==0
在这里插入图片描述
然后回到控制台双击生成a_bogus的方法,我们会发现跳到了另外一个循环里面,往上翻看代码,类似的循环还有很多。
在这里插入图片描述
要把所有的apply方法都打上断点有两个方法,第一个方法比较麻烦,就是在bdms.js源码页面搜索“apply”关键字,然后把所有循环里面的apply都打上日志断点,第二个方法是把bdms.js下载到本地,然后修改源码,在头部添加hook Function.prototype.apply,然后

// 保存原始的 Function.prototype.apply 方法
const originalApply = Function.prototype.apply;// 修改 Function.prototype.apply 方法
Function.prototype.apply = function (thisArg, args) {// 调用原始的 apply 方法来执行函数const result = originalApply.call(this, thisArg, args);// 输出结果if (window.$_islog) {try {console.log("Function:", this, "\n 参数:", args, "\n结果:", JSON.stringify(result));} catch (e) {console.log("Function:", this, "\n 参数:", args, "\n结果:", result);}}// 返回结果return result;
};

第一个方法虽然麻烦,但是不会出什么问题,第二个方法必须要添加一个开关,在前面条件断点的位置的前一行以下代码,

if(typeof u == "object" && u[0]==0 && u[1]==1 && u[3].indexOf("device_platform=webapp")==0 && u[4].indexOf("aweme_id=")==0 && u[5].indexOf("Mozilla/5.0")==0
){window.$_islog=true
}

在条件断点位置的下一行添加以下代码,

if(window.$_islog=false){window.$_islog=false
}

这样就能过滤掉没用的日志,否则日志太多会把内存撑爆。
还有一些涉及位运算的关键位置也要打上日志断点,这个没有快捷方法,只能手动找出来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上截图只是其中几处,还有一些我就不一一列出来了,鉴于这种情况,我建议使用第一种方法打断点,替换js文件省不了多少事,可能还会出现一些问题。打上这些断点后就可以进行前期的分析了,前期分析完了之后就需要在循环的开头处打断日志断点了,这个断点日志是最多的,所以要放在最后打,如果一开始就打上整个日志会非常的混乱,
在这里插入图片描述
断点内容:"索引m", m,"索引r", r, "值p: ", JSON.stringify(p, function(key, value) {if (value == window) {return undefined} return value}), "值v: ", JSON.stringify(v, function(key, value) {if (value == window) {return undefined} return value}), "值l: ", JSON.stringify(l, function(key, value) {if (value == window) {return undefined} return value})

步骤一分析

在还原第一步代码的时候会发现一个数组, [1937774191, 1226093241,388252375,3666478592,2842636476,372324522,3817729613,2969243214]
数组的内容是固定的,随便copy一个数字百度一下就会发现这是SM3密码杂凑算法,params,data都是经过两次SM3加密后生成一个数组,useragent是先转成乱码,乱码经过base64加密(这里不是标准的base64,key改了),把base64解密结果进行SM3加密生成数组。环境参数就是1920|919|1920|1040|0|0|0|0|1920|1040|1920|1080|1920|919|24|24|Win32,这是直接是遍历每个字符转为Unicode编码值,结果放入数组。

步骤二分析

第二步是最麻烦的,params、data、useragent生成的数组都只挑选了几个元素出来,再通过两个时间戳、aid(6383)、6241等进行一些位运算,最终生成一个44位的数组,这一步需要动态调试。44位的数组和环境参数数组拼接成一个大数组,大数组的最后一个元素是44位数组的1-43位跟44进行^运算生成的。

第三步第四步比较简单,通过日志就能还原出来。

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

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

相关文章

如何使用Go语言进行基准测试(benchmark)?

文章目录 一、基准测试的基本概念二、编写基准测试函数三、运行基准测试四、优化代码性能五、注意事项总结 在Go语言中,基准测试(benchmark)是一种评估代码性能的有效方式。通过基准测试,我们可以测量代码执行的时间、内存使用情况…

【MATLAB画图】如何绘制图像坐标系

首先我们需要图像坐标轴的原点在左上角: set(gca,ydir,reverse,xaxislocation,top); 然后我们需要坐标轴上加上箭头 quiver(0, 0, 0, 520); % 在(x1, y1)处绘制一个箭头,其方向和长度由(dx, dy)确定 quiver(0, 0, 700, 0); % 在(x1, y1)处绘制一个箭头…

【Docker第一课】docker的基本命令和试启动容器(详细图解)

目录 知识梗概 docker的初步了解 了解docker常用命令 试开启容器(这里演示nginx、python3和mysql) 1、nginx容器的启动 2、python3容器的启动 docker的作用 虚拟机与容器的区别 写在前面: 本专栏你将了解docker一些入门知识&#xff…

计算机英文论文常见错误写作习惯3

目录 第一部分 Numbers and Equations ‘such as’ and ‘etc.’ 第二部分 第一部分 Numbers and Equations 两个非常常见的错误是关于阿拉伯数字和方程式的表示。中国作家通常写阿拉伯数字,而不是拼出单词。然而,使用阿拉伯数字本身并不是一个错误…

若依集成seata分布式事务(AT模式)并以nacos作为配置中心和注册中心(含踩坑)

一、序言 由于使用的是若依的框架,在若依的官网也有说明seata的使用方法,但是自己在写demo的时候,是想结合项目来实现demo,不过seata在本地的部署是参考了seata的官网和若依的官网对seata的使用 以及博客:微服务项目中…

礼赞劳动节,致敬劳动者。节日随想:疾笔耕耘也是一种劳动方式。

马克思也快诞辰了206年了,恩格斯领导的第二国际通过的决议节日也迎来了134岁的生日了,我也继续在劳动的路上。 五月是值得纪念的日子,作为一名无上光荣的分子,无比仰慕崇拜的两位先驱前辈大胡子,其一 生于斯&#xff0…

(学习日记)2024.05.08:UCOSIII第六十二节:常用的结构体(os.h文件)第一部分

之前的章节都是针对某个或某些知识点进行的专项讲解,重点在功能和代码解释。 回到最初开始学μC/OS-III系统时,当时就定下了一个目标,不仅要读懂,还要读透,改造成更适合中国宝宝体质的使用方式。在学完野火的教程后&a…

blender(布兰德)下载安装-windows系统安装

1.简单介绍 这些介绍都是一些百科或官网提供的内容,直接搜索对应的信息后即可看到。Blender(布兰德)是一款永久开源免费的3D创建套件。支持整个3D创作流程:建模、雕刻、骨骼装配、动画、模拟、实时渲染、合成和运动跟踪&#xff…

Java Maven 编译资源文件拷贝错误 dirCompressed.zip failed with MalformedInputException:

完整的错误信息为: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.3.1:resources (default-resources) on project core-java-io: filtering C:\WorkDir\Repository\iSharkfly-Docs\java-tutorials\core-java-modules\core-ja…

Microsoft.NET 框架程序设计 —— 共享程序集

文件版本是一个很难解决的问题。实际上,如果仅仅在一个文件中将其某一位从0改变到1、或者从1改变到0,我们便不能绝对保证使用原来文件的代码和它使用新版文件时的行为一样。这是因为许多应用程序都会有意或者无意地引入bug。如果一个文件的后续版本修复了一个bug,应用程序便…

第12章 软件测试基础(第一部分)概念、质量保证、测试用例、测试执行过程

一、软件测试 (一)定义 动态验证计算机程序对有限的测试用例集是否可产生期望的结果的过程。测试计划是描述了要进行的测试活动的范围、方法、资源和进度的文档。编写测试计划目的:使测试工作顺利进行、使项目参与人员沟通更舒畅、使测试工…

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习六

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…

用FPGA+DAC输出“心”形波

1.前言 之前在做信号处理的时候整了一下活,用FPGADAC(数模转换器),输出了一个爱心形状的波形,今天整理资料的时候偶然发现了他,现在把他分享出来。当时将DAC的输出接在示波器上显示如下图所示: …

雅思备考经验(个人向)

IELTS备考经验(个人向) 备考时长约1个月, 首考6.5(6), 虽然没考到小分6.5, 我也接受了, 过段时间再考吧. 机考or纸笔 雅思有机考也有传统的纸笔考试形式, 个人更推荐机考, 原因如下: 机考口语和笔试一般都在同一天, 而纸笔的口语和笔试一般不在同一天, 有时候可能会差一个…

工业三废数据集(工业烟粉尘排放量、工业二氧化硫排放量、工业废水排放量)2006-2021年

01、数据介绍 工业三废是指工业生产过程中排出的废气、废水和废渣 工业二氧化硫排放量指企业在燃料燃烧和生产工艺过程中排入大气的二氧化硫数量。 工业烟粉尘排放量是指企业在生产工艺过程中排放的烟尘和粉尘等颗粒物重量。 工业废水排放量是指企业在生产过程中产生的废水…

GEE必须会教程—植被覆盖度(FVC)计算(代码分享)

植被覆盖度(FVC)的计算是遥感上非常重要的一个研究领域,因事务繁忙,今天小编先带来FVC的全文代码,给大家试试,后期会出一期专栏进行代码的详细介绍: 今天福利满满,直接上代码&#…

信息技术内涵及意义

一、信息技术及其演进趋势 (一)信息技术概况概念 信息技术(Information Technology,IT)指“应用在信息加工和处理中的科学、技术与工程的训练方法与管理技巧;上述方法和技巧的应用;计算机及其…

【氮化镓】GaN器件在航天器高可靠正向转换器中应用

文章是发表在《IEEE Journal of Emerging and Selected Topics in Power Electronics》2022年10月第10卷第5期上的一篇关于GaN(氮化镓)器件在航天器高可靠性正向转换器中应用的研究。文章的作者是匹兹堡大学电气与计算机工程系的Aidan Phillips, Thomas Cook和Brandon M. Gra…

【C语言视角】数据结构之~二叉树

前言:总所周知~数据结构的二叉树对于初学者来说是一个十分难理解的知识点。接下来,请阅读本人对二叉树拙劣的理解~ 目录 1.二叉树概念及结构 和性质 二叉树的结构 二叉树的存储结构 2.二叉树顺序结构 3.二叉树链式结构的实现 二叉树层序遍历 1.二叉树…

Flask路由的使用

Flask 是一个轻量级的 Python Web 框架,其简洁的设计使得构建 Web 应用变得轻而易举。其中,路由是 Flask 中至关重要的一部分,它定义了 URL 与视图函数之间的映射关系,决定了用户请求的处理方式。在本文中,我们将深入探…