import base64
from fontTools.ttLib import TTFont
data = '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ZABlAGQAUwBrAHkALQBSAGUAZwB1AGwAYQByAGgAdAB0AHAAOgAvAC8AZwBsAGkAZABlAGQAcwBrAHkALgBjAG8AbQAvAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZQAAAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUHdW5pNjMwMQd1bmk4QkNBB3VuaTg2ODEHdW5pOEQzNAd1bmk1QjU3B3VuaTJGOTYHdW5pNkNCRAd1bmk1QzNFB3VuaTY1NzQHdW5pNzJDNAd1bmkyRjg0B3VuaTJGNDMHdW5pODU5Qgd1bmk4NkRCB3VuaTYwNjQHdW5pNzg4Qwd1bmk3N0IzB3VuaTU1QjcHdW5pNUI3RAd1bmk3RUJGB3VuaTUyMzAHdW5pMkVEOAd1bmk4MjJBB3VuaTc3NDEHdW5pNTE5OQd1bmk2QzdFB3VuaTlBNzQHdW5pNjBFRAd1bmk4RkE5B3VuaTgxNTEHdW5pNTk4Mgd1bmk3RUNBB3VuaTVFNEMHdW5pOTVFQQd1bmkyRjU2B3VuaTkwRTcHdW5pNTFDRgd1bmk0RjFBB3VuaTg2OEEHdW5pNURFNgd1bmk2OUZEB3VuaTVDNjEHdW5pNjc2MQd1bmk4RDU0B3VuaTVFNDIHdW5pN0FFNQd1bmk4QkUxB3VuaTVGODEHdW5pNTQzOQd1bmk4NUQ1B3VuaTUzNzAHdW5pN0YwNQd1bmk3QjhEB3VuaTUxQTQHdW5pNTc4NAd1bmk1MzFEB3VuaTUyQzcHdW5pNUZDNgd1bmk4M0IxB3VuaTRGMUYHdW5pNUU3RAd1bmk5NzVCB3VuaTgwOUEHdW5pNTU0Mwd1bmk2M0UxB3VuaTdCOTQHdW5pN0JBRAd1bmk2NEFFB3VuaTk2NEQHdW5pNkIzMgd1bmk5NDkyB3VuaTU5ODYHdW5pNzgzNAd1bmk4NDYzB3VuaTZGNEQHdW5pNjNGNAd1bmk1RTI3B3VuaThGRUEHdW5pNzNFMAd1bmk3RUU1B3VuaTkwOTMHdW5pOTRGMQd1bmk1MkIxB3VuaTVCQjYHdW5pNjAyNQd1bmk1NTlEB3VuaTUxODAHdW5pNTE4OAd1bmk4OEY4B3VuaTRGRDcHdW5pNTFBMAd1bmk5MUNFB3VuaThCRUYHdW5pNTdBNgd1bmk1NTZBB3VuaTVDMjQHdW5pNTUyQwd1bmk1RTEwB3VuaTYwRTcHdW5pNzBFNg=='
base64_data = base64.b64decode(data)
print(base64_data)
#1.先保存字体文件或者获取字体文件
with open('data.ttf', 'wb') as f:
f.write(base64_data)
font = TTFont('./data.ttf')
font.saveXML('123.xml') #保存成xml文件来查看分析字体的状态
uni_list1 = font.getGlyphOrder()[1:] #发现第一个没用就从第二个开始
utf8list = ['' + uni[3:] for uni in uni_list1] #转换后得到网页上的编码格式
word_list = '的是上近小高不着八十右短三少二七九更呢得低一很大多左好长了坏五地和远下四六矮' # 手动输入字体编码对应的汉字
list1=[]
u=-1
for i in utf8list:
dact1={}
u+=1
dact1[i]=word_list[u]
list1.append(dact1)
print(list1) #把编码和字一一对应最后在去替换网页上的数字
from fontTools.ttLib import TTFont def comp(a, d): #对比函数 if len(a) != len(d): return False else: mark = 1 # 1 True 0 False for i in range(len(a)): if abs(a[i][0] - d[i][0]) < 45 and abs(a[i][1] - d[i][1]) < 45: pass else: mark = 0 break return mark font = TTFont('./wKgHGFsUz0eAJlMWAABj9Bn3RMw39.ttf') u_list = font.getGlyphOrder()[1:] # 获取字体的编码 word_list = '的是上近小高不着八十右短三少二七九更呢得低一很大多左好长了坏五地和远下四六矮' # 字体编码对应的汉字 unf8List = ['' + uni[3:] for uni in uni_list2] be_p1 = [] # xy的信息 ->38个字符串 # 字体坐标偏移 for uni in u_list: p1 = [] # xy信息 glyf获取文件里的坐标 p = font['glyf'][uni].coordinates # 获取对象 X, y的信息 返回一个GlyphaCoordinates对象 for f in p: p1.append(f) be_p1.append(p1) print(be_p1) #得到字的坐标 on_p1 = [] for i in uni_list2: pp1 = [] p = font2['glyf'][i].coordinates for f in p: pp1.append(f) on_p1.append(pp1) print(on_p1) # 坐标系对象 n2 = 0 x_list = [] for d in on_p1: # print(d) n2 += 1 n1 = 0 for a in be_p1: n1 += 1 if comp(a, d): # print(uni_list2[n2 - 1], word_list[n1 - 1]) x_list.append(word_list[n1 - 1]) print(x_list) #得到字 for i in range(len(unf8List)): # text1 = text1.replace(unf8List[i].lower()+';', x_list[i]) print(unf8List[i].lower()+';', x_list[i]) #把字和编码凑到一起后面做替换
for i in range(len(sho_info)):
capita = re.findall(r'人均(.+?)', sho_info[i])[0]
cooment = re.findall(r'(.+?)条评价', sho_info[i])[0]
addres = re.findall(r'(.+?)', sho_info[i])[0]
title = re.findall(r'(.+?)
', sho_info[i])
print(title)
for i in range(10):#循环的次数是整个字段的长度 把utf的编码替换成字
cooment = cooment.replace(utf8list[i], wordlist[i])
capita = capita.replace(utf8list[i], wordlist[i])
for i in range(len(self.utf8list2)):
if self.utf8list2[i] in addres:
addres = addres.replace(utf8list2[i], wordlist[i])
print(addres)
先用网页去定位加密位置
找到svg文件 food.css
对应坐标
找到svg文件
找到y对应而且小于那个值,x是除以14后取整,14是根据前面的步长来的
class SVG_Font(object):
def __init__(self, name):
self.name = name
self.main()
def Extreact(self):
'''
提取 svg文件 与css文件里面内容
:return:
'''
svglinke = 'http://www.porters.vip/confusion/font/food.svg'
csslinke = 'http://www.porters.vip/confusion/css/food.css'
self.svg_txt = requests.get(svglinke).text
css_txt = requests.get(csslinke).text
self.css_txt = re.sub(r'\s', '', css_txt)
def find_xy(self, text1, class_values):
'''
x, y坐标获取
:param text1:
:param class_values:
:return:
'''
re_sententce = '.%s{background:-(\d+)px-(\d+)px;}' % class_values
pattern = re.compile(re_sententce)
res = pattern.findall(text1)
return res[0]
def find_font_size(self, text1):
'''
提取字体大小
:param text1:
:return:
'''
fs = re.compile(r'font-size:(\d+)px')
res = fs.findall(text1)
return int(res[0])
def InitSvg(self):
'''
svg文件处理 y 和数值 区分
:return:
'''
text = re.findall(r'y="(.+?)">(.+?)', self.svg_txt)
self.list_y = []
self.list_text = []
for i in range(len(text)):
self.list_y.append(text[i][0]) # 坐标
self.list_text.append(text[i][1])
# [(坐标, 数值)]
def SvgParse(self):
'''
svg 解析
:return:
'''
x, y = self.find_xy(self.css_txt, self.name)
real_y = [i for i in self.list_y if y <= i][-1] # -1最后一个
# print(real_y)
real_text = self.list_text[self.list_y.index(real_y)]
# print(real_text)
# x坐标 / 字体大小
index = int(int(x) / 14) # x坐标 字体的大小 //
print('svg类名:' + self.name + '\n' + '坐标:' + str((x, y)) + '\n' +
'字体大小: ' + str(self.find_font_size(self.svg_txt)) + '\n' +
'映射字符: ' + str(real_text[index]))
def main(self):
self.Extreact()
self.InitSvg()
self.SvgParse()
svg = SVG_Font('vhkvxd') #字体文件的类名
先全局搜索
1,decode
2,decry
3.JSON.pares
4,写油猴脚本去hook JSON
应对措施:
(1)下载woff文件,转为tff文件
(2)用百度字体编辑器打开tff文件,确定其unicode与实际值的映射关系
(3) 将下载的HTML内容按照映射关系替换
(4)解析HTML并获取正确的数据
注意tff文件的动态生成
2.背景
3.伪类
4利用元素定位
5.利用字符切割