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

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.dtcms.com/a/347368.html

相关文章:

  • 深入解析Spring Boot自动配置原理:简化开发的魔法引擎
  • Java基础第2天总结
  • 青少年机器人技术(四级)等级考试试卷-实操题(2021年12月)
  • 互联网大厂Java面试实战:核心技术栈与场景化提问解析(含Spring Boot、微服务、测试框架等)
  • Java 遗传算法在中药药对挖掘中的深度应用与优化策略
  • 雨雾天气漏检率骤降80%!陌讯多模态车牌识别方案实战解析
  • Redis--day10--黑马点评--秒杀优化消息队列
  • 【JavaEE】多线程 -- JUC常见类和线程安全的集合类
  • 什么猫粮好?2025最新猫粮排名合集
  • 深度解析Bitmap、RoaringBitmap 的原理和区别
  • MySql知识梳理之DDL语句
  • TypeScript 类型系统入门:从概念到实战
  • 从零开始学习JavaWeb-16
  • 阿德莱德多模态大模型导航能力挑战赛!NavBench:多模态大语言模型在具身导航中的能力探索
  • Mysql InnoDB 底层架构设计、功能、原理、源码系列合集【六、架构全景图与最佳实践】
  • 新能源汽车热管理仿真:蒙特卡洛助力神经网络训练
  • android studio配置 build
  • XCVU13P-2FHGB2104E Xilinx(AMD)Virtex UltraScale+ FPGA
  • 力扣热题之多维动态规划
  • [2025CVPR-目标检测方向]学习增量对象检测的内生注意力
  • Redis(18)Redis的键空间通知机制是如何工作的?
  • LangChain4j中集成Redis向量数据库实现Rag
  • 设计模式详解
  • 服务器支持IPv6吗?如何让服务器支持IPv6
  • 疏老师-python训练营-Day54Inception网络及其思考
  • 电阻的标称阻值
  • Python中可以使用中文命名变量、函数、类和方法吗?详细示例与解析
  • Java集合(Collection、Map、转换)
  • JavaScript性能优化实战:从瓶颈识别到极致体验
  • 进阶版蛋白互作研究方法:构建 “体内 + 体外 + 结构 + 功能” 多维度论证体系