写一下关于对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的解码就完成了
"""

然后我想说的是,不要执着于代码,思路才是灵魂.我写下来主要是为了自己忘记了,以后遇到这种恶心玩意就麻烦了.毕竟好记性不如烂笔头.

不用点赞.谢谢!

 

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