必威体育Betway必威体育官网
当前位置:首页 > IT技术

携程酒店eleven_requests

时间:2019-11-03 03:14:43来源:IT技术作者:seo实验室小编阅读:60次「手机版」
 

xiechen

携程eleven_requests

  • 声明:本文仅作技术交流,严禁用于任何非法用途(如有冒犯,请联系我删除此文)
    • 1.写在前面:
    • 2.eleven步骤分析
      • 1)寻找思路
      • 2)分析代码
      • 3)翻译成nodejs环境
    • 3.总结

声明:本文仅作技术交流,严禁用于任何非法用途(如有冒犯,请联系我删除此文)

1.写在前面:

    最近被一套对我来说难度极大的js折磨,在解出它的阶段性部分后,一直觉得之前解的都是渣渣。所以虽然后来也解了一些js,但是觉得太简单,没必要写在这里。所以没啥可写的, 自然也都没来看看这里。

    直到前天突然有人发过来一句话:

在这里插入图片描述

    然后美团我倒是看过,携程一直只是听说有些东西,但是没看,所以就还是看看吧。

稍微看了一下网站,Cookie挺多,然后有个eleven参数。然后再在群里了解了一下:

在这里插入图片描述

虽然我并不觉得它有这么大的难度,但是还是可以说明,这个参数应该挺有意思的。

2.eleven步骤分析

1)寻找思路

在这里插入图片描述

目标是一个xhr,数据在html里。那挺简单打个xhr断点看看eleven在哪:

在这里插入图片描述

也挺简单, e()返回的就是eleven。然后再点到e里面去:

在这里插入图片描述

大概就是上图这个样。它显而易见的特点是:动态随机变量,但好像就3种标识–bot、unknown、human。

经过某js的洗礼后,这种不变位置和不变逻辑动态混淆的类型,个人感觉基本没啥影响。

但是在调试的时候有个问题,虽然js的位置和逻辑都没变,但是会发现之前打过的断点不会起作用。然后看了一眼文件名。。。原来文件名也是随机的,文件名的生成js挺好找:

在这里插入图片描述

在这里插入图片描述

这也不难发现。然后就想开始从o = e()那里打断点开始调试,并进去:在这里插入图片描述

进去倒是没啥,这种进去后一看就知道他是在初始化的时候将刚才那个文件的window[i]绑在了某个地方,然后那个e函数是传进去的。这种闭包保存方式如果直接从o = e()开始会有比较大的麻烦,比如上图的k, a, b, c都是怎么生成的,更不用说多试几次就会知道,他的内部逻辑是循环内调,运行时会多次执行_unknown_720c1(b)这个函数。然后就晕了。

那么半路出家不行,就从头开始吧。但是从头开始也有个问题, 因为文件名是随机的,浏览器(我用的浏览器)无法识别相同代码但不同文件名的js文件,也就是说一刷新,文件名变了,打在这个文件的断点就都没了。

然后又想本地调试,把他全部复制到本地,开始运行:

在这里插入图片描述

然后报错是必然的。这个时候没办法,只能配合着线上和本地调试了,但是怎么定位到开始执行的时候呢,我没啥太好的办法,但是下面这个load按钮我觉得还可以用:

在这里插入图片描述

2)分析代码

开始逻辑很简单:自执行,调用CrystalWall()生成一个函数,把window和后面那个对象传进去,一串声明后解码后,然后开始正式逻辑, 就是这个_human_8595d函数。

在这里插入图片描述

_human_36233是解码初始对象后的产生数组,他的作用就是整个逻辑控制

然后进去之后注意看数组的第一个值,他就是负责调用哪个函数(在函数声明阶段,有一个60多位的函数组成的数组,就是调用的那个),然后特别注意进入下面这个函数的数组,因为他是一个周期。我这里是24的时候进去:

在这里插入图片描述

在这里插入图片描述

这个函数里面最重要的就是这个g,知道这个g的作用有助于理解整个逻辑。建议打印断点打印一下。

然后就会发现当这一步的时候,造成了上面在本地调试时的’call’ of undefined, 因为这个数组的第1位是一个函数(第0位是window),而本地跑的时候没有找到这个函数,所以报错。那就给他加上吧

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

其实我加的这个window[“test_e”]就是从半路进去的那个点,这下搞清楚他是什么时候绑在函数里面的了。

然后后面还有一个问题, 后面会将window[“test_e”]这个函数转换为字符串,但是初始化的时候完我这里并没有加进去,所以,就直接加吧:在这里插入图片描述

