攻防世界 misc 掀桌子

通过这一题学一下python里面正则的用法(解放双手,咳,好好说话不开车

题目描述:菜狗截获了一份报文如下c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2,生气地掀翻了桌子(╯°□°)╯︵
┻━┻

不知道谁出的题,还用颜文字口区
一串字符,应该跟16进制有关。感觉就是把hex形式的ASCII码转为对应的字符,但是这些hex数字都大于128,先减128试试。
写了个python脚本:

ss="\xc8\xe9\xac\xa0\xc6\xf2\xe5\xf3\xe8\xc4\xef\xe7\xa1\xa0\xd4\xe8\xe5\xa0\xe6\xec\xe1\xe7\xa0\xe9\xf3\xba\xa0\xe8\xea\xfa\xe3\xf9\xe4\xea\xfa\xe2\xea\xe4\xe3\xea\xeb\xfa\xeb\xe3\xf5\xe7\xe9\xf3\xe4\xe3\xe8\xea\xf9\xea\xf3\xe2\xe4\xe6\xf2"
flag=""
for i in ss:
	flag+=chr(ord(i)-128)
print(flag)
	

因为本蒟蒻python不熟,写的时候就一直在想,把"\x"插到字符串有没有语法可以一步解决…太麻烦了一个个插。
后面看某个DALAO的wp,发现人家用了python里面的re。
后面根据理解重写了脚本:

import re
ss="c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"
yy=re.findall(r'.{2}',ss)
flag=""
for i in yy:
	flag+=chr(int(int(i,16)-128))
print(flag)

简单解释一下,import re表示导入正则
re.findall的用来匹配,r’.{2}'表示匹配任意字符,匹配两次返回,注意,findall返回是以列表的形式。

1)正则表达式含义

. # 点可代表一切字符

\ # 起转义作用

[…] # 指代方括号中的任意字符

\d # 指代数字0-9

\D # 指代非数字

\s # 指代一切空格,包括tab制表符、空格、换行等

\S # 指代非空格

\w # 指代大小写字母、数字和下划线

\W # 指代非大小写字母、数字和下划线

  • # 匹配前面字符 >=0 次
  • # 匹配前面字符1次及以上

? # 匹配前面字符0次或1次

{m} # 匹配m次

{m,n} # 匹配m到n次

{m,} # 至少匹配m次

2)结合re模块完成字符串的匹配
找re.findall(pattern, string, flags=0)

pattern–>正则表达式

string–>需要处理的字符串

flags–>说明匹配模式,如是否大小写re.I
更多点击此处

跑出结果:Hi, FreshDog! The flag is: hjzcydjzbjdcjkzkcugisdchjyjsbdfr

发布了42 篇原创文章 · 获赞 3 · 访问量 1175

猜你喜欢

转载自blog.csdn.net/weixin_43092232/article/details/104452377