文本隐写(难度:EZ)
考验的是word的信息提取?反正没有那么恶心

首先,给了一个doc文件

wps左上角 文件–>选项—》隐藏文字,可以看见如上的末尾逗号
ctrl+f 选择替换
将中文”,“替换为1
将英文“,”替换为0

得到01101111011001100110011001110011011001010011101000110000011110000011001100110100001110010011000000001010
复制01字符串到http://xiaoniutxt.com/binaryToString.html,
转化得到偏移量 3490
用010edit打开docx文件,寻址到3490 ctrl+g跳转(该文件101编辑器下有很多PK头)

头:504b03040a
所以也需要将3490处的0000000xxxx0a 修改为504b03040a
(由于这一段后面没有新的504b03040a的头了)一直选中到末尾复制保存为新文件后缀为docx

继续修改隐藏文字,但是看不见(字体被设置成白色了),但是可以选中这段隐藏文字,通过“大声朗读”可以发现是一群字母,其中有R,于是通过查找方式看隐藏文字

得到
RmxhZyU3QnNob3dfY3RmX3Rzd19jYyU3RA==
Base64解码得
Flag{show_ctf_tsw_cc}
miscx(难度:还行)
直接打开,发现只有两个文件,但是直接解压,会输出hint和flag两个隐藏的txt文件
选用bandzip打开

只打得开misc1.rar的png图片,其他全是加密的(看到图片右边可能有隐藏,想过可能需要改变png的16进制代码以完成分辨率和边界的扩展,但是用2020直接把另一个doc文件打开了)

获得下面编码
♭‖♭‖‖♯♭♭♬‖♩♫‖♬∮♭♭¶♭‖♯‖¶♭♭‖∮‖‖♭‖§♭‖♬♪♭♯§‖‖♯‖‖♬‖‖♪‖‖♪‖¶§‖‖♬♭♯‖♭♯♪‖‖∮‖♬§♭‖‖‖♩♪‖‖♬♭♭♬‖♩♪‖♩¶‖♩♪‖♩♬‖¶§‖‖♩‖¶♫♭♭♩‖♬♯‖♬§♭‖♭‖♩¶‖‖∮♭♭♬‖‖♭‖♫§‖¶♫‖♩∮♭♭§‖♭§‖♭§§=
在https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=yinyue进行音符解码得到
U2FsdGVkX1/eK2855m8HM4cTq8Fquqtm6QDbcUu4F1yQpA==
尝试BaseX编码,发现都不是,看到有hint提示,猜测为rabit加密,key为2020

得到
welcome_to_payhelp
发现是hint文件的密码

这串字符,尝试破解
大概经历了4、5次Base64解密

得到一个url编码,我懒得查表,直接ai

(%21是!,元宝没翻译出来)
获得flag.txt文件的密钥:hello 2020!,打开后获得flag{g00d_f0r_y0u}

Misc50(难度:爆难TwT)
简言:压缩包套娃,然后密码转换,然后16进制解码得新的压缩包代码

打开后只有一个图片,但是这个png大得夸张

直接找到文件尾,把后面的zip文件单独抽出来,套娃:



Bandzip用来查看层数和方向,退出来后发现最后一层压缩需要密码。
啥线索就没有了,想了半天,漏掉了一个线索,就是最开始分离图片时,末尾有一个“==”,这是Base解码[见上图]
tEXtComment Sk5DVlM2Mk1NRjVIU1gyTk1GWEgyQ1E9Cg==
Sk5DVlM2Mk1NRjVIU1gyTk1GWEgyQ1E9Cg==过cyberchef(from base64)解码得JNCVS62MMF5HSX2NMFXH2CQ=
JNCVS62MMF5HSX2NMFXH2CQ=再过一遍cyberchef(from base32)解码得KEY{Lazy_Man}
除此之外!!!,老朋友7Z可以看rar文件注释,发现在第三层fbi.rar的注释里

有一个Base编码GEZDGNBVGYFA====,过cyberchef(from base32)解码得123456
解压fbi.rar得flag.zip,有加密,尝试之前的KEY{Lazy_Man}和123456,123456能解密,得thienc.txt
得到了一串怪物,经观察,3078很长出现

其中3078大量出现,用3078过cyberchef(from hex)得0x,
推测为16进制字符串转码,全文过python程序,解码16进制字符串
#这过程挺慢的
import re
from tqdm import tqdm
def read_file(filepath):
with open(filepath) as fp:
content=fp.read();
return content
number = read_file('thienc.txt')
result = []
result.append(re.findall(r'.{2}', number))
result = result[0]
strings =''
for i in tqdm(result, total=len(result), desc="处理中"):
y = bytearray.fromhex(i)
z = str(y)
z= re.findall("b'(.*?)'",z)[0]
strings += z
b= strings.split('0x')
strings=''
for i in b:
if len(i) ==1:
i= '0' + i
strings +=i
with open('te.txt', 'w') as f:
f.write(strings)
发现是个7z文件
继续优化python程序,让解码出来的数据可以直接生成7Z压缩包

