线索
题目给了密文:
83 89 78 84 45 86 96 45 115 121 110 116 136 132 132 132 108 128 117 118 134 110 123 111 110 127 108 112 124 122 108 118 128 108 131 114 127 134 108 116 124 124 113 108 76 76 76 76 138 23 90 81 66 71 64 69 114 65 112 64 66 63 69 61 70 114 62 66 61 62 69 67 70 63 61 110 110 112 64 68 62 70 61 112 111 112
尝试rot解码
- 最开始尝试rot5,得到的结果没什么意义。后来想到rot13是字母移位13,何不试一下对密文的数字加减13看看结果。减13转ASCII发现前4个数字对应FLAG因此代码如下:
c = "83 89 78 84 45 86 96 45 115 121 110 116 136 132 132 132 108 128 117 118 134 110 123 111 110 127 108 112 124 122 108 118 128 108 131 114 127 134 108 116 124 124 113 108 76 76 76 76 138 23 90 81 66 71 64 69 114 65 112 64 66 63 69 61 70 114 62 66 61 62 69 67 70 63 61 110 110 112 64 68 62 70 61 112 111 112"
c = c.split(" ")
flag = ""
for i in c:
i = int(i) - 13
flag += chr(i)
print(flag)
- 跑出来结果如下:
FLAG IS flag{www_shiyanbar_com_is_very_good_????}
MD5:38e4c352809e150186920aac37190cbc
- 原以为这就是最终的flag了,提交发现不对。意识到尾部的四个?是需要通过现有字符串已知部分和最终的MD5值求解的~
通过md5值爆破字符串中4位未知字符
代码如下,只会这个笨方法,跑出结果大概一两分钟。应该有更优的方法。。。
import hashlib
head = "flag{www_shiyanbar_com_is_very_good_"
tail = "}"
md5 = "38e4c352809e150186920aac37190cbc"
for c1 in range(33,127):
for c2 in range(33,127):
for c3 in range(33,127):
for c4 in range(33,127):
st = head + chr(c1) + chr(c2) + chr(c3) + chr(c4) + tail
a = hashlib.md5()
a.update(st.encode())
if a.hexdigest() == md5:
print(st)
flag{www_shiyanbar_com_is_very_good_@8Mu}