buuctf-misc-[NewStarCTF 公开赛赛道]qsdz's girlfriend 2
只是一只路人
2024年08月27日 17:03
收录于文集
共43篇

题目:

据说qsdz的girlfriend是会变化的猫猫。flag{图片中的文字}

提示:

wp:

根据题目的猫猫,且图片是正方形,而且给了a、b、n,提示还给了公式,明显是猫脸变换,网上偷个脚本解了:

代码块
Python
自动换行
复制代码
import numpy as np
import cv2
 
 
def arnold_decode(image, arnold_times):
    a = 0x6f6c64
    b = 0x726e
    # 1:创建新图像,全为0的三维数组
    decode_image = np.zeros(shape=image.shape)
    # 读取图片的长宽像素,这里是98x98,即总像素点
    height, width = image.shape[0], image.shape[1]
    N = height  # N是正方形的边长
 
    for time in range(arnold_times):  # 变换的次数
        # 遍历图片的像素点坐标
        for old_x in range(height):
            for old_y in range(width):
                # 根据猫脸公式矩阵即像素点的逆置换,得到原未经过猫脸变换的图片
                new_x = ((a * b + 1) * old_x + (-a) * old_y) % N  #原像素点的x坐标值
                new_y = ((-b) * old_x + old_y) % N              #原像素点y的坐标值
                decode_image[new_x, new_y, :] = image[old_x, old_y, :]
    cv2.imwrite(r'C:\Users\hp430\Desktop\qsdzs_girlfriend_2\flag.png', decode_image, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])  # 以PNG写入图片
    return decode_image
 
 
if __name__ == '__main__':
    # imread(path,flag)读取图片,加载彩色图片默认参数值是flag=1,灰度是0,透明度-1,结果是三维数组,前两维是像素坐标,最后一维是通道索引
    it = cv2.imread(r'C:\Users\hp430\Desktop\qsdzs_girlfriend_2\girlfriend.png')
    arnold_decode(it, 1)
复制成功

flag{按理说这个点猪也该醒了}