寫一下關於對svg的解密

其實很多的網站也陸陸續續開始使用非人道反爬來限制爬蟲了,常見的css反爬,字體反爬(就是頁面源碼顯示什麼亂七八糟的文字,但是在用戶面前還是顯示正常的,比如1 在源碼顯示可能是或者其他類似這樣的字符),還有svg(數字變成svg的小圖片,比較出名的有大衆點評),js混淆加密,base64編碼,sha1加密等等,噁心的要死(加密的代碼還放的賊隱蔽,我吐了).

今天我所帶來的就是關於大衆或者http://www.porters.vip/confusion/food.html這個別人的demo.裏面的svg的破解.

主要是總結!!!!

今天的案例就是http://www.porters.vip/confusion/food.html這個url上的demo數據作爲起始點.

 

 

不多說上解密代碼:

from lxml import etree
#這個string裏面的就是 http://www.porters.vip/confusion/food.html demo的 svg數據

string = """
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="650px" height="230.0px">
<style>text {font-family:PingFangSC-Regular,Microsoft YaHei,'Hiragino Sans GB',Helvetica;font-size:14px;fill:#666;}</style>
   <text x="14 28 42 56 70 84 98 112 126 140 154 168 182 196 210 224 238 252 266 280 294 308 322 336 350 364 378 392 406 420 434 448 462 476 490 504 518 532 546 560 574 588 602 616 630 644 658 672 686 700 714 728 742 756 770 784 798 812 826 840 854 868 882 896 910 924 938 952 966 980 994 1008 1022 1036 1050 1064 1078 1092 1106 1120 1134 1148 1162 1176 1190 1204 1218 1232 1246 1260 1274 1288 1302 1316 1330 1344 1358 1372 1386 1400 1414 1428 1442 1456 1470 1484 1498 1512 1526 1540 1554 1568 1582 1596 1610 1624 1638 1652 1666 1680 1694 1708 1722 1736 1750 1764 1778 1792 1806 1820 1834 1848 1862 1876 1890 1904 1918 1932 1946 1960 1974 1988 2002 2016 2030 2044 2058 2072 2086 2100 " y="38">154669136497975167479825383996313925720573</text>
   <text x="14 28 42 56 70 84 98 112 126 140 154 168 182 196 210 224 238 252 266 280 294 308 322 336 350 364 378 392 406 420 434 448 462 476 490 504 518 532 546 560 574 588 602 616 630 644 658 672 686 700 714 728 742 756 770 784 798 812 826 840 854 868 882 896 910 924 938 952 966 980 994 1008 1022 1036 1050 1064 1078 1092 1106 1120 1134 1148 1162 1176 1190 1204 1218 1232 1246 1260 1274 1288 1302 1316 1330 1344 1358 1372 1386 1400 1414 1428 1442 1456 1470 1484 1498 1512 1526 1540 1554 1568 1582 1596 1610 1624 1638 1652 1666 1680 1694 1708 1722 1736 1750 1764 1778 1792 1806 1820 1834 1848 1862 1876 1890 1904 1918 1932 1946 1960 1974 1988 2002 2016 2030 2044 2058 2072 2086 2100 " y="83">560862462805204755437571121437458524985017</text>
   <text x="14 28 42 56 70 84 98 112 126 140 154 168 182 196 210 224 238 252 266 280 294 308 322 336 350 364 378 392 406 420 434 448 462 476 490 504 518 532 546 560 574 588 602 616 630 644 658 672 686 700 714 728 742 756 770 784 798 812 826 840 854 868 882 896 910 924 938 952 966 980 994 1008 1022 1036 1050 1064 1078 1092 1106 1120 1134 1148 1162 1176 1190 1204 1218 1232 1246 1260 1274 1288 1302 1316 1330 1344 1358 1372 1386 1400 1414 1428 1442 1456 1470 1484 1498 1512 1526 1540 1554 1568 1582 1596 1610 1624 1638 1652 1666 1680 1694 1708 1722 1736 1750 1764 1778 1792 1806 1820 1834 1848 1862 1876 1890 1904 1918 1932 1946 1960 1974 1988 2002 2016 2030 2044 2058 2072 2086 2100 " y="120">671260781104096663000892328440489239185923</text>
   <text x="14 28 42 56 70 84 98 112 126 140 154 168 182 196 210 224 238 252 266 280 294 308 322 336 350 364 378 392 406 420 434 448 462 476 490 504 518 532 546 560 574 588 602 616 630 644 658 672 686 700 714 728 742 756 770 784 798 812 826 840 854 868 882 896 910 924 938 952 966 980 994 1008 1022 1036 1050 1064 1078 1092 1106 1120 1134 1148 1162 1176 1190 1204 1218 1232 1246 1260 1274 1288 1302 1316 1330 1344 1358 1372 1386 1400 1414 1428 1442 1456 1470 1484 1498 1512 1526 1540 1554 1568 1582 1596 1610 1624 1638 1652 1666 1680 1694 1708 1722 1736 1750 1764 1778 1792 1806 1820 1834 1848 1862 1876 1890 1904 1918 1932 1946 1960 1974 1988 2002 2016 2030 2044 2058 2072 2086 2100 " y="164">684431081139502796807382</text>
</svg>
"""
y = 141 #15 #141 測試數據
x = 330 #7 #330 測試數據
tree = etree.HTML(string)
s38 = tree.xpath('//text[@y="38"]/text()')[0]
s83 = tree.xpath('//text[@y="83"]/text()')[0]
s120 = tree.xpath('//text[@y="120"]/text()')[0]
s164 = tree.xpath('//text[@y="164"]/text()')[0]

if y <= 42:
    print("數字:",s38[x // 14])
#這個 // 14 不是固定的,也可能是固定的,詳細看看svg內容的font-size屬性或者查看svg的一行行數字的增減找規律
elif y <=92:
    print("數字:", s83[x // 14])
elif y <= 128:
    print("數字:", s120[x // 14])
elif y <= 164:
    print("數字:", s164[x // 14])


#總結下基本的步驟

"""
1.取到 class名稱對應下的x 軸 和 y軸,將裏面的 - 號弄掉
2.獲取svg裏面的數據,用xpath或者re提取出來,取得條件是根據y的值來取
3.以y軸爲基準,進行判斷,如果小於或者等於某一個y軸的數據,那麼就讓x進去 // 一個固定參數,具體大概就在svg頁面,或者
你也可以查看它羅列出的所有數字,並且找出規律,然後進行 //即可!
4.到這裏基本svg的解碼就完成了
"""

然後我想說的是,不要執着於代碼,思路纔是靈魂.我寫下來主要是爲了自己忘記了,以後遇到這種噁心玩意就麻煩了.畢竟好記性不如爛筆頭.

不用點贊.謝謝!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章