Bugku 只有黑棋的棋盘 WriteUp

题目到手一个加密的flag压缩包,还有一个png图片,那么密码应该就是在图片里。png用文本编辑器打开,是由zip的标志的。不过用binwalk和foremost就是分割不出来。那就要思考压缩包是否损坏的问题

观察十六进制数据,可以看到压缩包的文件头为504B0506这是错误的,这是压缩包的文件为格式,需要改为504B0304.修改完成后就可以正常的将压缩包分割出来。是有关密码的txt文档。

上面两个省略号提示我们需要按照提示继续写下去

JKLMNOPQRSTUVWXYZAB
IJKLMNOPQRSTUVWXYZA
HIJKLMNOPQRSTUVWXYZ
GHIJKLMNOPQRSTUVWXY
FGHIJKLMNOPQRSTUVWX
EFGHIJKLMNOPQRSTUVW
DEFGHIJKLMNOPQRSTUV
CDEFGHIJKLMNOPQRSTU
BCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRS

 再去参考这个图片

 可以按照棋子的位置去对应文本,找出密码。从1开始对于ABCDEFGHIJKLMNOPQRS那么 第一个就是G以此类推。最后密码为:GOODGOPLAY

解压出来的图片修改宽高就行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用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的棋盘。当鼠标左键被按下时,会在鼠标点击的位置绘制一个黑棋子;当鼠标右键被按下时,会在鼠标点击的位置绘制一个白棋子。你可以根据自己的需要修改代码来实现更复杂的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值