您现在的位置是:首页 > 正文

BugKu: 粉色的猫

2024-02-01 00:00:01阅读 3

BugKu: 粉色的猫


1.获取压缩包密码

在这里插入图片描述

能发现只有4种字符AGCT

所以是DNA 碱基序列编码

使用在线解码网站,戳我

在这里插入图片描述

压缩包的解压密码为:CATISSOCUTE



2.分析文件

010editor 打开 1 这个文件,文件头为BPG,所以他是BPG格式的图片,该格式详细信息看百度百科

在这里插入图片描述


把文件后缀名改成bpg,然后使用 bpg-0.9.8-win64,下载链接,戳我

在这里插入图片描述

出现了图片,但是我们从图片中,根本获取不到任何有用信息。


所以我们调转枪头,去打开key.txt,如图:

在这里插入图片描述

打开解码网站:http://www.sendsms.cn/pdu/

我们发现都是0001000D9,可以猜测有可能是PDU编码,这个规律是我发现的,但是如果这几个不是默认的,那0001000D9这个特征就不会存在了。所以以后碰到0001000D9拿到16进制转ascii没有什么线索,可以尝试PDU编码。

在这里插入图片描述


现在我们开始一行一行解码:

在这里插入图片描述

可以发现89504E47这明显就是PNG的文件头的16进制,我们解密好所有的行,拼接在一起,然后再保存为图片,这个过程太简单跳过。

图片如下:

在这里插入图片描述


这张图片就引出了一个编程语言,叫Piet,详细资料请看:百度百科

不想看的,你就理解为20种颜色进行的编程。所以我们现在就需要去运行这个图片代码。


但是,在去运行这个图片代码之前,我们需要把图片反色一下。

在这里插入图片描述

可以看到百度百科的Piet图片颜色背景是白色,而我们拿到的图片颜色背景是黑色。所以需要反色一下,使用Stegsolve.jar进行反色操作。

反色后的图片如下:

在这里插入图片描述


现在我们打开在线运行Piet语言网站,戳我

import导入图片,然后再点右边的DEBUGGER然后点绿色的按钮运行Piet语言。

在这里插入图片描述

最终得到key:a=13 b=14



3.Arnold变换(猫脸变换)

a=13, b=14,结合我们的1.bpg的图片样貌,所以认为是Arnold变化,所以我们现在就是要获取变化之前的图片。

借鉴了该文章的代码,链接,并进行了一些修改,为了是方便使用。

代码如下:

import cv2
import argparse
import numpy as np

parser = argparse.ArgumentParser()
parser.add_argument('-t', type=str, default=None, required=True, choices=["encode", "decode"],
                    help='encode | decode')
parser.add_argument('-f', type=str, default=None, required=True,
                    help='输入文件名称')                  
parser.add_argument('-a', type=int, default=None, required=True,
                    help='输入参数a')
parser.add_argument('-b', type=int, default=None, required=True,
                    help='输入参数b')
args  = parser.parse_args()


def isSame(img):
    r, c = img.shape
    if r != c:
        print("图片宽高不一致!")
        return False
    return True

def arnold(img, a, b):
    r, c = img.shape
    p = np.zeros((r, c), np.uint8)
    for i in range(r):
        for j in range(c):
            x = (i + b * j) % r
            y = (a * i + (a * b + 1) * j) % c
            p[x, y] = img[i, j]
    return p

def dearnold(img, a, b):
    r, c = img.shape
    p = np.zeros((r, c), np.uint8)
    for i in range(r):
        for j in range(c):
            x = ((a * b + 1) * i - b * j) % r
            y = (-a * i + j) % c
            p[x, y] = img[i, j]
    return p

img = cv2.imread(args.f, flags=0)

if isSame(img):
    if args.t == "encode":
        img = arnold(img, a=args.a, b=args.b)
    elif args.t == "decode":
        img = dearnold(img, a=args.a, b=args.b)

cv2.imshow("images", img)
cv2.waitKey(0)

我们之前只是查看了BPG图片的样貌,并没有进行保存,现在我们使用。

在这里插入图片描述

软件运行目录会出现out.png,现在我们获得到了PNG格式的图片,我们现在就可以使用猫脸变化代码进行变化回之前的样貌。


在这里插入图片描述

使用之前获取的a=13, b=14,还有刚刚获得的out.png,我们成功拿到了flag!

flag{c159549a-5604-4bb7-8a6e-9db9d8b1426a}

