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