【網(wǎng)絡(luò)爬蟲教學(xué)】一分鐘帶你快速尋找JS加密入口(二)

Hi,大家好伶唯,歡迎大家參閱由IT貓之家精心制作的JS實戰(zhàn)系列教學(xué)課程,我是作者叮當貓世杀,在上期教學(xué)中阀参,我們學(xué)習了如何快速分析基于Header授權(quán)加密協(xié)議,同時我們也初次接觸到了鉤子(hook)的概念瞻坝,鉤子在JS中可以說是較為高級的概念蛛壳,如果大家有在操作系統(tǒng)中使用過鉤子,那么你一定對這個不陌生所刀,在windows中衙荐,我們常用的操作諸如,點擊浮创、拖拽赫模、滑動、或者是輸入蒸矛,這些操作統(tǒng)統(tǒng)都是基于底層API通過發(fā)送消息實現(xiàn)的瀑罗,比如我們要在某編輯框輸入信息,我們會先取得子窗口的句柄(即選中窗體雏掠,按預(yù)定事件是否獲取焦點等)斩祭,然后才能向該句柄發(fā)送text指令,當CPU得到響應(yīng)后會根據(jù)相關(guān)指令完成相應(yīng)的操作乡话,而鉤子在這一發(fā)送的過程中可以作為一個中間人為您監(jiān)聽摧玫、篡改報文、或攔截報文等作用绑青,當然它不是必須的诬像,除非你想要,事實上它就是一種消息中斷機制闸婴,如上述所言坏挠,它可以監(jiān)聽一切傳送的內(nèi)容,那么在JS中邪乍,它的作用也是類似的降狠,今天我們將會學(xué)習如何通過鉤子快速定位到Cookie加密協(xié)議入口,在此之前如果您是第一次觀看本教學(xué)庇楞,歡迎前往:網(wǎng)絡(luò)爬蟲頻道查閱榜配,本期我們就一起來探討下,在日常爬取數(shù)據(jù)的過程中吕晌,當我們遇到Cookie加密授權(quán)時該如何處理蛋褥,我們將以越捷航空官網(wǎng)作為演示的目標,如大家有不懂的歡迎留言睛驳,或加入我們的QQ技術(shù)交流群探討:544185435

【網(wǎng)絡(luò)爬蟲教學(xué)】一分鐘帶你快速尋找JS加密入口-視頻版

由于國內(nèi)頻道遭版權(quán)問題封禁烙心,上傳不了膜廊,所以目前僅上傳Youtube,如需觀看視頻請前往源站:IT貓之家_JS實戰(zhàn)系列之Cookie加密協(xié)議分析

步驟

需準備Fiddler(抓包用)弃理、Chrome(調(diào)試與分析)

我們打開Fiddler,為了方便我們分析數(shù)據(jù)屎蜓,建議大家配置過濾器痘昌,僅過濾我們需要的信息,如上圖我們將面板切換至Filters項炬转,勾選“Use Filters”旁邊的復(fù)選框辆苔,Hosts選項分別選擇:1. Show only Internet Hosts、2. Show only the following Hosts扼劈;并在編輯框中輸入“*. 要過濾的URL(不包含前綴) ”以分號結(jié)束驻啤,如越捷航空的URL為:?https://www.vietjetair.com/?則規(guī)則應(yīng)寫成:*. vietjetair.com ;意為泛匹配的意思,填寫完畢后點擊右上角的“Changes not yet saved.” 保存荐吵。

步驟二

打開越捷航空官網(wǎng)骑冗、選擇航班進行搜索、通過Fiddler抓包后分析相關(guān)請求先煎,并尋找出攜帶加密Cookie的接口

我們打開越捷航空的官網(wǎng)贼涩,并確定一下Fiddler是否正常能正常過濾出我們預(yù)設(shè)的域名。

隨便輸入航線薯蝎、日期遥倦,這里我們選擇單程,也可以按默認占锯,選擇完畢后點擊查詢航班按鈕袒哥。

點擊跳轉(zhuǎn)后的結(jié)果頁面是這樣的,可能存在跳轉(zhuǎn)中斷問題消略,即跳轉(zhuǎn)后空白無響應(yīng)堡称,這是因為網(wǎng)站監(jiān)測到你的流量異常,重新多試幾遍即可艺演,或者換瀏覽器粮呢。

如果您正確的配置了Fiddler,應(yīng)該會出現(xiàn)如上圖所述的請求鏈接钞艇,也就是說我們要分析的加密就在上述的鏈接之中啄寡。

