攻防世界misc中的gif解题脚本

	不会吧,不会吧,不会还有人在手动吧图片转为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 版权协议,转载请附上原文出处链接和本声明。