Misc-关于图片转码的新思路。

题目来自于XCTF的gif,题目下载下来之后发现是一堆黑白块,而且有104张,很显然8整除104,所以猜测这个可能是转成了01串,具体什么颜色转成什么数字测试一下即可,可以两种情况试一下。 

 

编写解密脚本如下: 

解密脚本:
from PIL import Image
path = 'C:\\Users\\DELL\\Desktop\\gif\\{index}'
result=''
num=0   #此参数为计数参数,每八个就加一个空格,方便我们辨认。
for i in range(0, 104):
    real_path = path.format(index=i) + '.jpg'
    im = Image.open(real_path, 'r')
    pix=im.load()
    Color=pix[0,0][0]    #提取出每张图片的第一个色素块,帮助我们判断。黑色的RGB值为255,因为是个三位数字,所以我们得取出第一个值
    if Color==255:
        result+='0'
        num+=1
    else:
        result+='1'
        num+=1
    if num==8:
        result+=' '
        num=0

print(result)

 得到01字符串:

01100110 01101100 01100001 01100111 01111011 01000110 01110101 01001110 01011111 01100111 01101001 01000110 01111101 

然后尝试去解码字符(感觉应该是ASCII码),可以先试一试第一个数字,看他解出来的字符是不是f,以此来判定黑色对应的是0还是1。 

 最终的转码加解码的代码如下:这里是直接把转成字符串的代码嵌入到了上面代码中的for循环里面。

from PIL import Image
path = 'C:\\Users\\DELL\\Desktop\\gif\\{index}'
result=''
num=0   #此参数为计数参数,每八个就加一个空格,方便我们辨认。
for i in range(0, 104):
    real_path = path.format(index=i) + '.jpg'
    im = Image.open(real_path, 'r')
    pix=im.load()
    Color=pix[0,0][0]    #提取出每张图片的第一个色素块,帮助我们判断。黑色的RGB值为255,因为是个三位数字,所以我们得取出第一个值
    if Color==255:
        result+='0'
        num+=1
    else:
        result+='1'
        num+=1
    if num==8:
        print(chr(int(result,2)),end='')
        result=''
        num=0

 

猜你喜欢

转载自blog.csdn.net/hacker_zrq/article/details/120744563
今日推荐