js破解之七麦#############妄为写代码

本来今天我就在想,要不要把我最近研究的三个js分享出来,还没做决定的情况下,好巧不巧,一个小伙伴私信我,所以就有了这篇文章。

目标网站:https://www.qimai.cn/rank

浏览器键入地址,分析发现我们想要的数据来源于

查看request,发现关键参数analysis(ps:这里先抛去cookie影响不谈,即使存在cookie验证的情况,也应该先把url构造完成)国际惯例,全局搜索analysis,发现无果,此时就应该考虑xhr断点方式进行调试

添加xhr断点,刷新网页,开始debugger,格式化js,分析调用栈

一般情况下,根据xhr打的断点都会涉及到XMLHTTPRequest操作,都要向上查找两到三个调用栈。当然,这里我们还是要观察url地址的变化

发现目标调用栈,打上断点准备调试,同时为后续几个调用栈的入口,同时打上断点,刷新网页

断在了get函数,此时可以发现不管是url:a,还是params:n,都没有目标参数,继续执行到下一个断点

t为函数,e为r对象,继续跟进t函数

此时看到这里,应该首先对interceptors单词敏感,以mitmproxy和logging模块的添加句柄方式类比进行理解,此处要找的是拦截器的实现逻辑,首先鼠标覆于this.interceptors.request上

点开两个句柄,找到句柄的functionlocation,点击进去

里面就是拦截器的具体实现了,打上断点,刷新网页,继续调试

单步执行到最后,发现r就是我们所需要的analysis值,鼠标依次覆于r的实现上,翻译下来就是r=window["Object"](f[Ja])(window["Object"](f[Me])(m, b)),也就是r=f[Ja](f[Me](m, b))

先看m的实现,变化的参数也就这个e

接着看e的实现,这个地方比较简单,取了一下cookie:synct和syncd的值,然后和时间做了点操作,我就不细说了(实践发现e的值不加修改,也能获取数据)

 

 

 

 此时e的值就拿到了,而b的值为固定值"00000008d78d46a",接下来就要开始分析那两个函数了,根据执行关系,首先分析f[Me]函数,在函数实现内部打上断点

把这个C函数的实现,拷贝到我们的node代码

并根据调试情况加以修改

在调试中找到m函数的实现

 

i也是个函数,只不过是个固定值,咱们就简写了

至此,f[Me]函数分析完毕。开始分析f[Ja]函数,老规矩,进去函数实现内部,打上断点分析

m函数还是上面同一个m函数,就不提了,接下来找这个N()的实现

三目运算符,自己判断执行逻辑

接下来先看这个e.from

去看s函数的实现

同样,三目运算符,自己判断执行哪个逻辑

这里执行f函数,找到f函数

g函数自己去看,返回的是根据参数n,返回e的length

o函数自己去看,根据r的值返回固定长度的Unit8Array

接下来,往变量t里面写数据,看这个t.write函数的实现

找到k函数的实现

发现返回的是C函数的结果

此时注意C函数,可不是最开始的C函数

看下W函数的定义,比较简单

再看下K函数的定义,也简单

复制到node代码中

至此t.write函数处理完毕,再回到调试环境

 

至此e.from函数分析完毕,开始进行n.toString("base64")

找到n.toString的实现

还是三目运算符,手动判断

找到这个y函数的实现

找到M函数的实现

找到Q.fromByteArray函数的实现

复制代码到node中

 

再看下这个l是什么

 

 

 

现在应该差不多了,我们执行下看看

 

回调试环境看看,少了这个a函数

复制到node上

此时发现a函数需要用到l变量,把l提取出来

再次执行下试试

analysis变量已成功打印,粘贴到浏览器实验一下

成功得到数据,所以这里也就不考虑cookie验证的情况了。至此,此次七麦js破解分析完毕,我一开始之所以不想写的原因就是,过程函数调用层次过深,虽说不难,但是叙述起来较为麻烦。嗯,第一次有小伙伴私信我,所以就写一下吧,就这样。

最后,之所以研究七麦这个网站也是看了冷月的博客文章,随后又看了Lateautumn_Lin的简书文章,感谢他们,以及Lateautumn_Lin本人对我的私下解惑,谢谢。

附:

    冷月博客:https://lengyue.me/index.php/2018/10/15/qimai/

    Lateautumn_Lin简书:https://www.jianshu.com/p/24fada16fc3c

再次感谢他们的技术分享。

(完)

原文地址:https://www.cnblogs.com/jscs/p/13633768.html