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'])