不会吧,不会吧,不会还有人在手动吧图片转为01代码吧!
咳咳,就皮一下,各位兄弟莫生气
解题思路:
1. 根据黑白两种图像的sha1值不同区分文件
2. 将第一个图片视为1,另一个视为0 。拼接成01字符串
3. 将01字符串8个一组,分组后视为ASCII码,转码。
4. 得到flag
我看网上好多都是直接手动转的,既然要做这种充满了重复性的枯燥劳动,那还学个啥计算机啊。真是的!
废话不多说,直接上代码:
# -*- coding:utf-8 -*-
import hashlib
def JMSHA1(path):
sha1jiami = hashlib.sha1()
try :
a = open(fr'{path}','rb')
except:
print('文件路径有误,请输入正确路径!')
while True:
b = a.read(128000) #这里就是每次读文件放进内存的大小,小心溢出!
sha1jiami.update(b)
if not b:
break
a.close()
jiamijieguo = sha1jiami.hexdigest()
return jiamijieguo
def show_bin(path):
txt=""
for i in range(0,104):
FileName="{0}".format(i)+".jpg"
sha1=JMSHA1(path+FileName)
if sha1 == "68ac46ac25dfd85a19f52ebb20d07b513d36e8b4":
flag=0
else:
flag=1
txt=txt+"{0}".format(flag)
return txt
txt=show_bin("../../file/gif/")
print(txt)
结果:
D:\python\venv\Scripts\python.exe D:/python/venv/Include/攻防世界/misc/gif.py
01100110011011000110000101100111011110110100011001110101010011100101111101100111011010010100011001111101
Process finished with exit code 0
这一串二进制一开始着实给我整懵逼了,后来看了别人的思路才知道:哦~8位一组,ASCII码转字符,那就好说了,不过网上的在线工具转出来的好像是乱码,不知道咋回事,算了,直接上代码。
group=[]
num=0
for x in txt:
if num%8==0 and num!=0:
group.append(",")
num+=1
group.append(x)
txt="".join(group)
group=txt.split(",")
for x in group:
print(chr(int(x,2)),end="")
得到flag:
D:\python\venv\Scripts\python.exe D:/python/venv/Include/攻防世界/misc/gif.py
01100110011011000110000101100111011110110100011001110101010011100101111101100111011010010100011001111101
flag{FuN_giF}
Process finished with exit code 0
完整代码:
# -*- coding:utf-8 -*-
import hashlib
def JMSHA1(path):
sha1jiami = hashlib.sha1()
try :
a = open(fr'{path}','rb')
except:
print('文件路径有误,请输入正确路径!')
while True:
b = a.read(128000) #这里就是每次读文件放进内存的大小,小心溢出!
sha1jiami.update(b)
if not b:
break
a.close()
jiamijieguo = sha1jiami.hexdigest()
return jiamijieguo
def show_bin(path):
txt=""
for i in range(0,104):
FileName="{0}".format(i)+".jpg"
sha1=JMSHA1(path+FileName)
if sha1 == "68ac46ac25dfd85a19f52ebb20d07b513d36e8b4":
flag=0
else:
flag=1
txt=txt+"{0}".format(flag)
return txt
txt=show_bin("../../file/gif/")
print(txt)
group=[]
num=0
for x in txt:
if num%8==0 and num!=0:
group.append(",")
num+=1
group.append(x)
txt="".join(group)
group=txt.split(",")
for x in group:
print(chr(int(x,2)),end="")
版权声明:本文为my_name_is_sy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。