JS逆向 | 练手吗?头秃的那种。

咸鱼又来练手了,需求在这:

JS逆向 | 练手吗?头秃的那种。_第1张图片

想想有点激动:

JS逆向 | 练手吗?头秃的那种。_第2张图片

分析请求

用浏览器抓一波登陆包:

JS逆向 | 练手吗?头秃的那种。_第3张图片

可以看到有 _abr_beibeitoken 两个加密参数。

我们再找找发现beibeitoken是上一个请求返回的:

JS逆向 | 练手吗?头秃的那种。_第4张图片

好像难度一下减少了一半。

JS逆向 | 练手吗?头秃的那种。_第5张图片

定位加密位置

还是老套路,搜就完事了:

JS逆向 | 练手吗?头秃的那种。_第6张图片

通过关键字就找到一个相关文件,先进去看看。

640?wx_fmt=jpeg

先打上断点,重新登录一下,成功进入断点说明位置十有八九是找到了,F11进去看看里面的加密逻辑是什么样的。

JS逆向 | 练手吗?头秃的那种。_第7张图片

看上去逻辑还蛮简单的,就是先这样再那样然后拼接在一起返回回来,完事儿~2_06.png

分析加密

我们一个个跟进去研究下:

JS逆向 | 练手吗?头秃的那种。_第8张图片

u,d,a,e,s这几个加密都可以通过上图的方法追踪到对应的加密。

这里我们主要研究fm的加密逻辑。

先看看f的加密逻辑:

 
   

1var f = d.length ? (0,l["default"])(d.join("&")) : ""

这里跟进去看看l["default"]是什么:

640?wx_fmt=jpeg

这里的e是初始化加密算法,我们再跟进去看看:

640?wx_fmt=jpeg

JS逆向 | 练手吗?头秃的那种。_第9张图片

看到这里我已经不怎么想扣代码了,这么多乱七八糟的什么东西,要是真抠出来估计头发要掉一半。

JS逆向 | 练手吗?头秃的那种。_第10张图片

而且这个代码看着也不像自写的算法,估计也是套的通用的那几种算法,所以我开始翻之前扣过的代码,果然让我找到了:

JS逆向 | 练手吗?头秃的那种。_第11张图片

上面的代码是不是长得有点像,为了验证这个想法我把js里关于加密的代码扣下来look look

JS逆向 | 练手吗?头秃的那种。_第12张图片

不得不说好的编辑器可以让你事半功倍,看到图中划线的地方这个参数的加密方法就一目了然了。

我们可以直接把它改成Python实现:

 
    

from hashlib import md5def md5value(s): a = md5(s.encode()).hexdigest() return a

JS逆向 | 练手吗?头秃的那种。_第13张图片

接下来继续分析m的加密方法:

 
   

1m = (0,c["default"])(g, "ytU7vwqIx2UXQNsi");

有了上面的铺垫,我们继续追进去分析一波:

640?wx_fmt=jpeg



接下里就是编辑器表演的时候了


JS逆向 | 练手吗?头秃的那种。_第14张图片

好了,到这里就破案了,接下来你可以用Python实现也可以直接使用Node的CryptoJS加密实现。

JS逆向 | 练手吗?头秃的那种。_第15张图片

下次练(tou)手(tu)再见~



推荐阅读:


人必有痴,而后有成

640?wx_fmt=jpeg

你可能感兴趣的:(JS逆向 | 练手吗?头秃的那种。)