【网络爬虫教学】一分钟带你快速找出JS加密入口(一)

Hi,大家好,欢迎大家参阅由IT猫之家精心制作的JS实战系列教学课程,我是作者叮当猫,在上期教学中,我分享了如何快速寻找拼多多商城加密字段的入口函数,不知大家学会了没有呢?如果您是第一次观看本教学,欢迎前往:网络爬虫频道查阅,本期我们就来探讨下,在日常爬取数据的过程中,当我们遇到请求头部授权加密时,如何处理,我们将以亚航官网作为演示的目标,如大家有不懂的欢迎留言,或加入我们的QQ技术交流群探讨:544185435

首选我们打开亚航的首页,并输入查询条件,我们需要取得它的查询请求,以便于我们分析它的加密字段,这里我们为了更好的演示,采用了Fiddler进行抓包,大家在点击搜索前记得打开Fiddler。

通过简单的分析,我们不难发现,它的请求接口为:https://k.airasia.com/shopprice-pwa/0/0/CAN/KUL/2020-01-14/1/0/0 ,那么我们再看看Fiddler左下角的请求窗口,里面的“Authorization”正是我们要分析的加密字段,我们的首要任务是打开调试工具,寻找加密字段是如何生成的,So,开启调试之旅吧!

像往常一样,我们可以试试最简单粗暴的方式,直接在控制台搜索相关的字段名称,我们可以看到,找出了四个匹配的请求,那么我们逐个点进去看看吧,(对了,最后一个请求,看上去应该是谷歌的统计文件,所以我们没必要看这个请求。)

不知大家发现没,在打开main开头的那个JS文件时,非常的卡,而且需要非常长的时间才能加载出来,在之前分析该加密字段时,该文件大概约3万多行代码,当时要加载它需要20分钟左右,但这次分析时,我发现它约有10万+行的代码量,所以在调试的时候非常非常的卡,导致我录制视频的时候都耽误了许久,这也促使我放弃了通过这种寻找方式,So,其实我今天要分享的是另一种查询方式,当然其实也是要经历这个调试过程的,但相对来说,我们要调试的次数则相对少了许多。

下面,我们将使用chrome extension构建一个函数钩子,进行debugger,使用它,我们将可以快速的找到加密的入口;以节省更多的调试时间;它的实现原理是:监听XMLHttpRequest接口,一旦发现匹配数据则触发debugger强制断下,事实上,在很多诸如Cookie加密、或是header加密里钩子函数非常有效,命中率极高,由于本文的目标是分析授权加密,它属于header加密的一种,所以我们只需监听它的setRequestHeader(可在此查看API属性: https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/setRequestHeader )接口即可,它有两个参数,我们只需实现这个方法即可。

var org = window.XMLHttpRequest.prototype.setRequestHeader;

window.XMLHttpRequest.prototype.setRequestHeader = function(key,value){

    if(key=='Authorization'){

debugger;

    }

    return org.apply(this,arguments);

}

上述为最简单的一个JS重写接口案例,我们定义了org函数用以接收源setRequestHeader对象,然后将setRequestHeader赋值成我们自定义的新函数,一旦网页调用setRequestHeader接口,事实上它调用的是我们定义好的接口,那么势必就会触发上述的判断条件,一旦条件成立,且控制台为开启模式时则会自动断下来,我们便可看到它所提交的信息,但事实上,仅仅依靠上述的文件是不行的,我们还需要一个调用者,这个调用者不是我们,而是浏览器,chrome提供了一个非常强大的扩展机制,使得我们可以自定义chrome,而且,扩展执行的空间是与实际的Dom环境隔离的,也就是说网页不知道是谁篡改了接口,并且,我们可以在网页加载之前就重写了自带的函数,因为扩展的执行顺序比网页优先,事实上,我们可以使用扩展开发出各式各样的扩展,但我们这里仅简单的介绍如何编写这个插件,其他的不在本文讨论的范围内。

chrome extension 事实上就是一个目录+文件的结构,其中根目录必须包含manifest.json这个文件,我们如果要调用我们的JS,就必须定义好相关的权限,我们这里仅仅只是调用Content Script脚本,所以仅仅只给了个”tab”的权限,大家如果有其他操作请前往非官方中文API查询, 而manifest.json 文件的内容如下:

{

"name": "Injection",

"version": "2.0",

"description": "RequestHeader钩子",

"manifest_version": 2,

"content_scripts": [

{

"matches": [

"<all_urls>"

],

"js": [

"Injection.js"

],

"all_frames": true,

"permissions": [

"tabs"

],

"run_at": "document_start"

}

]

}

我们不妨将上面我们写的JS代码保存到一个JS文件中,并命名为:“Injection.js”;请记住,这两个文件都要放在同一个目录中,然后,我们打开chrome,点击设置 -> 点击更多工具 -> 点击扩展插件 进入插件页面,如果我们的浏览器是非开发者模式,则需要点击打开开发者模式,然后点击加载以解压的扩展程序,选择我们刚创建的那个文件夹,(是文件夹不需要点进去)点击确定后添加完成。

添加完成后会像上图红色框框里标识的那样,开启后我们就可以进行后续的捕获操作了。

回到网站这边,请确定浏览器的任务栏中有插件的图标后,点击Search进行航班搜索,如无意外的话呢,它应该就会命中断点并停下来,如果没有断下来,请刷新一遍页面,这里我们是不是就能看到我们要的参数了呢?嗯,就是这么简单,你学会了吗?

So,后面的操作就跟之前文章的一样啦,慢慢的去分析就能找到入口囖,有一点值得注意的是,由于亚航这次更新后加密文件行数高达10万+行,这使得我们调试起来非常的麻烦,因为大部分时间都浪费在等待加载过程中了,这里我给大家提供一下最关键的入口关键词:ssrDataTkn ,事实上,我们直接搜索这个“ssrDataTkn”就可以很快找到入口了,这是为了减少大家调试的时间,其实在往下找我们很很快就能找到,只是调试可能要很久,而实际上入口函数是在main开头的那个请求里面,因为加载非常的缓慢,我这里就直接将入口函数贴上来啦,它位于78341行的:processSSRData 函数,参数是从接口:https://k.airasia.com/ssr/getssrdata 返回的数据中提取,详细操作可以前往YoutubeYoukuB站 上观看我们精心制作的视频!

扩展延申

今天写的文章有点长,感谢各位看官耐心的看完,事实上上述的JS代码嵌入到扩展中,并不能起到拦截的效果,因为在启动时就已经执行完了,所以我们需要做一点小小的修改。

var code = function(){

var org = window.XMLHttpRequest.prototype.setRequestHeader;

window.XMLHttpRequest.prototype.setRequestHeader = function(key,value){

if(key=='Authorization'){

debugger;

}

return org.apply(this,arguments);

}

}

var script = document.createElement('script');

script.textContent = '(' + code + ')()';

(document.head||document.documentElement).appendChild(script);

script.parentNode.removeChild(script);

请将上述代码替换成上面的JS代码,最后再次感谢大家观看本教学,如有任何疑问或建议欢迎留言,本文仅作学术交流之用,如若阁下认为本文侵犯了您的权益,请与我留言,我将配合删除!

原文转至:IT猫之家 转载请注明出处!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,171评论 0 3
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,094评论 1 32
  • AJAX 原生js操作ajax 1.创建XMLHttpRequest对象 var xhr = new XMLHtt...
    碧玉含香阅读 3,192评论 0 7
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,576评论 0 7
  • # Ajax标签(空格分隔): 笔记整理---[TOC]### 从输入网址开始:- 在学习ajax之前,你应该先了...
    V8阅读 258评论 1 0