BugkuCTF-MISC题只有黑棋的棋盘(writeup)

本文介绍了在Bugku CTF中解决一个MISC题目——只有黑棋的棋盘的过程。解题涉及手动修复压缩包、分析图片属性、寻找隐藏信息以及使用Stegsolve等工具进行隐写术检查。最终,通过修改压缩包文件头,找出隐藏的密码,并使用该密码解压得到图片,通过调整图片高度找到隐藏的flag。
摘要由CSDN通过智能技术生成

手动分离压缩包注意:zip压缩包文件头格式为504B0304,之间包含504B0102,文件以504B0506****结尾,注意这类格式。

解题流程

题目是1个压缩包,还有提示:动手修复。

1.先把压缩包解压,得到图片和另个压缩包。压缩包需要密码,图片是一个只有黑棋的棋盘。

2.考虑压缩包为伪加密,改完后发现打不开。看样子还得找密码。

3.查看图片和压缩包属性,没有任何发现。
怀疑图片隐写,用Stegsolve等工具查看了一遍,没有任何发现。

4.考虑题目提示动手修复,应该是有需要改字节的地方。因此把最开始的压缩包放到010编辑器里查看。发现里面包含许多压缩包文件。
在这里插入图片描述
5.发现其内一个压缩包文件头被修改了。将其改回正常的zip压缩包文件头。
在这里插入图片描述
6.在010里右键选择——保存选择,另存为123.zip文件。

通过winrar解压出password.txt

在这里插入图片描述
7.根据规律,写出10行。

你可以使用Python的GUI库(如Tkinter)创建一个窗口,然后在窗口中绘制棋盘。当鼠标左键被按下时,你可以在鼠标点击的位置绘制一个黑棋子;当鼠标右键被按下时,你可以在鼠标点击的位置绘制一个白棋子。以下是一个简单的示例代码: ```python import tkinter as tk # 棋盘大小 BOARD_SIZE = 19 # 棋子大小 STONE_SIZE = 20 class Board(tk.Canvas): def __init__(self, master=None, **kwargs): tk.Canvas.__init__(self, master, **kwargs) self.master = master self.stones = [[None] * BOARD_SIZE for i in range(BOARD_SIZE)] self.bind("<Button-1>", self.place_black_stone) self.bind("<Button-3>", self.place_white_stone) def draw_board(self): for i in range(BOARD_SIZE): x0, y0, x1, y1 = self.get_cross_point(i, 0), self.get_cross_point(i, BOARD_SIZE - 1) self.create_line(x0, y0, x1, y1) x0, y0, x1, y1 = self.get_cross_point(0, i), self.get_cross_point(BOARD_SIZE - 1, i) self.create_line(x0, y0, x1, y1) for i in [3, 9, 15]: for j in [3, 9, 15]: x, y = self.get_cross_point(i, j) self.create_oval(x - 2, y - 2, x + 2, y + 2, fill="black") def get_cross_point(self, i, j): x = (i + 1) * self.master.winfo_width() // (BOARD_SIZE + 1) y = (j + 1) * self.master.winfo_height() // (BOARD_SIZE + 1) return x, y def place_black_stone(self, event): i, j = self.get_clicked_cross_point(event) if self.stones[i][j] is None: x, y = self.get_cross_point(i, j) self.create_oval(x - STONE_SIZE, y - STONE_SIZE, x + STONE_SIZE, y + STONE_SIZE, fill="black") self.stones[i][j] = "black" def place_white_stone(self, event): i, j = self.get_clicked_cross_point(event) if self.stones[i][j] is None: x, y = self.get_cross_point(i, j) self.create_oval(x - STONE_SIZE, y - STONE_SIZE, x + STONE_SIZE, y + STONE_SIZE, fill="white") self.stones[i][j] = "white" def get_clicked_cross_point(self, event): x, y = event.x, event.y i = round(x / self.master.winfo_width() * (BOARD_SIZE - 1)) j = round(y / self.master.winfo_height() * (BOARD_SIZE - 1)) return i, j if __name__ == "__main__": root = tk.Tk() board = Board(root, width=400, height=400) board.draw_board() board.pack() root.mainloop() ``` 这个示例代码使用了Tkinter库创建了一个窗口,并在窗口中绘制了一个大小为19的棋盘。当鼠标左键被按下时,会在鼠标点击的位置绘制一个黑棋子;当鼠标右键被按下时,会在鼠标点击的位置绘制一个白棋子。你可以根据自己的需要修改代码来实现更复杂的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值