抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版

抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版

源码获取

已放在github上,抖音部分已全面更新为a_bogus算法。
除了抖音还包括快手,小红书,哔哩哔哩,微博,京东,淘宝等平台,旨在帮助大家学习使用。
链接: https://github.com/ShilongLee/Crawler

接口及参数

  1. 打开网页版抖音,右键视频进入详情页。
  2. F12打开控制台筛选detail,然后刷新网页,找到请求。
  3. 可以发现我们本次的参数目标a_bogus。a_bogus有时长度为168有时为172,都可用。
  4. msToken在cookie中可以获得msToken,过期时间为7天。
  5. screen_width、screen_height对应cookie中的dy_swidth、dy_sheight。
  6. cpu_core_num、device_memory对应cookie中的device_web_cpu_core、device_web_memory_size。
  7. verifyFp、fp对应cookie中的s_v_web_id。
  8. webid可以从doc中获得user_unique_id。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

找到加密代码

  • 找到入口

    首先看一下接口的加载器,也就是发送请求的调用栈,挨个查看之后不难发现,加密的入口应该在这两处,由于栈中的调用顺序是从下往上,所以我们先看下面那个入口。

    在这里插入图片描述

  • 查看参数

    首先我们查看入口参数,不难发现arguments[1]是请求的url,那么我们可以根据url包含detail去打一个断点,然后一步一步进行调试,看看发生了什么。

    入口参数

  • 断点调试

    单步步入之后,开始了加密参数的流程,我们发现这里的代码明显是混淆过的,上下翻动后,我们发现这是jsvmp文件。单步跳出后,直接到了请求流程,说明在这里面已经完成了a_bogus的加密,所以我们可以断定,加密参数是在调用栈中另一个地方调用的。所以我们再查看一下调用栈中的另一个入口。

### 关于 A_Bogus 算法的实现详解 A_Bogus 类似于 X-Bogus,是一种用于保护 API 请求安全性的机制,在某些情况下可能被用来验证请求的有效性和合法性。以下是关于此类算法的一些详细信息以及其实现方式: #### 1. **算法背景** A_Bogus 的核心目的是为了防止未授权访问和恶意调用接口的行为。它通常基于特定的加密或哈希计算得出,其生成过程涉及多个变量,例如时间戳、设备指纹、随机数以及其他动态参数[^1]。 #### 2. **主要组成部分** - **字节码解析** 字节码 `_0x2232d0` 是整个算法的核心部分之一,其中包含了具体的逻辑操作序列。这些字节码会被解释器逐步执行并转化为实际的操作指令[^1]。 - **关键函数分析** 函数 `_0x1218ef` 被频繁调用以完成条件判断与循环迭代的任务。该函数内部存在大量的分支结构 (if/else),这使得手动跟踪变得困难。因此,采用插桩技术可以有效提取出隐藏的逻辑链条。 - **重要中间变量** 变量 `_0x3f0f70` 和 `_0x3eb330` 承载了阶段性成果的数据传递作用;前者是从数组 `_0x2232d0` 提取出的一个值并通过位运算进一步加工而成的新数值,而后者则决定了最终走向哪条路径继续运行下去。 #### 3. **逆向工程技巧** 由于直接静态反编译难以获得清晰的结果,推荐采取如下策略来进行深入研究: - 使用调试工具设置断点观察实时变化情况; - 对可疑区域实施 Hook 或者 Substitution 方法获取更详尽的信息流图谱; - 结合已知模式匹配推测未知片段含义从而还原整体架构设计思路[^2]。 #### 示例代码展示 下面给出一段简化版伪代码表示如何模拟构建类似的签名串: ```javascript function generateABogus(params) { let bytecode = initializeBytecode(); // 初始化字节码 let state = params.timestamp ^ params.random; // 初始状态 for(let i=0;i<bytecode.length;i++) { const instruction = parseInstruction(bytecode[i]); // 解析每一步指令 if(instruction.type === 'ADD') { state += parseInt(instruction.value); } else if(instruction.type === 'SUBTRACT') { state -= parseInt(instruction.value); } // 更复杂的变换... } return finalize(state); // 完成最后处理返回结果 } ``` 此仅为概念演示,并不代表真实项目中的具体做法,请勿尝试将其应用于非法场景之中[^2]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值