前言

考点:

  • pickle系列化文件
  • 坐标画图

正文

开局是一个png图片但是打不开

第一感觉肯定是丢010,看到JFIF然后搜FFD9也搜到了,知道这个图片应该是JPG,所以文件头改成FFD8

改成

图片可以看了

不过没啥用,刚刚看到FFD9后面的一大串数据,才是这道题的重点

把后面部分拖出去保存为一个文件,由于不知道是什么文件kali的file也识别不了是什么文件

后面看了wp才知道是pickle序列化的文件

来说一下pickle,pickle是python中提供序列化和反序列化操作的一个库,其中对于把对象跟硬盘交互的有两个函数

dump()方法:pickle.dump(obj, file,
[,protocol])
注释:序列化对象,将对象obj保存到文件file中去。
load()方法:pickle.load(file)
注释:反序列化对象,将文件中的数据解析为一个python对象。

这个文件就是pickle dump之后的文件,至于怎么看的我也不知道,我看它特征就是16进制的数据中有大量的4B并且都均匀分布我瞎说的啊

然后现在有文件了也有pickle了,就调用它的load方法把序列化后的字符串反序列化回来看看是啥

import pickle  
with open("1","rb+") as fp: #pickle序列化之后转化回字符串
    a=pickle.load(fp)
    pickle=str(a)
    with open("pickle.txt","w") as fw:
        fw.write(pickle)

然后拿到

这一大片乱糟糟的数据,仔细分析都是挺有规律的,[]包含了一堆(,'')格式的数据,猜测并且数字在增加,增加到一定幅度了就继续回来,然后继续增加,猜测是一幅图

这里不用PIL画图,因为不知道怎么画带有不同符号的图,像画二维码啊普通图啊都是操作像素的说到底还是菜

然后就用了python原始的字符串拼接然后打印的方法,跟上面的脚本合并之后就是

import pickle  
with open("1","rb+") as fp: #pickle序列化之后转化回字符串
    a=pickle.load(fp)
    pickle=str(a)
    with open("pickle.txt","w") as fw:
        fw.write(pickle)

with open('pickle.txt','r') as f:  #按照字符串来打印出画面
    abc=f.read()[3:-4]
    a=abc.replace("[","").replace(',','').replace(']','').replace('\'','').replace("    ",' ').replace('  ',' ').split(') (')
    text=''
    i=0
    tmp=0
    while i <(len(a)-1):
        b=a[i].split(' ')
        c=a[i+1].split(' ')
        i+=1
        if(int(b[0])>int(c[0])):
            for k in range(tmp,int(b[0])):
                text+=' '
            print(text+b[1])
            text=''
            tmp=0
            continue
        for j in range(tmp,90):
            if(int(b[0]) != j):
                text+=' '
            else:
                text+=b[1]
                tmp=j+1
                break

然后跑出这么一幅图

描一下

所以flag是

flag{a273fdedf3d746e97db9086ebbb195d6}
说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...