(太tm不容易了T_T好恶心的题)
7z压缩包,有加密
尝试之前的KEY{Lazy_Man}和123456,KEY{Lazy_Man}能解密,得secenc.txt,打开发现是base编码字符串
用secenc.txt里的字符串过cyberchef,经暴力穷举多次base解码(64-32-32-32-32-64-32-32-32-32-64-32-32-32-32)共15轮,得到具有明显规律的
!?字符串
将这段!?字符串放在word里,用空格替换回车(^p替换成 ),消除换行,使字符串成为规范的short ook编码,再将这段short ook编码解码成文本(Ook! to text),解码出来的文本为典型的Brainfuck编码
+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.<
++++[ ->+++ +<]>+ +++.< +++++ +[->- ----- <]>.< +++[- >+++< ]>+++ ++.++
+++++ .---- ----- .<+++ ++++[ ->--- ----< ]>--. <++++ +++[- >++++ +++<]
>++++ +++++ +++.- ----- --.-- ----. <++++ [->++ ++<]> +++++ .<+++ +++[-
>---- --<]> -.<++ ++[-> ++++< ]>.++ ++.<+ ++[-> ---<] >---- --.<+ +++[-
>++++ <]>++ .---- ---.< +++++ +[->- ----- <]>-- ----- -.<++ +++++ [->++
+++++ <]>++ ++.++ +++++ .++++ ++++. <++++ +++++ [->-- ----- --<]> -----
.<+++ +++++ +[->+ +++++ +++<] >++++ +++++ ++.<
再将这段Brainfuck编码解码成文本:flag{Welc0me_tO_cTf_3how!}
Misc50(难度:EZZZZZ)



红包题第一弹
给了1-87个zip,每个zip里面是jpg文件,整合后应该是个gif动图
观察到每个文件末尾是base64:xxxxxxxxx
猜测,可能是每个文件末尾的base64编码整合在一起
import os
import re
import zipfile
import base64
# 配置路径
source_dir = r"C:\Users\q1388\Downloads\flag\flag"
output_dir = os.path.join(source_dir, "extracted")
output_base64_file = os.path.join(source_dir, "combined_output.txt")
output_decoded_file = os.path.join(source_dir, "combined_output.bin")
# 创建输出目录
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 存储所有base64数据
all_base64_data = []
# 按数字顺序获取zip文件
zip_files = []
for i in range(1, 88):
zip_path = os.path.join(source_dir, f"{i}.zip")
if os.path.exists(zip_path):
zip_files.append((i, zip_path))
print(f"找到 {len(zip_files)} 个zip文件")
# 解压每个zip文件并提取末尾的base64数据
for num, zip_path in zip_files:
print(f"\n处理: {num}.zip")
try:
# 创建解压目录
extract_dir = os.path.join(output_dir, str(num))
if not os.path.exists(extract_dir):
os.makedirs(extract_dir)
# 解压zip文件
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(extract_dir)
# 查找解压后的图片文件
for file_name in os.listdir(extract_dir):
file_path = os.path.join(extract_dir, file_name)
if os.path.isfile(file_path):
# 读取文件内容
with open(file_path, 'rb') as f:
content = f.read()
# 尝试以文本方式读取,查找末尾的base64
try:
text_content = content.decode('utf-8', errors='ignore')
# 查找末尾的base64:xxx格式
# 匹配模式: base64:后面跟着base64字符
base64_pattern = r'base64:([A-Za-z0-9+/=\r\n]+)'
matches = re.findall(base64_pattern, text_content)
if matches:
# 使用最后一个匹配(末尾的)
base64_data = matches[-1].strip()
all_base64_data.append(base64_data)
print(f" 找到base64数据,长度: {len(base64_data)}")
else:
# 尝试查找文件末尾可能隐藏的base64数据
# 读取最后1000个字符
if len(text_content) > 1000:
end_content = text_content[-1000:]
else:
end_content = text_content
# 尝试其他可能的模式
alt_patterns = [
r'base64[:\s]+([A-Za-z0-9+/=]+)',
r'([A-Za-z0-9+/=]{20,}={0,3})\s*$',
]
found = False
for pattern in alt_patterns:
alt_matches = re.findall(pattern, end_content)
if alt_matches:
base64_data = alt_matches[-1].strip()
all_base64_data.append(base64_data)
print(f" 找到base64数据(备用模式),长度: {len(base64_data)}")
found = True
break
if not found:
print(f" 警告: 未找到base64数据")
except Exception as e:
print(f" 读取文件时出错: {e}")
except zipfile.BadZipFile:
print(f" 错误: {num}.zip 不是有效的zip文件")
except Exception as e:
print(f" 处理 {num}.zip 时出错: {e}")
# 合并所有base64数据
if all_base64_data:
print(f"\n\n找到 {len(all_base64_data)} 个base64数据块")
# 写入base64文本文件
combined_base64 = ''.join(all_base64_data)
with open(output_base64_file, 'w') as f:
f.write(combined_base64)
print(f"base64数据已保存到: {output_base64_file}")
print(f"总base64数据长度: {len(combined_base64)}")
# 尝试解码base64并保存
try:
decoded_data = base64.b64decode(combined_base64)
with open(output_decoded_file, 'wb') as f:
f.write(decoded_data)
print(f"解码后的数据已保存到: {output_decoded_file}")
print(f"解码后数据大小: {len(decoded_data)} 字节")
except Exception as e:
print(f"base64解码失败: {e}")
print("已保存原始base64数据,可以手动处理")
else:
print("\n未找到任何base64数据")
print("\n完成!")
整合后base64解码发现是个二维码,扫码出来就能得到flag

{{doge}}
日更呢日更呢 没有日更我就要日你了哦`(^・ω・^ )`