一次過反爬蟲的過五關斬六將-Ali0th

木禾ali0th發表於2019-05-07

Author: Ali0th

Date : 2018-03-19

@[TOC]

0.1. 前言

這一篇是我之前發在先知上的文章,今天把它移過來。當時一開始做爬蟲通過解析 js 的形式去破解,感覺有點費力,現在一般不會這麼搞,所以這篇文章大概看看就好。

在這裡插入圖片描述

0.2. 第一關:拿到javascript內容

一開始瀏覽器看不到反爬蟲的js程式碼。

難點:

一開始開啟這個網站,比較難留意到有個狀態是521頁面的跳轉。因為這個頁面一小時只出現一次,並且為1500毫秒。

過關技巧:

阻止cookie來獲得javascript

具體實現:

刪除cookie並阻止

在這裡插入圖片描述

檢視原始碼

在這裡插入圖片描述

0.3. 第二關:獲得真實程式碼

難點:

將真正的程式碼隱藏起來,阻止了那些直接一上來就解碼的人。

過關技巧:

找到最終輸出點為eval

具體實現:

1)美化 使用【jsbeautifier.org/】

在這裡插入圖片描述

2)理解程式碼

在這裡插入圖片描述
可以看到eval是最後一步,說明這裡最後是通過eval來拼接並執行程式。所以這裡可以把eval改為【console.log】放到F12的console口裡看一下結果。

在這裡插入圖片描述
可以看到黃色部分為執行結果,說明是二次混淆了,這個黃色部分才是真實程式碼。複製出來看。如下:

在這裡插入圖片描述
把頭尾的東西去掉,沒用的。再美化之後:
在這裡插入圖片描述

0.4. 第三關:修正程式碼

難點:

如果你看到上面有個eval就使用第二關的方法,那就錯了,這裡的eval在程式碼中間,只是用來拼接用的。而且這裡還有個故意留下的坑,就是讓程式執行錯誤,所以這裡要好好理解程式碼,弄懂其邏輯。

過關技巧:

放到IDE裡梳理程式碼。(這裡使用ecilpse)

具體實現:

1)程式碼貼到ecilpse裡

在這裡插入圖片描述

使用eclipse搭建一個js的測試頁面,隨時用瀏覽器重新整理檢視結果。

2)理清程式碼總體邏輯,並去掉不重要程式碼

在這裡插入圖片描述

如圖為整體程式碼的大邏輯,於是我們可以去掉不重要的程式碼,留下重要部分,放到eclipse裡除錯。

程式碼為:

在這裡插入圖片描述

最後的dc即輸出了我們要的結果。

3)輸出dc出來

在最後寫上一句【console.log(dc);】然後放到F12裡:

在這裡插入圖片描述

看,這就是我們得到要的結果。

在這裡插入圖片描述

但是,放在python裡,這樣流程走下來的結果偶爾會對,偶爾又不行了。為什麼呢?還要繼續深挖。

0.5. 第四關:jsfuck

難點:

特殊字元

過關技巧:

細心

具體分析:

cd陣列,沒錯我們要搞cd陣列。看起來應該是jsfuck,打CTF經常會遇到。但這裡的話要怎麼去分解他呢?看到這個地方:

在這裡插入圖片描述

再仔細看看:f.reverse()[[-~[]]](cd[i])其中,reverse()是逆序的意思,可以先去掉,就剩下:f[[-~[]]](cd[i])

這個的形式其實就是f[ ]( ),就是呼叫上面的f函式的形式,那麼最奇怪的點就在這裡[ ]裡的[-~[]],它是直接用的! 於是我試著直接看它是值是什麼:

在這裡插入圖片描述

它直接就是值為1的陣列。那麼直接看cd的值試試:

在這裡插入圖片描述

沒錯是一堆陣列。用python看,裡面是有幾層陣列:

在這裡插入圖片描述

為什麼會這樣呢?js的什麼特性導致了?想了半天,想到了很多年前看到的一篇文章【www.freebuf.com/sectool/535…

在這裡插入圖片描述

好了,過了這一關,基本上算是轉折點,快接近終點了。

0.6. 第五關:列表裡的列表

難點:

f函式邏輯。

過關技巧:

看懂f函式邏輯,慢慢除錯才知每部分的功能。

具體分析:

上一關我們看到陣列裡面還要陣列,那麼我們就要看各個陣列對應的是什麼值。 經過除錯,發現最多出現三層陣列。我們分別命令為x、y、z層。其中:

x層直接為字串,只要拼接就行了。

y1層為ascii碼。

y2層和z層為對應當前url的第n個字元。這就是為什麼上面第三關還不算成功的原因。

在這裡插入圖片描述

再具體說明一下z層,下面這個函式可以獲得當前的頁面的url,所以每個網站都不一樣的。所以這一層個人認為是個相當棒的設計。

在這裡插入圖片描述

比如這裡訪問的是http://localhost/,那麼先過濾出來localhost/,然後如果cd裡這個z層陣列值是4,那麼得到的字元是a。所以最終,這個cd陣列根據每一層的轉換,就能變為:

在這裡插入圖片描述

然後拼接dc就是最終我們要的結果了啦啦啦:

在這裡插入圖片描述

相關文章