JS逆向:实战X瓜视频_signature参数破解

JS逆向:实战X瓜视频_signature参数破解

本文仅供学习交流使用,请勿用于商业用途或不正当行为

如果侵犯到贵公司的隐私或权益,请联系我立即删除

打开X瓜视频首页,F12,在XHR,我们根据通过分析响应能够找到对应的请求

JS逆向:实战X瓜视频_signature参数破解_第1张图片

定位到请求之后,我们去看一下请求需要的参数

JS逆向:实战X瓜视频_signature参数破解_第2张图片

很明显,头条系产品,加密参数都是_signature

全局搜索_signature

img

一下子就找到了

JS逆向:实战X瓜视频_signature参数破解_第3张图片

简单分析下代码:

_signature为a的值

而 a = (0,n(679).sign)(t);

可以理解为a = n(679).sign(t)

sign是n(679)这个对象下的方法

因此我们需要先摸清楚n是个啥,我们在这一行下断点,然后在前端页面向下滑动页面,就能暂停到断点处了

我们首先看下n(679).sign具体是啥

JS逆向:实战X瓜视频_signature参数破解_第4张图片

噢漏,跟进来了,又是一堆case

JS逆向:实战X瓜视频_signature参数破解_第5张图片

顺便解释下,这个vm我们可以理解为浏览器的虚拟机(引擎),chrome是基于v8引擎的,js代码都是在引擎里执行的。

现在这个VM里面呈现的是解密后的代码,这个解释可能不太准确,但可以暂时这么简单理解。

既然这里呈现的是解密后的代码,那解密前的代码在哪呢?我们待会儿分析。

接着我们看看n是什么?

JS逆向:实战X瓜视频_signature参数破解_第6张图片

能看到n其实是u函数,我们点击进入u函数看看

JS逆向:实战X瓜视频_signature参数破解_第7张图片

因为刚才的n(679)其实是u(679)

那u函数的参数r的值肯定就是679了

if (n[r]) 如果成立,就返回n[r].exports,那这里的n又是个啥?

我们在函数u上面能看到定义了n = {} 空对象,那这里应该是空的呀,而这里又判断了r是否是n里面的值,那n里面的值让我非常好奇

我们在这里打上断点,F8跳到这个断点

JS逆向:实战X瓜视频_signature参数破解_第8张图片

控制台输出一下,可以看到这个n是一个大数组

我们看看n数组里面的第679个元素是啥

JS逆向:实战X瓜视频_signature参数破解_第9张图片

里面有sign方法,所以我们只要能调用u函数,就能调用u函数下面的sign函数了。

那么问题又来了?u函数和n函数是怎么样的调用关系?为啥在外面调用的是n(679),而不是调用u(679)?

这怎么搞?好像没思路了

这样,我们看看u函数所在的文件其他的代码吧

由于js代码一般比较长,所以我习惯把代码复制到webstorm里面ctrl + shift + - 整体折叠一下看下代码的整体结构

JS逆向:实战X瓜视频_signature参数破解_第10张图片

这样是不是清晰多了!

这个文件整体是一个自执行函数!function(){}();

传入的参数是[]

函数体内先定义了几个函数r、t、u

接着就是这句

var c = window.webpackJsonp = window.webpackJsonp || []

判断window对象上是否有webpackJsonp,我们看看webpackJsonp的值

JS逆向:实战X瓜视频_signature参数破解_第11张图片

JS逆向:实战X瓜视频_signature参数破解_第12张图片

可以看到webpackJsonp里面有一个大数组,那它是哪里来的呢?

既然它是绑定在windows全局对象上的,那我们搜索一下,看看在别的地方是否能找到定义它的地方

JS逆向:实战X瓜视频_signature参数破解_第13张图片

我们看到index.xxxxx.chunk.js这个文件里第一行对webpackJsonp进行了push操作,代码太长,复制出来收缩一下看看整体结构

妈呀15W+行代码,电脑太垃圾卡得一逼…

第二个参数是个大数组,里面全部都是定义的函数

JS逆向:实战X瓜视频_signature参数破解_第14张图片

明白了吧,webpackJsonp的内容就是这里push进去的

那我们找到并进入第679个函数

JS逆向:实战X瓜视频_signature参数破解_第15张图片

嗯,这里就是vm解密前的代码了,刚才的疑问在这里也就摸清楚了。

接下来就是扣代码了,这里直接放我扣下来的代码,小伙伴们自行体会

JS逆向:实战X瓜视频_signature参数破解_第16张图片

执行后报错

JS逆向:实战X瓜视频_signature参数破解_第17张图片

那我们定义一下

img

再运行,没有报错了

JS逆向:实战X瓜视频_signature参数破解_第18张图片

测试下结果是否正确

JS逆向:实战X瓜视频_signature参数破解_第19张图片

“无效的referer”,那我们在headers里加上referer,再试

JS逆向:实战X瓜视频_signature参数破解_第20张图片

纳尼?为毛结果不正确?

还是直接说结论吧,这里其实有一个大坑,首页源码里面有个tac,和头条一样,需要加上它才能生成正确的加密值

img

我们加上tac,再运行

JS逆向:实战X瓜视频_signature参数破解_第21张图片

再测试一下,成功拿到数据了

JS逆向:实战X瓜视频_signature参数破解_第22张图片

ok,今天先到这里咯~

文章有错误或者有疑问可以随时联系我哦

公众号:一生向风

你可能感兴趣的:(JS逆向,python,js)