在分析請求之前,我們必須先找到實際的請求URL有哪些哩照,如果您此前有做過航司爬蟲方面的工作挺物,我相信您肯定一眼就能看出哪個是請求的接口了,這個站的請求接口為:https://booking.vietjetair.com/ameliapost.aspx?lang=zh 我們可以通過Fiddler的WebForms面板查看飘弧,如果您不知道如何找到該面板识藤,請在Fiddler中切換至Inspectors項砚著,它的子菜單欄中就能看到WebForms選項了,通常查詢接口包含始發(fā)站點(通常三字碼)痴昧、到達站點(通常三字碼)稽穆、日期、貨幣赶撰、人的類型(成人/小孩/嬰兒)舌镶、與其它必要數(shù)據(jù);

我們將面板切換至Cookies選項豪娜,通過分析餐胀,我們可以在:https://booking.vietjetair.com/TSPD 開頭的這個請求接口中看到一串已“TSdc75a61a_74”開頭的Cookie,而這串Cookie正是我們本次要分析的目標字段瘤载,當然如果你分析下去后否灾,你會發(fā)現(xiàn),其實這個字段僅僅只是開始而已鸣奔,后面有好幾個類似的字段都需要我們?nèi)ソ饷苣迹晕視赃@個站作為教學(xué)的目標站點,因為它足夠的復(fù)雜挎狸。

步驟三

開啟Chrome Conse健提、嘗試在控制臺中全局搜索與“TSdc75a61a_74” 相關(guān)的請求、通過Mouse斷點進行調(diào)試

跟以往一樣伟叛,我們可以先去嘗試下通過關(guān)鍵詞搜索方式在Chrome控制臺中進行全局匹配私痹,如果您此前還未曾使用過Chrome Console,歡迎查看之前的文章后再回來看统刮,很遺憾紊遵,我們在找遍所有相關(guān)字段后都沒有匹配到一條合適的URL,那么極有可能這個字段名稱是由JS動態(tài)生成的了侥蒙,也就是說暗膜,這條路行不通。

俗話說鞭衩,山路不通走水路学搜,通過上面的判斷,我們知道了Cookie加密的字段名稱極有可能是動態(tài)生成的论衍,所以我們不能使用該方式瑞佩,改用Mouse斷點法測試一下吧!首先我們打開控制臺右側(cè)的“Event Listener Breakpoints”選項坯台,并找到“Mouse”子項炬丸,并在“click”旁邊的復(fù)選框中勾上,用以監(jiān)聽鼠標的點擊事件(這實際上就是一個鉤子蜒蕾,而這個鉤子是Chrome內(nèi)置的)稠炬。

當我們在頁面上點擊查詢航班按鈕后就會發(fā)現(xiàn)網(wǎng)頁被斷了下來焕阿,并沒有繼續(xù)跳轉(zhuǎn),我們點擊上圖指向的花括號首启,用以美化代碼暮屡,讓我們分析起來更清晰些。

在經(jīng)過反反復(fù)復(fù)的嘗試之后毅桃,我們就會發(fā)現(xiàn)褒纲,根本沒法正確命中斷點,換句話說疾嗅,根本不能找到入口外厂,因為這個站的加密在頁面跳轉(zhuǎn)的同時就已經(jīng)刪除了加密代碼冕象,所以一旦跳轉(zhuǎn)代承,我們再也找不到加密的入口。

步驟四

編寫鉤子函數(shù)渐扮,監(jiān)聽Cookie接口信息的收發(fā)论悴、結(jié)合Chrome extension實現(xiàn)信息中斷與攔截機制

在經(jīng)過上述步驟的嘗試,我們總結(jié)出一個結(jié)論墓律,就是每種調(diào)試方式都不是萬能的膀估,它們僅僅只是一種方式,事實上使用Mouse斷點方式確實可行耻讽,只是它需要花費大量的時間去調(diào)試察纯、失敗、調(diào)試针肥,再失敗再調(diào)試饼记,這個過程會讓您調(diào)試到懷疑人生,那我們何不以更取巧的方式來實現(xiàn)曲線救國呢慰枕?答案是肯定的具则,既然這個加密是通過Cookie實現(xiàn)的,那么我們完全可以通過自定義鉤子來監(jiān)聽它具帮,這里要先聲明一點:鉤子也不是萬能的博肋,只有在目標函數(shù)加密時使用到了內(nèi)置函數(shù)才可以使用,比如上一期教學(xué)中的Header授權(quán)加密蜂厅,它采用了setRequestHeader接口匪凡,所以我們可以監(jiān)聽并攔截該接口的收發(fā)信息,同理這里我們也可以監(jiān)聽Cookie的接口掘猿,實現(xiàn)方式也非常的簡單锹雏,如下。

inject.js文件

var code = function(){

var org = document.cookie.__lookupSetter__('cookie');

document.__defineSetter__("cookie",function(cookie){

if(cookie.indexOf('TSdc75a61a')>-1){

debugger;

}

org = cookie;

});

document.__defineGetter__("cookie",function(){return org;});

}

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

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

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

script.parentNode.removeChild(script);

