爬蟲和反爬蟲是一條很長的路,遇到過js加密,flash加密、重點資訊生成圖片、css圖片定位、請求頭.....等手段;今天我們來聊一聊字型;
那是一個偶然我遇到了這個網站,把價格資訊全加密了;瀏覽器展示:
檢視原始碼後是這樣:
當時突然恍然大悟,以為不就是把價格換成 &#xxxxx: .. 字元實體了嘛 我轉下就行了;(注:大家可能對轉義字元(實體名稱)比較熟悉 比如雙引號對應" ,字元實體呢就 &#開頭 ; 結尾 中間那些是ASCII碼 ;我這個示例中又有點不一樣的是 以x開頭 表明是16進位制的 ASCII碼;詳解:http://www.w3school.com.cn/html/html_entities.asp 和
http://www.w3school.com.cn/tags/html_ref_ascii.asp) ;於是開始了轉碼。。。。
這是什麼鬼,難道我的判斷有誤。當我開啟瀏覽器除錯介面發現
也是亂碼,我在介面上copy金額黏貼到記事本看看
也是亂碼說明上面的推斷是沒有錯的,他應該就是在顯示上做了什麼處理;
在找找發現一段鬼鬼祟祟的程式碼;給price設定了一個叫zhongshugui的字型,但是好好的字型為啥要用base64 不用 http載入,http載入貌似可以用瀏覽器快取的不是更好,base64 的話我每次瀏覽一個網頁不都是要重新載入一下;莫非他不想快取就是每次載入都不一樣,經各種重新整理後發現確實每次都生成不同檔案;
既然感覺字型有問題 那我們就解析出來看看是啥,
這些0~9正好和介面上的html字元實體編碼一一對應;所以這個加密方式就是 html寫對應的HTML實體並與字型裡的ASCII對應,自定義字型檔案 以base64的方式內嵌到html裡 ;每個頁面隨機生成不同的字型(就是字型裡的ASCII);上面那個是為了寫帖子自己仿造原網站做的例子;
C#解析字型的類在System.Windows.Media名稱空間下Fonts類:
https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.media.fonts?view=netframework-4.8
好睏。午休去了;