首页 > 编程语言 >BUUCTF 81题吹着贝斯的二维码详解(包含各类工具和python脚本)

BUUCTF 81题吹着贝斯的二维码详解(包含各类工具和python脚本)

时间:2024-08-11 12:27:43浏览次数:10  
标签:文件 BUUCTF python image jpg result file 贝斯 图片

在网上看了很多类似解题步骤和说明,感觉对小白都不友好,于是决定搜集整理下,做个详尽的解题步骤:

压缩包解压得到36个无后缀名文件和一个flag.zip压缩包

再看压缩包,解压发现有压缩密码,用winhex查看是不是伪加密,在末尾发现一串可疑字符串,

拷贝下来留用:

GNATOMJVIQZUKNJXGRCTGNRTGI3EMNZTGNBTKRJWGI2UIMRRGNBDEQZWGI3DKMSFGNCDMRJTII3TMNBQGM4TERRTGEZTOMRXGQYDGOBWGI2DCNBY

再用winhex打开几个无后缀名文件,发现都是一些jpg图片文件,

---------------------------------------------------------------------------------------------------------------------------------

笔者系统是win11,决定使用powershell命令给所有无后缀名文件添加.jpg后缀名,命令如下

注意:要切换到你真实图片所在路径执行命令

Get-ChildItem -File | Where-Object { -not $_.Extension } | Rename-Item -NewName { $_.Name + ".jpg" }

 

发现是一些二维码碎片,一共36个需要拼图,真头疼,不会直接去拼图吧!用winhex查看我上图标记的三个好识别三个特殊位置的图片,发现了规律在尾部FFD9文件尾部有字符串编号,按顺序拼图即可

先借用 大佬的python脚本把36个图片按尾部字符串排序为标准把文件改名排序

import os
 
# 获取目录下文件名列表
dir_list = os.listdir('./')
 
# 从列表中依次读取文件
for file in dir_list:
    if '.jpg' in file:
        f = open('./' + file, 'rb')  # 使用二进制打开文件,此处注意'./'代表在当前目录,脚本必须拷贝在当前目录运行
        n1 = str(f.read())  # 读取文件
        n2 = ''
        # 这里是尝试后发现最后一位为单引号,对于序号为一位数的文件倒数第三位为9,所以限制条件
        if '1' <= n1[-3] <= '3':
            n2 += n1[-3]
        if '0' <= n1[-2] <= '9':
            n2 += n1[-2]
        f.close()  # 先关闭文件才能重命名,否则会报`文件被占用`错误
        os.rename('./' + file, n2 + '.jpg')  # 重命名文件

123456
789101112
131415161718
192021222324
252627282930
313233343536

使用ps把每个图批量修改为100X100大小

按上图拼图即可,网上好多人用ps拼图,太烦人了,找chatgpt搞了个脚本,略微修改下就可以用


from PIL import Image, ImageDraw

# 创建新的正方形图像
result_image = Image.new('RGB', (600, 600))

# 循环遍历36张图片
for i in range(1, 37):
    # 生成文件名
    filename = f"image{i:02d}.jpg"
    
    # 打开图片
    image = Image.open(filename)
    
    # 缩放图片
    image = image.resize((100, 100))
    
    # 计算图片在正方形图像中的位置
    x = (i - 1) % 6 * 100
    y = (i - 1) // 6 * 100
    
    # 将图片粘贴到正方形图像上
    result_image.paste(image, (x, y))
    
# 保存拼接后的正方形图像
result_image.save("result_image.jpg")

改脚本容易出错,直接改文件名也可,先把1-9文件拷贝到别处

再拷回原处

---------------------------------------------------------------------------------------------------------------------------------

综上所述,我需要把36张二维码图片,先添加jpg后缀名,再根据文件末尾的二进制字符串编号修改文件名按照image01.jpg、image02.jpg...image10.jpg、image11....修改,下面是我修改的jhzzfpx.py可以实现。这样就越过了繁琐的改名过程。可以在原始下载目录直接运行。


import os

# 获取目录下文件名列表
dir_list = os.listdir('./')

# 从列表中依次读取文件
for file in dir_list:
    if '.' not in file:  # 判断文件名中是否包含'.'
        os.rename('./' + file, file + '.jpg')  # 为无后缀名的文件加上'.jpg'后缀名

# 获取目录下文件名列表
dir_list = os.listdir('./')

# 从列表中依次读取文件
for file in dir_list:
    if '.jpg' in file:
        f = open('./' + file, 'rb')  # 使用二进制打开文件,此处注意'./'代表在当前目录,脚本必须拷贝在当前目录运行
        n1 = str(f.read())  # 读取文件
        n2 = ''
        # 这里是尝试后发现最后一位为单引号,对于序号为一位数的文件倒数第三位为9,所以限制条件
        if '1' <= n1[-3] <= '3':
            n2 += n1[-3]
        if '0' <= n1[-2] <= '9':
            n2 += n1[-2]
        f.close()  # 先关闭文件才能重命名,否则会报`文件被占用`错误
        if len(n2) == 1:
            n2 = '0' + n2  # 如果n2是个位数,前面加0
        os.rename('./' + file, 'image' + n2 + '.jpg')  # 重命名文件

#这样,文件名将会按照"image01.jpg"、"image02.jpg"、"image03.jpg"等形式进行修改。

上拼图代码awjmpt.py,具体内容如下:


from PIL import Image, ImageDraw

