某哪儿机票解密(1)

应工作需求,需要去爬某哪儿的机票数据,参考了几位大佬,总结了一番。

贴出链接

https://blog.csdn.net/xiongzaiabc/article/details/103253327

https://blog.csdn.net/weixin_44472296/article/details/90958863?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

实际如果只是查航线可以更简单 :)

打开开发者工具调成手机模式,输入网址

https://m.flight.qunar.com/h5/flight/

查询之后发现这个请求有数据。t1000就是解密这串json的JS。

直接在search界面搜索t1000,发现这串JS


意思就是将整个json传进这个t1000函数里面运行,返回的就是真正的json了。

我们去运行一下,直接复制到开发者工具的console里面运行.



发现报错了,根据下面3个url猜测是因为我在本地测试的,当前网页和去哪儿不一样,所以导致报错。 那我们去去哪儿的网页下的console试下。


对比下真实数据,果然输出了正确结果。

但是如果要在node里面执行,还需要对一些参数进行赋值,就要对这t1000进行反混淆,慢慢调试,想偷懒的我当然不想去干这种活。想到了种懒人版的方法。既然可以在浏览器运行,那我再selenium打开去哪儿的网页在执行JS岂不是也能拿到结果!

直接去试了,结果直接内存爆破,卡死在JS,下个断点看了下,检测webdriver,直接去掉,贴上代码


直接可以产生结果了。

但是我要部署到线上的,selenium效率也太低了吧。这时候就有两个可以异步执行的模拟浏览器的工具

一个是pyppeteer,还有个是splash。

Puppeteer 是 Google 基于 Node.js 开发的一个工具,主要是用来操纵 Chrome  浏览器的 API,通过 Javascript 代码来操纵 Chrome 浏览器的一些操作,用作网络爬虫完成数据爬取、Web 程序自动测试等任务。其 API 极其完善,功能非常强大。 而 Pyppeteer 又是什么呢?它实际上是 Puppeteer 的 Python 版本的实现,但他不是 Google 开发的,是一位来自于日本的工程师依据 Puppeteer 的一些功能开发出来的非官方版本。

重点是由于 Pyppeteer 是基于 asyncio 构建的它的所有 属性 和方法 几乎都是 coroutine (协程) 对象因此在构建异步程序的时候非常方便,天生就支持异步运行。

同selenium,需要对他进行webdriver重定义

然后JS的写法有稍许改变,最好是去看文档(虽然我也没有看,毕竟能弄出来就行)



然后也能返回正确结果,比selenium还快。但我更推荐 splash,因为他docker部署很简单,快速制作成一个接口,很方便调用,理论上我觉得应该是可以运行的,但是这串json我传过去执行的时候,老是报语法错误,弄了好久,看了好几遍文档也没整明白,如果有大佬搞出来了可以和我讲下,我做出来了也会分享给大家。

那这些网页端需要的pre,_m_,d22e62,这些参数呢?


通过burpsuite重发器测试,这些不带也能查到航线(香)

生成规则和网页端也是一样的,想知道方法可以去看我前面贴的链接。

但是我的任务不只是查机票,还有后续的下单...

后面的才是难点..

过两天更新个(真)JS解密

未完待续..

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容