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
- 点赞
- 收藏
- 关注作者
评论(0)