這里我們重寫了Cookie的lookupSetter接口术奖,當匹配到包含TSdc75a61a的Cookie時礁遵,則直接斷下來轻绞,所以我們要確定被加密的字段會經(jīng)過該接口,方可進行攔截佣耐。

manifest.json 文件

{

? "content_scripts": [ {

? ? ? "js": [ "inject.js"],

? ? ? "matches": [ "http://*/*", "https://*/*","<all_urls>"]

? } ],

? "manifest_version": 2,

? "name": "CookieHook",

? "permissions": ["tabs"],

? "version": "0.1"

}

在完成JS文件的編寫后政勃,我們還需額外聲明一個manifest文件,用以聲明這是一個Chrome extension兼砖,當兩個文件都編寫完成后將其放入一個文件夾中奸远,(兩個文件必須同一目錄),并為目錄取名“CookieHook”讽挟,到此完成擴展的編寫以上僅僅是一個最簡單的案例懒叛,其它功能可自行參考擴展官網(wǎng)教程。

步驟五

啟用CookieHook擴展插件進而捕獲加密數(shù)據(jù)從而實現(xiàn)快速尋找切入口的目的

在chrome的url中輸入:?chrome://extensions/?然后啟用開發(fā)者模式耽梅,點擊加載已解壓的擴展程序薛窥,選擇剛創(chuàng)建的目錄(是目錄),按確定后將會看到如上圖的擴展項眼姐。

回到越捷航空首頁诅迷,并打開控制臺(可按F12喚出),我們再次嘗試輸入航線众旗,然后點擊查找航班罢杉,如無意外,網(wǎng)頁便會斷了下來贡歧,然后我們將鼠標移到cookie中滩租,便可清晰的看到,我們要找的加密字段了利朵。

通過在堆棧中尋找源律想,我們不難發(fā)現(xiàn),它的入口就是:J(Z, _, J)這個函數(shù)哗咆,當然這個函數(shù)是可變的蜘欲,根據(jù)我們分析的規(guī)律,它是間隔2小時更新一次算法晌柬,(應(yīng)該說變更一次模板)如果您看到的跟我的不一樣姥份,請不用懷疑,它就是加密的入口年碘,我們清晰可見:zL這個變量中得到的是字段名“ TSdc75a61a_74 ”那不就是我們要找的么澈歉,從而我們可以證實了這個字段名是動態(tài)生成的想法。

總結(jié)

以上為本期教學(xué)的所有內(nèi)容屿衅,主要講解了如何通過自定義鉤子函數(shù)實現(xiàn)快速尋找加密函數(shù)入口埃难,并且我們也嘗試了通過不同的調(diào)試方式進行定位,需要注意的是,鉤子函數(shù)并非所有場景都能使用涡尘,只有當目標函數(shù)采用了內(nèi)置API才能對其進行監(jiān)聽忍弛,當然這個規(guī)定是死的,事實上我們完全可以通過proxy來實現(xiàn)監(jiān)聽任意函數(shù)而不僅僅只是趨限于內(nèi)置的函數(shù)考抄,大家懂我意思吧细疚?好了,本期教學(xué)到此暫告一段落川梅,咱們下期再見疯兼!


原文轉(zhuǎn)至:IT貓之家,轉(zhuǎn)載請注明出處贫途!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吧彪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子丢早,更是在濱河造成了極大的恐慌姨裸,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件香拉,死亡現(xiàn)場離奇詭異啦扬,居然都是意外死亡中狂,警方通過查閱死者的電腦和手機凫碌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胃榕,“玉大人盛险,你說我怎么就攤上這事⊙郑” “怎么了苦掘?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長楔壤。 經(jīng)常有香客問我鹤啡,道長,這世上最難降的妖魔是什么蹲嚣? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任递瑰,我火速辦了婚禮,結(jié)果婚禮上隙畜,老公的妹妹穿的比我還像新娘抖部。我一直安慰自己,他們只是感情好议惰,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布慎颗。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俯萎。 梳的紋絲不亂的頭發(fā)上傲宜,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音夫啊,去河邊找鬼蛋哭。 笑死,一個胖子當著我的面吹牛涮母,可吹牛的內(nèi)容都是我干的谆趾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼叛本,長吁一口氣:“原來是場噩夢啊……” “哼沪蓬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起来候,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤跷叉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后营搅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體云挟,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年转质,在試婚紗的時候發(fā)現(xiàn)自己被綠了园欣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡休蟹,死狀恐怖沸枯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赂弓,我是刑警寧澤绑榴,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站盈魁,受9級特大地震影響翔怎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杨耙,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一赤套、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧按脚,春花似錦于毙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脖旱。三九已至,卻和暖如春介蛉,著一層夾襖步出監(jiān)牢的瞬間萌庆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工币旧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留践险,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓吹菱,卻偏偏與公主長得像巍虫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鳍刷,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344