• IceCTF-Matrix


    解题思路:

    参考了鸽子小姐姐的脚本:https://zhuanlan.zhihu.com/p/22678856

    具体题目就不贴了。

    题目中提示将问题图像化,猜测是将这些16进制数转化为图像,尝试将16进制转换为二进制

    乍一看是不是有点像一个二维码,接下来就是具体将0转化为白色,1转化为黑色了。

    这里贴一下鸽子小姐姐的代码:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from PIL import Image
    import numpy as np
     
    def hex2bin(hexmat):
        binmattemp = [bin(m)[2:] for m in hexmat]       #全转成二进制
        rowlen = max([len(m) for m in binmattemp])      #取最宽的值
        binmat = [[0]+[int(b) for b in row.zfill(rowlen)] for row in binmattemp]        #用0补齐
     
        print rowlen+1, 'x', len(binmat)
        for i in xrange(len(binmat)):
            print ''.join([str(b) for b in binmat[i]])
     
        return binmat, rowlen+1, len(binmat)
     
    def rm_col(binmat, col):        #移除指定的列
        return [row[:col]+row[col+1:] for row in binmat]
     
     
    def make_bw_img(binmat, w, h, outfilename, blackbit=0):
     
        bwmat = [[0 if b==blackbit else 255 for b in row] for row in binmat]    #用255表示白,0表示黑
     
        imagesize = (w, h)
        img = Image.fromarray(np.uint8(np.array(bwmat)))
        img.save(outfilename)
     
    if __name__ == '__main__':
        hexmat = [0x00000000,
                  0xff71fefe,
                  0x83480082,
                  0xbb4140ba,
                  0xbb6848ba,
                  0xbb4a80ba,
                  0x83213082,
                  0xff5556fe,
                  0x00582e00,
                  0x576fb9be,
                  0x707ef09e,
                  0xe74b41d6,
                  0xa82c0f16,
                  0x27a15690,
                  0x8c643628,
                  0xbfcbf976,
                  0x4cd959aa,
                  0x2f43d73a,
                  0x5462300a,
                  0x57290106,
                  0xb02ace5a,
                  0xef53f7fc,
                  0x00402e36,
                  0xff01b6a8,
                  0x83657e3a,
                  0xbb3b27fa,
                  0xbb5eaeac,
                  0xbb1017a0,
                  0x8362672c,
                  0xff02a650,
                  0x00000000]
     
        binmat, w, h = hex2bin(hexmat)
        binmat = rm_col(binmat, 22)         #发现第七行和第22行多余,故删除
        binmat = rm_col(binmat, 7)
        make_bw_img(binmat, w, h, 'matrix_rmcol.png', blackbit=1)
  • 相关阅读:
    第二章—数据类型字符串str
    第二章—数据类型列表list
    第二章—编码
    第二章——进制
    ConfigParser模块
    描述符__get__,__set__,__delete__
    面向对象 ,特殊成员和魔法方法
    异常处理
    反射
    绑定方法与非绑定方法
  • 原文地址:https://www.cnblogs.com/HKCZ/p/10931872.html
Copyright © 2020-2023  润新知