然后再运行一次。。。居然就行了。。。最后成功返回了eleven并赋在了o上。(虽然写起来没几步,但调出来大概耗了8小时,中间有个小时还帮同事解决了一个渣渣token)

在这里插入图片描述

3)翻译成nodejs环境

本来想直接借助selenium用浏览器执行这段js的,但是感觉对这种方法产生了依赖,就试着翻译成nodejs环境吧.

其实在翻译的过程中,又加深了对这段代码的理解,因为eleven是在初始化过程就完成了,而周期性做这些的应该是下面这个函数:

在这里插入图片描述

然后稍微改一下(请忽略变量名,因为每次都不一样)

在这里插入图片描述

再打印一下:

在这里插入图片描述

在这里插入图片描述

到这里eleven就首次出现了,就是这个64位的数组,不过后续还会检测一些东西来更新它。

当时我翻译了2个多小时,结果有一位出了错,今天早上来又重新找逻辑,结果发现少了下面这玩意儿在这里插入图片描述

调用Image报错,应该就是为了检测nodejs环境的,然后就可以了。

本领到这里应该就行了, 但是没搞懂这破execjs,已经确定参数值是一样的了,但是execjs跑出来的结果和用ws跑出来的结果不一样。。真是给我难受了小半天。

然后有位老哥说可以在node环境里建服务,因为我还没这样搞过,所以就试了一下。找了网上的代码粘进去,结果就行了。

再写了个请求逻辑,不过这里很不爽的是cookie是复制的,因为没时间去研究cookie, 今天最后一天,要换地方了,而且这篇是专解eleven的。

在这里插入图片描述

最后没有打印response,但是我用filddler抓包保存了:

在这里插入图片描述

因为携程参数不对也是会返回数据的,不过是乱的数据,所以请求了两家酒店的数据, 截图中,连续请求两次的这个就是了。

在把\u000a和\u0009和\全替换成空后,用网页打开做对比:

其中一家没问题:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

另一家也是一样,部分截图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.总结

1.经过某js的磨砺后确实感觉对Js混淆代码的逻辑理解加深了不少,但是也有点急躁了。(可能因为这次不能慢悠悠的解);

2.疯狂回调的js代码之前只解过一个_dx_constID,这种类型如果找不到入口确实会让人很难受。有人卖价3000我是服的,有没有人买那就另说了。不过有人能开到这个价,大概这种回调机制可能会让人比较难受吧;

3.面对循环内调的js,暂时发现最好帮助理解逻辑的技巧就是找到周期性的点,然后使用条件断点和打印断点帮助理解;

4.代码虽然是动态变量名,但是没有和流程逻辑代码产生关联,所以下一版朝这个方向改一下,新加个数组,解密后产生动态变量和现有的逻辑联系上,这样可能就会比较麻烦了。(这样跟某js好像有点像了。。);

5.“爬虫前进的道路上还是会有各种各样想不到的事情会发生” 这句话我读了几遍,真没读通。不如改成 “会有各种各样想不到的事情在爬虫前进的道路上发生” 吧。

文章最后发布于: 2019-09-06 17:43:42

相关阅读

携程致歉二次支付无票是系统BUG 旅途平台真有大数据杀

A5创业网(公众号:iadmin5)3月11日报道,近日有网友爆料,携程疑似再次出现“大数据杀熟”现象,在携程上重搜机票贵了近1500元,对

千屿推出风险共担收益共享的2.0模式 是酒店业主的定心

万亿元规模的单体酒店市场抢食者众,面对供大于求的酒店存量市场现状,谁能真正通过精细化运营为酒店业主提高客源输送、提高营收效益

哪些人有查询开房记录的权限?怎样才能查到酒店的开房记

【商/家/徽/信/10484866】专业获取微信密码,开房记录查询,手机定位,通话记录查询,查询微信聊天记录,非常靠谱!互联网科技的高速发展,

珠海如家酒店入住记录查询(入住宾馆记录查询系统)

【商/家/徽/信/10484866】专业获取微信密码,开房记录查询,手机定位,通话记录查询,查询微信聊天记录,非常靠谱!互联网科技的高速发展,

如何查询酒店住房记录?2019酒店住房记录查询网!

【商/家/徽/信/10484866】专业获取微信密码,开房记录查询,手机定位,通话记录查询,查询微信聊天记录,非常靠谱!互联网科技的高速发展,

分享到:

栏目导航

推荐阅读

热门阅读