# 创建新的正方形图像
result_image = Image.new('RGB', (600, 600))

# 循环遍历36张图片
for i in range(1, 37):
    # 生成文件名
    filename = f"image{i:02d}.jpg"
    
    # 打开图片
    image = Image.open(filename)
    
    # 缩放图片
    image = image.resize((100, 100))
    
    # 计算图片在正方形图像中的位置
    x = (i - 1) % 6 * 100
    y = (i - 1) // 6 * 100
    
    # 将图片粘贴到正方形图像上
    result_image.paste(image, (x, y))
    
# 保存拼接后的正方形图像
result_image.save("result_image.jpg")

在cmd命令切换到图片目录,执行python awjmpt.py执行后

估计这拼图是所有类似解题最精准的,毕竟人工有误差

扫码得

貌似是压缩包注释的哪串字符串加密方式,反过来解密,解密顺序为:

base32-base16-rot13-ascii85-base64-ascii85

base32密文(即flag.zip里的注释)如下:

使用basecrack解密所有base密文

1、base32-base16,在basecrack.py所在目录运行powershell

rot13-base85

flag.zip密码

解压得到flag  :

标签:文件,BUUCTF,python,image,jpg,result,file,贝斯,图片
From: https://blog.csdn.net/weixin_34979095/article/details/141030814

相关文章

  • Buuctf不眠之夜-拼图题gasp自动拼图软件实现
        解压后发现有122个文件,其中有一个坏掉的图片和一个无后缀名文件,120个200x100图片拼成一个长方形大图,估计10x12,图大小20001200看了好多文章,一看是拼图题,就自己手动去拼,我就头大。搜了相关知识,知道有个gaps的自动拼图软件可以秒拼图,但是安装在kali里巨麻烦,我在......
  • Buuctf 弱口令详解附送图片隐写工具cloacked-pixel安装配置使用实列
    下载一个zip压缩包,解压需要密码,使用bandizip,打开看看,发现注释栏有一些隐藏的东西ctl+c复制在粘贴板,再ctl+v黏贴到sunblime文本编辑软件下是摩斯密码,记录下来......-...-..-----..-.---.-...---在线摩斯密码翻译器HELL0FORUM用此作为密码解压压缩包......
  • python asyncio grpc
    1.准备环境python3.11-mvenvvenvsourcevenv/*/activatepipinstallgrpcio-tools#包含了grpcio和protobufpipinstalltypes-protobufgrpc-stubs#可选安装,用于mypy静态检查2.编写msg.protosyntax="proto3";//这是注释,同时也是类文档serviceMsgService{......
  • Buuctf从娃娃抓起解题(不一样的思路)
        这道题很简单,主要涉及密码学,要熟悉掌握两种密码形式,看了好多网友解题,感觉思路不清,解题没有说服力,我简单归纳整理一下。压缩包解压得到两个文本文档,要把这两段密文转为汉字,再用MD532位小写加密,提交格式flag{MD5}中文电码查询查询结果:人工智能五笔码查询......
  • Buuctf-Mysterious另类逆向题解
    下载发现是一个exe可执行文件双击运行,输入密码123456没有任何反应,当然没反应,密码肯定不对请出IDApro,我这里用IDAProv8.3演示,把exe文件拖拽到IDA打开按shift+F12快捷键搜索字符串我们发现第二行有可疑字符串,有flag嫌疑,双击上面的welldonewelldone里“Buff3r_0......
  • Python和多线程(multi-threading)
    在Python中,实现并行处理的方法有几种,但由于Python的全局解释器锁(GIL,GlobalInterpreterLock)的存在,传统意义上的多线程(使用threading模块)并不总能有效利用多核CPU来实现真正的并行计算。GIL确保任何时候只有一个线程在执行Python字节码。不过,仍然有几种方法可以绕过这个限制,......
  • Python基础知识:奠定坚实的编程基础
    Python,作为一种备受欢迎的高级编程语言,凭借其简洁的语法、强大的标准库和丰富的第三方模块,赢得了广泛的赞誉和应用。无论你是编程新手还是资深开发者,Python都能提供丰富的学习机会和实际应用场景。本文旨在深入探讨Python的基础知识,涵盖字面量、变量、数据类型、注释、类型......
  • python图片压缩大小及设置图片像素大小120乘160
    python图片压缩大小及设置图片像素大小120乘1601.在pycharm中安装pillow库的步骤:打开设置并转到“项目”页面。选择“python解释器”并单击“+”按钮。搜索“pillow”,选中包并单击“安装包”。1.打开PyCharm设置Windows:File>Settings2.转到“项目”页面在左侧导航栏中,单......
  • Python之赋值语句(多重赋值和交换赋值)
    这是《Python入门经典以解决计算问题为导向的Python编程实践》73-74页关于赋值的内容。讲了Python中几种赋值方式。赋值语句1、最简单的赋值:a=b2、多重赋值:a,b,c=1,2,33、交换:a,b=b,a1、最简单的赋值:a=bb可以是数字、字符串,也可以是一个表达式。a必须是一个对象,不......
  • Python使用PyCharm创建一个简单的Qt Quick应用程序-hello_world_quick.py(读取qml文件
    """CreateaSimpleQuickApplication"""importsysfrompathlibimportPathfromPySide6.QtGuiimportQGuiApplicationfromPySide6.QtQmlimportQQmlApplicationEngine#打开文件,读取文件,并返回文件内容defread_file(file_path):"......