完结,拜拜!



总结:

      这道题目涉及到了DNA编码, BPG图片格式,PDU编码,Piet编程语言,猫脸变化,一共是5个知识点,这道题让我受益良多,出题者水平真高啊!

网站文章

  • iOS组件化方案对比

    iOS组件化方案对比

    背景 随着公司业务的不断发展,项目的功能越来越复杂,各个业务代码耦合也越来越多,代码量也是急剧增加,传统的MVC或者MVVM架构已经无法高效的管理工程代码,因此需要用一种技术来更好地管理工程,而组件化(也可称为模块化)是一种能够解决代码耦合的技术。项目经过组件化的拆分,不仅可以解决代码耦合的问题,还可以增强代码的复用性,工程的易管理性等等。 市场上的方案: 方案一、url-block 这是...

    2024-01-31 23:59:53
  • 一般服务器的并发响应数量,服务器高并发?4个简单的处理方法!

    一般服务器的并发响应数量,服务器高并发?4个简单的处理方法!

    原标题:服务器高并发?4个简单的处理方法!高并发问题是大部分服务器都经历过的,由于资源的有限性,其同时处理请求的能力自然也有限制。当高并发出现时,服务端的处理和响应速度会大幅降低,更严重的会使服务器崩...

    2024-01-31 23:59:47
  • ai跟随路径_继《Dota 2》和《星际争霸》后,人类又在一款竞技游戏里败给了 AI...

    ai跟随路径_继《Dota 2》和《星际争霸》后,人类又在一款竞技游戏里败给了 AI...

    在很多竞技射击游戏中,你都能看到一种名为「夺旗模式」的玩法。它源于西方一项传统运动,玩家被组成两支小队,目标是把对方基地里的旗帜带回到自己基地中,同时也要保护自家旗子不被人抢走。规则看似很简单,可比起...

    2024-01-31 23:59:16
  • matlab求得未知周期函数的周期,遗传算法拟合微分方程中的未知参数,运行时间太长,且........

    %拟合微分方程参数function myprojectclear;clc;treal=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14];%微分方程的x的值yreal=[20.4...

    2024-01-31 23:59:10
  • html输入框光标离开事件,input使用v-model时,input从中间删除时光标跳到最后

    目前我这边的解决方法是使用string-replace-loader将vendor.js里的getVmData方法替换成:function getVmData (vm) {var res = getV...

    2024-01-31 23:59:02
  • 创建型模式之--简单工厂模式+工厂方法模式

    创建型模式之--简单工厂模式+工厂方法模式

    女蜗造人 女蜗通过八卦炉烧制三种不同的人种。 对造人过程进行分析,该过程设计三个对象:女蜗、八卦炉、三种不同肤色的人。 女蜗:可以使用场景类表示,负者模拟场景,执行相关任务。 八卦炉:类似工厂,负者制造产品(三种人)。 三种人:他们都是同一接口下的不同实现类,是八卦炉的产品。 类图: AbstractHumanFactory是一个抽象类,定义了一个八卦炉具有的整体功能,HumanFa...

    2024-01-31 23:58:13
  • Java成员变量初始化

    目录 一、成员变量初始化步骤(三步) 二、程序代码 三、执行过程 1、主函数先进栈空间 2、开一个对象空间给对象空间开辟一个地址(地址是随机的)对成员变量初始化(num) 3、构造函数进入空间 4、针...

    2024-01-31 23:58:05
  • html5之本地存储 百度,HTML5存储学习笔记(一)

    html5之本地存储 百度,HTML5存储学习笔记(一)

    1.HTML5之前的存储方式HTML5之前常用的存储方式为cookies。cookies在浏览器中的存储形态,以百度首页的cookie为例: 【特别说明】HttpOnly表示该cookie只能被ser...

    2024-01-31 23:57:57
  • 命名实体识别学习记录(spaCy/OpenNLP..)

    命名实体识别学习记录(spaCy/OpenNLP..)

    如题

    2024-01-31 23:57:28
  • 这个神奇的库,可以将数据平滑化并找到异常点

    这个神奇的库,可以将数据平滑化并找到异常点

    在处理数据的时候,我们经常会遇到一些非连续的散点时间序列数据:有些时候,这样的散点数据是不利于我们进行数据的聚类和预测的。因此我们需要把它们平滑化,如下图所示:如果我们将散点及其范围区间都...

    2024-01-31 23:57:20