自学内容网 自学内容网

buuctf[安洵杯 2019]easy misc1

解压的一个文件夹和图片一个,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}


原文地址:https://blog.csdn.net/weixin_34979095/article/details/142665130

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!