字型加密反爬也就是自定義字型反爬,通過呼叫自定義的ttf檔案來渲染網頁中的文字,而網頁中的文字不再是文字,而是相應的字型編碼,通過複製或者簡單的採集是無法採集到編碼後的文字內容!
上圖看真像:
原始碼截圖:
頁面中的效果:
如圖上面圖片所看到的,爬蟲是無法採集到編碼後的文字內容,這樣就起到了防爬的效果
講到這裡,細心的人會問,為什麼不把所有的內容都替換成編碼呢?應該影響載入和渲染速度!
我們知道,單純漢字就有好幾千個,如果全部放到自定義字型庫中的話,這個檔案會有灰常大,幾十兆是肯定有的了,那載入肯定很慢,更糟糕的是如此之多的字型需要瀏覽器去渲染,渲染也會非常慢。
為了解決這個問題,我們可以選擇只渲染少量的、部分的文字,假設50個字,那麼字型庫就會小到幾十K了,相當於一個小圖片而已。
但破解思路也很簡單,通過fonttools類工具將ttf檔案轉成ttx檔案開啟後,什麼都明白了!
ttx程式碼:
看到了嗎,ed12的編碼就是“是”字的unicode編碼,這樣一來,爬蟲只要把採集到""直接替換成“是”字就可以了,以此類推。
這可如何是好呢?
如果讓“是”字的編碼隨機變化,但字型資訊不變,瀏覽器渲染出來還是“是”字那不就完美了。
於是,每個網頁載入的時候,都隨機載入了一套字型庫,字型庫的內容還是50個字,但每個字的順序編碼都是變化的,爬蟲也就無法用直接替換的方式進行採集了。
但還有可能被破解:還是跟ttx有關,雖然我們打亂了關鍵字的編碼順序,但是每個字對應的字型資訊是不變的,例如,“是”字一共有9劃,每一筆劃都有相應的x、y座標資訊,瀏覽器正是根據這些筆劃資訊渲染出對應的字的,看圖:
爬蟲先手動下載了一個ttf檔案,然後根據ttf檔案中的文字圖形位置再爬蟲程式碼中做一個對映,然後使用程式動態獲取到採集的每一篇文章,使用fonttools類工具來迴圈對比本地之前下載的標本中的字型資訊,對比一直,那就是某一個字,如此一來,反爬就輕鬆被破了。
再次升級:
既然爬蟲對比字型資訊,那我就把字型的資訊給你隨機了,讓字變形,這樣你就無法對比了,歐耶。看下變形後的圖片:
變形後的字型,即便是下載了當前文章的字型檔,也需要手動去做字型和字的對映,那麼多文章呢,手工匹配,顯然是不可能的了。事實上,我們準備了幾千套的字型,用於應對爬蟲的採集,每次重新整理文章,字型庫就會更換,每篇文章的字型庫都不一樣,但是替換的文字都是一樣的,這樣以來,爬蟲採集的難度就越來越高了。
還有更為高階的反爬思路:
大概:基於微軟雅黑字型檔資訊,抽取其中的關鍵字的字型資訊,然後隨機生成上千套字型檔,同時做好字與編碼和字型檔檔案的mapping關係,持久化到資料庫,然後文章顯示時隨機從庫中查詢出一套字型檔,並把文章中的關鍵字替換成Unicode編碼!
反爬本來就是不歸路,沒有終點,有反爬就有反反爬;
除了這種技術性的對抗,我們還可以採用WAF進行防爬蟲,比如ShareWAF就有很好的防爬蟲能力。
最後,我想說的是:最好的方案,就是讓爬蟲採集的成本不斷增加,直到放棄,那麼反爬也就算那是成功了。
-
1 #
-
2 #
這種是防爬蟲措施確實不實用!畢竟還有很多搜尋引擎爬蟲呢!內容再好也不能展示出來,活在自我的世界確實很好!
-
3 #
爬蟲截圖文字,然後字型識別
-
4 #
沒用的,只要最終能呈現就能爬到,模擬完整的瀏覽器訪問就好了
-
5 #
爬蟲這行當,技術越高,吃牢飯越快
-
6 #
可以將加密字截成圖片呼叫百度文字識別。或者是用機器學習訓練漢字識別模型。一勞永逸破解任何字型加密。
-
7 #
我已破解過字型加密方式。
-
8 #
只要人看得懂,都不是問題。既然都這樣了,直接輸出動態圖片不就好了,矩陣玩起來比向量字型更帶勁(以前的字型本來就不是向量而是點陣圖)。但是人可以看懂啊,機器也可以解決!
-
9 #
其實,我不爬你的原檔案,直接爬你display的buffer,你幹啥都沒用,等於就是使用者瀏覽的行為了。
-
10 #
用ai爬蟲自學習,只要是展示出來什麼加密都沒用
-
11 #
瀏覽器渲染截圖識別文字不可以嗎??
-
12 #
事實上這也只是增加了採集成本而已,直接調取掃描文字也一樣採集
-
13 #
字型可以根據字形去分析
-
14 #
沒用,只要你展示了,就相當於你把內容公開了。最不濟就是截圖再OCR,關鍵是成本問題,值不值(反正是機器在做.....)
有多大效率?現在可以在簡單機器學習的基礎上進行內容切割截圖識別了,你要付出多大成本這麼幹