buuctf[安洵杯 2019]easy misc1

news2024/11/24 11:31:26

解压的一个文件夹和图片一个,zip压缩包有密码

FLAG IN ((√2524921X85÷5+2)÷15-1794)+NNULLULL,

((√2524921X85÷5+2)÷15-1794)=7

我用passware kit 2022 所以试试7数字+NNULLULL,掩码(mask)攻击试试

mask :?d?d?d?d?d?d?dNNULLULL?s

好多破解方式,节省时间,就不一一尝试了,点all全删除

点+把mask攻击按下图添加

用这个密码2019456NNULLULL,解压得

010editor打开小姐姐图片发现两个图片结尾,去kali分离图片

为了方便输入改名1.png和2.png

用Stegsolve查看发现有盲水印

sudo pip install blind-watermark

如果在使用blind - watermark提取水印时没有密码,对于1.png,你可以尝试以下命令(假设水印为文本水印,并且嵌入时没有使用特殊参数设置水印形状等复杂情况):

blind_watermark --extract 1.png

对于2.png

blind_watermark --extract 2.png


  • 对于WaterMark类初始化部分(在/usr/local/lib/python3.11/dist - packages/blind_watermark/cli_tools.py文件中),修改密码参数的处理逻辑。
  • 如果目的是允许空密码,可以修改代码,在将密码转换为整数之前,先判断密码是否为None,如果是None,则可以传递一个默认值(例如 0 或者其他预定义的表示空密码的值)。
     def main():
         if opts.password is None:
             opts.password = 0
         bwm1 = WaterMark(password_img = int(opts.password))
         # 后续代码...

虽然解了但是乱码。采用其他工具提取,去github 找到python脚本

https://github.com/chishaxie/BlindWaterMark

GitCode - 全球开发者的开源社区,开源代码托管平台

我使用anaconda 创建一个虚拟环境,依次在conda命令窗口输入以下命令

conda create -n mangshuiyin python=3.6

conda activate mangshuiyin

pip install opencv-python==4.2.0.34  -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install matplotlib==2.1.1  -i https://pypi.tuna.tsinghua.edu.cn/simple

切换到脚本所在目录

cd D:\tools\BlindWaterMark-master\BlindWaterMark-master      

python bwmforpy3.py decode 1.png  2.png ras.png --oldseed

修改 bwmforpy3.py 添加红框内容

11.txt有442768个字符,做个字频统计,再取前16个字符

https://github.com/JasonJHu/FrequencyCount

下载字频统计程序

先行编译

​ 1.python package.py

​ 2.bin\build目录就会出现exe程序

如下图报错:是没安装pyinstaller

pip install pyinstaller

安装后编译成功

etaonrhisdluygwmfc. ,bp"k'Hv-ITS?ADMRWPGN!FxBOYjCEzqLQUV;K:J)(134Z0792X5*~86\

前16位字符:etaonrhisdluygw (去掉第一位无效字符其实就15位),对照编码字典decode.txt进行编码,写个脚本自动替换,还是使用python和qt混合编程做个有窗口的app,源代码如下:

import sys
import os
import unicodedata
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QTextEdit, QFileDialog


