JS逆向系列-猿人学web第一题

JS逆向系列-猿人学web第一题

富有的,给他更多;没有的,把他仅有的也拿走。

爬虫真是一个有意思的东西,简单的页面,不费力就能爬取,复杂的页面,费尽心思也不知如何爬取。就像玩游戏,刚开始时在新手村砍稻草人,等出了新手村,你面对的直接就是最终boss。

最近有点喜欢爬虫js逆向了,喜欢那种被虐的死去活来,悲痛欲绝的感觉(没错说的就是你,只狼)。

最近学习爬虫,发现网上免费的资料教程,要么很简单,在headers中添加user-agent就能爬取,要么很高深,照着读了好几篇也搞不懂到底是怎么实现的,并且还因为某种原因不会放出所有的代码,只能浅尝辄止。

所以说:绝知此事要躬行。于是打算好好钻研钻研爬虫,多多动手,把过程也记录下来,跟大家分享,我尽可能用最详细的描述,如果你跟着我一起学的话,你也一定能学会噢!

JS逆向系列-猿人学web第一题_第1张图片

今天要做的是猿人学js逆向的web第一题:抓取机票的价格。准备好小板凳哦,本文较长。

JS逆向系列-猿人学web第一题_第2张图片

此题标注为简单题,主要思路是寻找实现加密字符串的代码,提取并复现。

准备工作

  • 浏览器安装 Cookie AutoDelete插件,便于清除cookie JS逆向系列-猿人学web第一题_第3张图片 (关注本公众号(程序员小木屋)回复"cookie"可获取下载地址)
  • 安装好 python,安装好 nodejs,安装好 pycahrm,安装好 requests包,安装好 execjs
  1. 打开网址 https://match.yuanrenxue.com/match/1#,并打开开发者工具。

JS逆向系列-猿人学web第一题_第4张图片 首先要解决的是无限debugger问题,上述代码的意思是,有一个每隔500毫秒就运行一次的函数,函数的内容就是在此处暂停,我们需要解决的是,不让函数在此处暂停。

解决方法:右键debugger行,选择一律不在此处暂停 JS逆向系列-猿人学web第一题_第5张图片

  1. 网络tab栏查看所有接口,找到传输机票价格的接口

JS逆向系列-猿人学web第一题_第6张图片 经过比较,此接口是返回价格的接口

  1. 查看接口传参,检查接口是否有加密参数

JS逆向系列-猿人学web第一题_第7张图片 经过查看,headers中没有异常参数,但是传参中有一个参数m,我们需要找到这个m是如何生成的。

  1. 点击启动器tab页,查看调用堆栈 JS逆向系列-猿人学web第一题_第8张图片 调用堆栈是指此接口执行的代码顺序

  2. 依次点击进入堆栈,并在能打断点的地方打上断点

技巧讲解

  • 进入js文件后,通过点击左下角的 {}进行格式化 JS逆向系列-猿人学web第一题_第9张图片
  • 找到对应的行后,点击左侧的行号就能打断点 JS逆向系列-猿人学web第一题_第10张图片
  1. 使用插件清除cookie后,重新刷新界面,查看断点位置的数据,找到第一次生成 m参数的位置

技巧讲解

一定要知道这几个按钮的含义和用法! JS逆向系列-猿人学web第一题_第11张图片

JS逆向系列-猿人学web第一题_第12张图片 c.send位置没有m参数,继续执行

JS逆向系列-猿人学web第一题_第13张图片 f.send也没有看到,继续执行

JS逆向系列-猿人学web第一题_第14张图片 这一长串这也没看到,继续执行

JS逆向系列-猿人学web第一题_第15张图片 欸,最后终于看到m了!

  1. 观察此处的代码,分析 m是如何生成的

技巧讲解

  • 此处的代码一看就进行了混淆,我们可以逐个拆分,输出到控制台中,查看每个变量都是什么含义。
_0x5d83a3['\x70\x61\x67\x65'] = window['\x70\x61\x67\x65'], _0x5d83a3['\x6d'] = _0x57feae + '\u4e28' + _0x2268f9 / (-1 * 3483 + -9059 + 13542);

例如,第5行的代码,如上,我们依次在控制台中输入这些变量,查看是什么含义

JS逆向系列-猿人学web第一题_第16张图片 看到了没有,_0x5d83a3['\x6d']就是m_0x57feaem的前半部分,_0x2268f9 * 1000就是m的后半部分(即时间戳)。

  1. 现在得到了 m的后半部分,继续查找前半部分,看第2行,前半部分是在这里生成的
  • 因为程序已经执行到了第6行,我们现在查看第2行的结果,可能已经被污染了,所以我们选择在第2行打断点,重新执行,让程序变为第2行还未执行的状态。

JS逆向系列-猿人学web第一题_第17张图片 我们依次执行第二行的函数,如下 JS逆向系列-猿人学web第一题_第18张图片

alt 发现_0x2268f9是时间戳,oo0O0(_0x2268f9['\x74\x6f\x53\x74\x72' + '\x69\x6e\x67']())是一个暂时不知道干啥的函数,window['\x66']正确输出了m的前半段。

  1. 寻找 window['\x66']

'\x66''f',我们要找到window.f这个变量。 但是根据我的ctrl+f查找,并没有找到window.f,这是我们大胆假设,难道这个变量是在前面那一段不知道干啥用的函数生成的?我们进入oo0O0函数中 JS逆向系列-猿人学web第一题_第19张图片

  1. 解混淆

JS逆向系列-猿人学web第一题_第20张图片 代码跳转到了这里,oo0O0函数就隐藏在其中,这可怎么办呢?

不要慌!我们试着把它解混淆和格式化。

首先,解混淆是针对js代码的,这行代码里混合着

你可能感兴趣的:(后端)