JS逆向:猿人学爬虫比赛第五题详细题解(上)

实战地址

http://match.yuanrenxue.com/match/5

  

抓包分析

地址栏输入 地址,按下F12并回车,发现数据接口在这里:

按照常规,康康加密参数及cookie字段:

加密参数是 m 和 f, 看起来像 时间戳。

cookie中包含了 m 和 RM4hZBv0dDon443M 字段,多次翻页后发现 RM4hZBv0dDon443M 字段名不会改变,因此我们从这个字段名入手。

控制台 有一段 嘲讽 在不断的打印,右边有个VM,如图:

这么好的东西,我们怎么能轻易放过。我问过题主,为啥加一段日志在这里,他说一是为了嘲讽,二是告诉大家入口点。

在VM处点进去并格式化代码后,仿佛发现了新大陆:

在这里搜索RM4hZBv0dDon443M 试试,发现了仅有的一处,在这里:

后面的 "; path=/" 告诉我,这里是设置cookie,打个断点验证下:

(注意,需要先清除掉cookie和缓存,再刷新。)

可以看到,程序断在了这里,控制台分别输入:

果然是 设置cookie的语句,不过现在的值还是undefined,多执行几次,就能看到值了:

取消断点,让程序彻底跑起来,比对cookie值,发现是一样的:

加密地方知道了,现在就看 _$8K['_$ss'] 这个值是哪里生成的了,搜索'_$ss' 发现搜索不到,因为 _$8K 是window这个对象,所以这个时候可以用 油猴脚本来Hook,不过我对还原这段被混淆了的代码更感兴趣,既然学过AST,不用,那学来干嘛呢?

混淆代码还原

还原点一,大数组的还原,变量_$ev:

变量_$UH:

这两个变量其实是同一个,那更方便了:

控制台输入 _$UH 发现有 854个元素,使用copy函数有个抗,因为元素包含了window对象,直接复制会有问题。这里我使用了slice方法,分段copy。还原后部分代码如下:

还原点二,VariableDeclarator初始值替换:

替换前:

替换后:

还原点三,BinaryExpression计算值替换:

替换前:

替换后:

当然,上图中的 

'_$' + "cs7"[0x1] + "cs7"[0x1]

  

这也是可以进行替换的,替换的结果就是:

也就是一直要在的加密值生成的地方。

还原的差不多了,可以看到  _$8K['_$ss'] 这个值 是AES加密后的结果。

静态分析找加密位置,已告一段落。逆向的方法,将在下篇进行介绍,敬请期待。

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/109507718

(完)