CTF-BugKu-雜項-34-很普通的數獨-獨家腳本解法


2020.09.15

第三十四題 很普通的數獨(ISCCCTF)

https://ctf.bugku.com/challenges#很普通的數獨(ISCCCTF)

  1. zip沒有后綴,winhex打開,發現確實是zip,修改后綴,解壓得到一堆圖片,內容是數獨
  2. 非常壯觀,出題人也是費勁了,這個就是二維碼分成了25部分,把有數字的塗黑,拼到一起就能組成一個二維碼,思路是看來的,但是怎么才能快速完成這一系列的工作呢,怎么能快速獲取黑點呢,全點一遍有點呆吧……
  3. 每一個有九行,如果能選某一行的像素點遍歷,估計就可以實現了,go,
    (n years later……🙄)
    他終於來了,全網獨家腳本,哈哈哈哈哈哈,可能沒人和我這么閑吧哈哈哈哈
    我們知道,每個數獨有九行,我們要得到的是有哪幾行填充了數字,我的思路就是掃描每一格中間的像素,如果是黑色,那就是填充了數字,白色反之
    此時文件結構是這樣的:
# 此腳本用於從數獨圖片獲取密碼,有值為1,無值為0
import os
import cv2
import numpy as np
from PIL import Image

black = (0,0,0) # 黑色RGB
white = (255,255,255) # 白色RGB

# 獲取給定路徑圖片的結果數組
def getBin(picPath):
    image = cv2.imread(picPath)
    height = image.shape[0]  # 圖片寬度
    wide = image.shape[1]  # 圖片高度
    formWide = (wide-6)/9  # 每一格寬度
    res = [] # 結果數組
    tem = '' # 暫存數組
    for i in range(9):
        for j in range(wide-6):
            px = image[int(i*(formWide-1)+(formWide/2)), j+3]
            if (px == white).all() and (j+3)%formWide > (formWide*3/4) and (j+3)/formWide > len(tem):
                tem += '0'
            if (px == black).all() and (j+3) % formWide > (formWide/4) and (j+3) % formWide < (3*formWide/4) and (j+3)/formWide > len(tem):
                tem += '1'
        res.append(tem)
        tem = ''
    return res

# 獲取整合25張圖片,獲取最終結果
def getRes():
    tem = [] # 臨時存儲返回值
    res = [] # 存儲結果數組
    for i in range(5):
        for j in range(5):
            picPath = 'zip/' + str(i*5+j+1) + '.png' # 構造文件名
            tem = getBin(picPath)
            if len(res)==0:
                res = tem
            else:
                if len(res)==(i+1)*9:
                    for x in range(len(tem)):
                        res[(i*9)+x] += tem[x]
                else:
                    for x in range(len(tem)):
                        res.append(tem[x])
    return res

resList = getRes()
resImg = Image.new('RGB',(45,45))
# 繪制圖片
for x in range(45):
    for y in range(45):
        if resList[x][y] == '0':
            resImg.putpixel((x,y),white)
        else:
            resImg.putpixel((x,y),black)
resImg.save('res.png')
  1. 腳本獲取的圖片還是有一些偏差,因為題目給的圖片不規范(不管我的事🥱),我微調腳本之后,得到下圖,QR Search竟然掃不出來,但是騰訊QQ可以,我只能說一句馬老板🐂🍺哈哈哈哈哈,掃碼結果:Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOamJGWnlWMjFHVlUxV1ZqTldNakZIWVcxS1IxTnNhRmhoTVZweVdWUkdXbVZHWkhOWGJGcHBWa1paZWxaclpEUmhNVXBYVW14V2FHVnFRVGs9

  2. base64解碼七次后結果:flag{y0ud1any1s1}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM