爬蟲和反爬蟲是一條很長的路,遇到過js加密,flash加密、重點信息生成圖片、css圖片定位、請求頭.....等手段;今天我們來聊一聊字體; 那是一個偶然我遇到了這個網站,把價格信息全加密了;瀏覽器展示: 查看源碼後是這樣: 當時突然恍然大悟,以為不就是把價格換成 &#xxxxx: .. 字元實體了 ...
爬蟲和反爬蟲是一條很長的路,遇到過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
好睏。午休去了;