class TextReplaceTool(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
        self.dict_path = None

    def init_ui(self):
        # 整体布局
        main_layout = QVBoxLayout()

        # 选择字典区域布局
        dict_layout = QHBoxLayout()
        self.select_dict_button = QPushButton('选择替换字典')
        self.select_dict_button.clicked.connect(self.select_dict)
        dict_layout.addWidget(self.select_dict_button)
        main_layout.addLayout(dict_layout)

        # 替换按钮
        self.replace_button = QPushButton('替换内容')
        self.replace_button.clicked.connect(self.replace_text)
        main_layout.addWidget(self.replace_button)

        # 文本编辑区域
        self.text_edit = QTextEdit()
        main_layout.addWidget(self.text_edit)

        self.setLayout(main_layout)
        self.setWindowTitle('文本查找替换工具')
        self.show()

    def select_dict(self):
        self.dict_path, _ = QFileDialog.getOpenFileName(self, "选择字典文件", "", "Text Files (*.txt)")

    def read_dict_file(self):
        replace_dict = {}
        if not self.dict_path:
            return replace_dict
        try:
            with open(self.dict_path, 'r', encoding='UTF - 8') as f:
                lines = f.readlines()
                keys_seen = set()
                for line in lines:
                    parts = line.strip().split('=', 1)
                    if len(parts)!= 2:
                        continue
                    key = parts[0].strip()
                    value = parts[1].strip()
                    # 处理转义字符,这里仅以换行符为例
                    value = value.replace('\\n', '\n')
                    if not key:
                        continue
                    if not value:
                        continue
                    if key in keys_seen:
                        continue
                    keys_seen.add(key)
                    replace_dict[key] = value
        except FileNotFoundError:
            pass
        return replace_dict

    def replace_text(self):
        replace_dict = self.read_dict_file()
        if not replace_dict:
            return
        text = self.text_edit.toPlainText()
        new_text = ""
        i = 0
        while i < len(text):
            char = text[i]
            # 将字符转换为半角形式(如果是全角英文字母)
            char = unicodedata.normalize('NFKC', char)
            if char in replace_dict:
                print(f"字符 {char} 在位置 {i} 将被替换为 {replace_dict[char]}")
                new_text += replace_dict[char]
            else:
                new_text += char
            i += 1
        # 尝试编码转换,这里假设为UTF - 8编码
        try:
            new_text = new_text.encode('utf - 8').decode('utf - 8')
        except UnicodeDecodeError:
            pass
        self.text_edit.setPlainText(new_text)
        self.text_edit.repaint()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = TextReplaceTool()
    sys.exit(app.exec_())

运行界面:

把文本框的结果复制出来

QW8obWdIWT9pMkF-sd5REtRQSQW jVfXiE/WSFTajBtcw= (44 个字符)

去掉-sd5RE 和tRQSQW每三位倒序 SQWtRQ  ,最后加=,是wp官方结果,不知逻辑从哪来???

QW8obWdIWT9pMkFSQWtRQjVfXiE/WSFTajBtcw==               (36 个字符)

python basecrack.py --magic

 flag{have_a_good_day1}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2188264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的Java在线音乐平台

文未可获取一份本项目的java源码和数据库参考。 Java在线音乐平台是基于Java Web&#xff0c;依据Java语言功能性强大和简单易用的两大特点&#xff0c;实现的一个网上音乐平台。该平台包含了前台功能&#xff08;用户层面&#xff09;以及后台管理系统&#xff08;管理员层面&…

报刊订阅系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;报刊类型管理&#xff0c;报刊信息管理&#xff0c;报刊订阅管理&#xff0c;订阅发送管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;报刊信息&a…

vector 的使用(上)

1.概念 vector本质是顺序表。它像数组一样&#xff0c;用一块连续的空间对数据进行管理&#xff0c;但又区别于数组&#xff0c;它的空间是根据数据进行动态增容的&#xff0c;并封装了一系列成员变量对数据进行监控&#xff0c;封装成员函数对数据进行操作。 2.区别 vector…

Excel数据分析!开启数据洞察之门

Excel数据分析&#xff01;开启数据洞察之门 前言Excel数据分析 前言 Excel&#xff0c;这款我们都耳熟能详的办公软件&#xff0c;在数据分析的舞台上&#xff0c;扮演着至关重要的角色。它不仅仅是一个简单的电子表格工具&#xff0c;更是我们开启数据洞察之门的一把钥匙。 …

深度学习的应用综述

文章目录 引言深度学习的基本概念深度学习的主要应用领域计算机视觉自然语言处理语音识别强化学习医疗保健金融分析 深度学习应用案例公式1.损失函数(Loss Function) 结论 引言 深度学习是机器学习的一个子领域&#xff0c;通过模拟人脑的神经元结构来处理复杂的数据。近年来&…

又放大招!2024 OpenAI 开发者日总结:实时 API、提示词缓存、模型蒸馏与视觉微调等多项技术革新

在全球开发者翘首以盼中&#xff0c;OpenAI 于 2024 年 10 月 1 日在旧金山举办了年度开发者日活动。与往年不同&#xff0c;今年的活动并未发布全新的模型&#xff0c;取而代之的是多项面向开发者的 API 能力提升和工具更新。本文将深入剖析 OpenAI 在开发者日中亮相的几项重要…

中伟视界:精准计数,智能预警,矿山罐笼管理迈入AI时代

矿山罐笼乘员超限检测AI算法工作原理&#xff0c;有哪些参数需要考虑的&#xff1f;及其应用效果如何&#xff1f; 矿山罐笼乘员超限检测AI算法工作过程是设置罐笼一次乘坐人数&#xff0c;系统设置检测框&#xff0c;系统计数从一端进入后从另一端出去的人数&#xff0c;累积人…

五子棋双人对战项目(6)——对战模块(解读代码)

目录 一、约定前后端交互接口的参数 1、房间准备就绪 &#xff08;1&#xff09;配置 websocket 连接路径 &#xff08;2&#xff09;构造 游戏就绪 的 响应对象 2、“落子” 的请求和响应 &#xff08;1&#xff09;“落子” 请求对象 &#xff08;2&#xff09;“落子…

如何使用ssm实现基于java的实验室设备管理系统

TOC ssm768基于java的实验室设备管理系统jsp 绪论 1.1研究背景与意义 1.1.1研究背景 近年来&#xff0c;第三产业发展非常迅速&#xff0c;诸如计算机服务、旅游、娱乐、体育等服务行业&#xff0c;对整个社会的经济建设起到了极大地促进作用&#xff0c;这一点是毋庸置疑…

SpringBoot与舞蹈艺术:古典舞在线交流平台开发记

第二章 相关技术介绍 2.1Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xf…

【基础算法总结】链表篇

目录 一&#xff0c; 链表常用技巧和操作总结二&#xff0c;算法原理和代码实现2.两数相加24.两两交换链表中的节点143.重排链表23.合并k个升序链表25.k个一组翻转链表 三&#xff0c;算法总结 一&#xff0c; 链表常用技巧和操作总结 有关链表的算法题也是一类常见并且经典的题…

案例-猜数字游戏

文章目录 效果展示初始画面演示视频 代码区 效果展示 初始画面 演示视频 猜数字游戏 代码区 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…

【题解】【动态规划,最长上升子序列LIS】—— [CSP-J 2022] 上升点列

【题解】【动态规划&#xff0c;最长上升子序列LIS】—— [CSP-J 2022] 上升点列 [CSP-J 2022] 上升点列题目描述输入格式输出格式输入输出样例输入 #1输出 #1输入 #2输出 #2 提示 1.题意解析2.AC代码 [CSP-J 2022] 上升点列 通往洛谷的传送门 题目描述 在一个二维平面内&am…

GAMES101(19节,相机)

相机 synthesis合成成像&#xff1a;比如光栅化&#xff0c;光线追踪&#xff0c;相机是capture捕捉成像&#xff0c; 但是在合成渲染时&#xff0c;有时也会模拟捕捉成像方式&#xff08;包括一些技术 动态模糊 / 景深等&#xff09;&#xff0c;这时会有涉及很多专有名词&a…

确保接口安全:六大方案有效解决幂等性问题

文章目录 六大方案解决接口幂等问题什么是接口幂等&#xff1f;天然幂等不做幂等会怎么样&#xff1f; 解决方案1&#xff09;insert前先select2&#xff09;使用唯一索引3&#xff09;去重表加悲观锁4&#xff09;加乐观锁之版本号机制5&#xff09;使用 Redisson 分布式锁6&a…

银河麒麟系统内存清理

银河麒麟系统内存清理 1、操作步骤2、注意事项 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 当银河麒麟系统运行较长时间&#xff0c;内存中的缓存可能会积累过多&#xff0c;影响系统性能。此时&#xff0c;你可以通过简单的命令来清理这…

问:LINUXWINDOWS线程CPU时间如何排序?

Linux 在Linux上&#xff0c;你可以使用ps命令结合sort命令来查看和排序进程或线程的CPU使用时间。 查看进程的CPU使用时间并按时间排序 使用ps命令的-o选项可以自定义输出格式&#xff0c;-e选项表示显示所有进程&#xff0c;--sort选项用于排序。 ps -e -o pid,tid,comm,…

排序大全(干货)

目录 1. 插入排序步骤&#xff1a; 2.选择排序思路&#xff1a;每次从待排序列中选出一个最小值&#xff0c;然后放在序列的起始位置&#xff0c;直到全部待排数据排完即可。实际上&#xff0c;我们可以一趟选出两个值&#xff0c;一个最大值一个最小值&#xff0c;然后将其放…

【springboot】整合LoadBalancer

目录 问题产生背景解决方案&#xff1a;实现LoadBalancer1. 添加依赖2. 配置文件3. 使用LoadBalancer4. 使用 RestTemplate 进行服务调用5. 测试 问题产生背景 以下是一个购物车项目&#xff0c;通过调用外部接口获取商品信息&#xff0c;并添加到购物车中&#xff0c;这段代码…

如何使用ssm实现中学生课后服务的信息管理与推荐+vue

TOC ssm766中学生课后服务的信息管理与推荐vue 第一章 绪论 1.1 选题背景 目前整个社会发展的速度&#xff0c;严重依赖于互联网&#xff0c;如果没有了互联网的存在&#xff0c;市场可能会一蹶不振&#xff0c;严重影响经济的发展水平&#xff0c;影响人们的生活质量。计算…