当前位置: 首页 > ops >正文

Js逆向 拼夕夕anti_content

前言

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者删除。

网址:aHR0cHM6Ly93d3cucGluZHVvZHVvLmNvbS9ob21lL21lZGljYWwv

目标:参数anti_content

1.抓包分析

接口:query_tf_goods_info

在这里插入图片描述

2.逆向分析

直接搜索anti_content进行定位,打上断点,然后单步调试

在这里插入图片描述

发现 t.sent就是我们需要加密参数,已经生成了,所以大概率是前面Object(x.a)()生成的

在这里插入图片描述

Object(x.a)()跟进去发现调了m方法,m方法调的是v方法,v方法里面还是一个控制流,单步调试会发现anti_content r.messagePackSync()里面生成了

在这里插入图片描述

然后看一下r是哪里来的,找一下同级作用域下定义r的位置,

在这里插入图片描述

发现是r = new({serverTime:e}),其中e是十位的时间戳,接下来找到i的定义位置,

在这里插入图片描述

这个明显是webpack打包的模块,可以打上断点然后进入n里面看看

在这里插入图片描述

那么大致的调用流程已经清楚了,

1.  i = n("febz")
2.  r = new({serverTime:e})
3.	anti_content_Promise = r.messagePackSync()  

r.messagePackSync()返回的是一个Promise对象,里面包含了我们需要的anti_content,

后面发现直接调用r.messagePack生成直接就是anti_content,就不用异步改同步了,可以直接拿到结果。

接下来就是扣代码环节

3.扣代码

Js逆向案例 Scrape Spa2(Webpack自吐)

Js逆向之Webpack原理及如何扣代码

对Webpack不熟悉的可以参考这两篇文章

把加载器拿下来,找个地方先放着
在这里插入图片描述
接下来我们进行模块自吐

注意传入的r,要和我们需要调用的模块保持一致 。

在加载器第一行打上条件断点

aaa[r] = e[r],false

在这里插入图片描述
然后在 控制台输入aaa = {} n = {},目的是定义一个空对象存放吐出的模块 和清空已缓存的模块

然后释放断点
在这里插入图片描述

此时aaa中获取到了所有我们需要模块,然后在控制台输入下面的代码,将对象合并成字符串,

xxx = Object.entries(aaa).map(([key, value]) => `"${key}":${value}`).join(",\r\n")
copy(xxx)

然后进行Js格式化,然后找个地方先放着

JS在线格式化

在这里插入图片描述

然后回到我们之前扣下来的加载器,定义一个全局变量,然后导出加载器,随后传入模块

get_anticontent = function (){i = xu.loader("fbeZ")xx = i({serverTime:Math.floor(Date.now()/1000)})anticontent = xx.messagePack()console.log("长度:",xx.messagePack().length)return anticontent}

然后在浏览器环境下调试一下

在这里插入图片描述

Ok,没问题,接下就是在Node环境下运行,开始补环境

4.补环境

注意一下常见的Node环境检测点即可,然后挂上代理开补。

借用一下大佬封装好的代理即可

function setProxyArr(proxyObjArr) {for (let i = 0; i < proxyObjArr.length; i++) {const objName = proxyObjArr[i]; const handler = {get(target, property, receiver) {console.log("方法:", "get", "对象:", objName, "属性:", property, "属性类型:", typeof property, "属性值:", target[property], "属性值类型:", typeof target[property]);return target[property];}};// 检查并初始化对象let targetObject = global[objName] || {};  // 在 Node.js 环境中使用 globalglobal[objName] = new Proxy(targetObject, handler);  // 在 Node.js 中使用 global}
}
setProxyArr(['window', 'document','location','screen','history','navigator'])

5.成功截图

在这里插入图片描述

http://www.xdnf.cn/news/18487.html

相关文章:

  • 【读代码】SQLBot:开源自然语言转SQL智能助手原理与实践
  • 怎样避免游戏检测到云手机?
  • 深入浅出:图解 glibc —— 系统与应用的沉默基石
  • 【知识】Elsevier论文接收后的后续流程
  • 可预约体验 | 一句话生成全栈应用,网易CodeWave智能开发能力全新升级!
  • TDengine IDMP 应用场景:工业锅炉监控
  • 资深产品经理个人能力提升方向:如何系统化进阶与考证规划
  • Maven快速入门
  • Day26 树的层序遍历 哈希表 排序算法 内核链表
  • 数据库服务语句应用
  • 【机器学习深度学习】多模态典型任务与应用全景
  • 深入理解Java多线程:状态、安全、同步与通信
  • Trae 编辑器在 Python 环境缺少 Pylance,怎么解决
  • 服务器支持IPv6吗?如何让服务器支持IPv6
  • 爬楼梯变式
  • Unreal Engine ATriggerVolume
  • [TG开发]部署机器人
  • Unreal Engine AActor
  • 【typenum】 22 类型级别二进制对数运算(Logarithm2)
  • 【Java SE】深入理解继承与多态
  • openstack的novnc兼容问题
  • GitCode 疑难问题诊疗:全面指南与解决方案
  • 94. 城市间货物运输 I, Bellman_ford 算法, Bellman_ford 队列优化算法
  • 智慧工厂烟雾检测:全场景覆盖与精准防控
  • Java基础 8.22
  • 2-3.Python 编码基础 - 类型检测与类型转换
  • 集成电路学习:什么是SVM支持向量机
  • AI 大模型 “进化史”:从参数竞赛到场景落地,技术突破藏着哪些逻辑?
  • Unreal Engine UFloatingPawnMovement
  • 【ECharts】2. ECharts 性能优化