MISC-polarctf
可爱的冰墩墩

图片上的flag不是(..(。•ˇ‸ˇ•。)…)
binwalk处理,得到516FE.zip
打开发现要密码

实验一下.....就会发现图片上的
提示了密码,是bingdundun
用pyc线上分析工具分析一下,得到
# Visit https://www.lddgo.net/string/pyc-compile-decompile for more information
# Version : Python 3.7
ciphertext = ''
flag = ''
for i in range(len(flag)):
i = ord(flag[i]) + 10
ciphertext.append(str(i))
print(ciphertext[::-1])
ciphertext = [
'62',
'60',
'65',
'108',
'111',
'60',
'109',
'111',
'59',
'109',
'107',
'107',
'107',
'107',
'63',
'64',
'111',
'60',
'64',
'109',
'60',
'108',
'59',
'60',
'109',
'64',
'66',
'61',
'111',
'109',
'65',
'61']
发现ciphertext是flag转为ASCII码后加10,再逆序输出得到的,所以
ciphertext-10
52 → 4
50 → 2
55 → 7
98 → b
101 → e
50 → 2
99 → c
101 → e
49 → 1
99 → c
97 → a
97 → a
97 → a
97 → a
53 → 5
54 → 6
101 → e
50 → 2
54 → 6
99 → c
50 → 2
98 → b
49 → 1
50 → 2
99 → c
54 → 6
56 → 8
51 → 3
101 → e
99 → c
55 → 7
51 → 3
逆序输出得到flag
flag{37ce386c21b2c62e65aaaac1ec2eb724}
二维码
- winhex打开,看到

- 感觉像是base64编码,cyberchef去解码,

- 扫码得到flag
-
flag{ef72c9101bafbb9b44d97e066a8e4d0a}
东北话是最好的语言
打开txt,发现类似Base64的逆序,用cyberchef逆序(reverse)输出一下得到Base64编码(和二维码那个很像),再用Base64解码一下得到图片

用winhex打开得到

解码,得

https://github.com/zhanyong-wan/dongbei
配置环境后,将内容文件后缀改成.dongbei,运行
得到

102-f 108-l
所以字符串为flagizhere,进行MD5编码
flag{4d5193eaeb2b18aa7e4357078b7550f3}
LSB

找到我我就让你嘿嘿嘿

放大图片
找到了┭┮﹏┭┮



符合找到了。。。。

所以是jhsaqy(flag为拍摄者所在小区的首字母MD5三十二位加密后套上flag{})
flag{f5ff1ad1f80adcd878049171120ce063}
离骚
- 对于zip文件来说,进行明文攻击的条件是:有一个单独的文件已知且进行压缩之后的CRC值与某个包含此文件的压缩包的CRC值相等
- 明文解码..........(报错没有匹配文件(捂脸哭.jpg))

- 密码:Jljcxy
- flag
无限解Base64
- 直接AI代码
- import base64
import os
def recursive_base64_decode(input_file_path, output_dir=None):
"""
递归解码Base64文件,直到无法继续解码为止
参数:
input_file_path (str): 输入的Base64文件路径
output_dir (str, optional): 输出文件的目录。如果未提供,将在输入文件所在目录创建decoded_files文件夹
返回:
str: 最终解码结果的文件路径
"""
try:
# 确保路径中使用正确的斜杠
input_file_path = input_file_path.replace('\\', '/')
# 创建输出目录(如果未提供)
if output_dir is None:
file_dir = os.path.dirname(input_file_path)
output_dir = os.path.join(file_dir, "decoded_files")
os.makedirs(output_dir, exist_ok=True)
# 读取初始文件内容
with open(input_file_path, 'r', encoding='utf-8') as file:
current_data = file.read().strip()
decoded_files = []
iteration = 0
while True:
try:
# 尝试解码
decoded_bytes = base64.b64decode(current_data)
decoded_data = decoded_bytes.decode('utf-8', errors='ignore')
# 检查是否与上次结果相同
if iteration > 0 and decoded_data.strip() == current_data.strip():
print(f"第 {iteration} 次解码结果与上一次相同,停止解码")
break
# 保存当前解码结果
output_file = os.path.join(output_dir, f"decoded_{iteration}.txt")
with open(output_file, 'w', encoding='utf-8') as file:
file.write(decoded_data)
decoded_files.append(output_file)
print(f"第 {iteration} 次解码成功,保存到: {output_file}")
# 更新当前数据
current_data = decoded_data
iteration += 1
except base64.binascii.Error:
print(f"第 {iteration} 次解码失败,不是有效的Base64格式")
break
except Exception as e:
print(f"第 {iteration} 次解码时发生未知错误: {e}")
break
if decoded_files:
print(f"解码完成!共进行了 {iteration} 次解码")
print(f"最终解码结果保存在: {decoded_files[-1]}")
return decoded_files[-1]
else:
print("未能进行任何解码")
return None
except FileNotFoundError:
print(f"错误: 文件未找到 - {input_file_path}")
return None
except Exception as e:
print(f"错误: 发生了未知错误 - {e}")
return None
if __name__ == "__main__":
# 请替换为你的实际文件路径
input_file = r"C:\Users\联想\Desktop\misc\flag_new.txt"
# 调用函数进行递归解码
recursive_base64_decode(input_file)
解码50次,得到flag{f31ff0b8e83b6fdf70f5d3ba365e62e7}
送分
查看wav文件的频谱图

flag{Mu313}
签个到喵
兽言兽语解码小美说的话
得到http://weixin.qq.com/r/lC3I0KrEAPd-re6z93iG
打开found.py(message解码处理,得到请发送“宝宝想要flag”)
加入小美说的话

运行得到二维码

微信扫码,关注公众号,发送“宝宝想要flag”,得到flag
flag{www.PolarCTF.com}
学安全很简单
打开key.txt是zaqdx?????(应该是压缩包密码的提示)
直接掩码爆破


解压得到

01

这是将图片像素转换成对应数字保存到列表中,图片的分辨率是25×25,运行得到二维码,得到密码
#记得修改MAX和str
from PIL import Image
MAX = 25 #每行每列数
#二维码大小
pic = Image.new("RGB", (MAX, MAX))
str = "1111111011111001001111111100000100000000110100000110111010001000101010111011011101010011110001011101101110100111001010101110110000010001110010010000011111111010101010101111111000000000011000100000000000101110110111010100010011110100111100111010101001011000110001000011011101100001001000010101111000100001001111110100110001001000100011000010111010101010011110000101111010110110101010001010010100000010100100101110011111111100100000000110111001000100011111111001100010101011011100000101111100110001100010111010110010101111110001011101000001110010111010101110101100100011111010110000010011010010011100101111111000010001000011011"
i=0
for y in range (0,MAX):
for x in range (0 ,MAX):
if(str[i] =="0" ):
pic.putpixel([x,y],(255, 255, 255))
else:
pic.putpixel([x,y],(0, 0, 0))
i = i+1
pic.show()
pic.save("flag.png")

然后打开flag.txt,得到喵呜啊~..............
在线工具解码,得到
flag{8a8c0a039c3bd6fb50e84b047e42e8e6}
0和255
image_list.py代码是一个用于读取 PNG 图片像素信息并将其转换为二维列表的 Python 脚本。
如果你已经有了一个名为flag.png的图片文件,并且它确实是一个 33×33 像素的二维码图像,那么运行这段代码将会输出这个二维码对应的像素矩阵。根据你之前的代码,这个二维码图像是由黑白像素组成的,其中黑色像素用 (0, 0, 0) 表示,白色像素用 (255, 255, 255) 表示。
所以,image_list.py用于生产image_list.txt
将255用1替换,用下面代码解题
#记得修改MAX和str
from PIL import Image
MAX = 33 #每行每列数
#二维码大小
pic = Image.new("RGB", (MAX, MAX))
str = "from PIL import Image
MAX = 33 #每行每列数
#二维码大小
pic = Image.new("RGB", (MAX, MAX))
str = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000001000010001100000001111111101111101011010011101111101111111101000101100110001101000101111111101000101001001000101000101111111101000101011111111101000101111111101111101011101101101111101111111100000001010101010100000001111111111111111100011111111111111111111111101101111000011110001001111111111101110010000111001110001111111101011101101010100111111001111111111100110001100011111011001111111110110100111111110001111011111111110011011110000101100100001111111101101100111010000100100101111111110000110111000110010011011111111100011101000010000000000101111111111111111000010010111001011111111100000001110000110101011001111111101111101111010000111010101111111101000101111000110000000011111111101000101011100111010010011111111101000101111101011101000101111111101111101101001101000111111111111100000001100011101110110001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
i=0
for y in range (0,MAX):
for x in range (0 ,MAX):
if(str[i] =="0" ):
pic.putpixel([x,y],(255, 255, 255))
else:
pic.putpixel([x,y],(0, 0, 0))
i = i+1
pic.show()
pic.save("flag.png")"
i=0
for y in range (0,MAX):
for x in range (0 ,MAX):
if(str[i] =="0" ):
pic.putpixel([x,y],(255, 255, 255))
else:
pic.putpixel([x,y],(0, 0, 0))
i = i+1
pic.show()
pic.save("flag.png")
得到图片扫描码得flag:flag{0f46d4b056acb49f06b1090bab56189d}
找一找
打开zip,是一个docx文件,全选文字清除格式

标题是找一张,就接着找.....
将docx文件后缀改成zip,解压,在core.xml里找到

所以flag是flag{ff539ed2b017e74d3bc1eb8e9e9ebc6c}
100RGB
表情包一般直接Base100解码

处理一下得到的数据

flag{An1ma1s_ar3_cu+e}
docx隐写
打开zip,是一个docx文件,全选文字清除格式

将docx文件后缀改成zip,解压,找到

得到flag:flag{I_be1ieve_y0u_Can_flnd_+h3m}
爆破鬼才
binwalk处理图片,得到压缩包,然后开始爆破

打开,即得flag:flag{96a6781aaef3de39566d951466a0cc1f}
超级简单的流量
tcp追踪得flag:

大礼包
压缩包直接爆破(纯数字)
密码:9635421
winhex打开,末尾找到base编码

解码

是栅栏密码,第一个符合flag的格式,继续解码,凯撒密码解码(一个一个偏移量try)

属性?真加密?

flag{it_is_simple_
压缩包是伪加密,将01改成00

得到图片,在属性发现了剩下部分(标题有提示......)

flag:flag{it_is_simple_we_are_young}
刷新一下试试
刷新想到F5→F5隐写
下载工具
git clone https://github.com/matthewgao/F5-steganography.git

分析不出来,可能需要密码
文件属性(备注里)找到密码504
java Extract -p 504 C:\1111.jpg

得到flag{0ae0bebf93cb690235f9d1999cc68ea8}
签到叭
打开发现hint.docx是伪加密,修改后可以打开(小汇总里面有修改办法)
打开hint.docx获得信息

问AI 知道是净月潭,MD5加密后98f1ecdceaa0f4d6445f48287802dfd9得到密钥

应该是AES加密

flag.zip提示头部错误,修改头文件,修改后重新打开

得到↓
扫二维码关注公众号在公众号回复flag,即可拿到flag ——1.txt
最终得到flag:flag
无字天书
老样子,修改文件头

打开后,注释里面有压缩包密码(应该是摩斯)
ABBBB BABA AB BAA A BABA AAAAB AABA BBBBA BBBAA AABA BBBAA A BAAAA AABA AAAAB
文字替换后解密
转化成小写(不知道为啥(⊙o⊙)…反正打开了)打开压缩包
小汇总
- 栅栏密码
- 凯撒密码
- 表情包→Base100解码
- F5隐写
- 文件头:zip就从504B0304开始识别,从504B0506结束,对于txt文件,不存在任何文件头。

- 伪加密

- 我们看到上图,红色框住的50 4B 是压缩源文件数据区的头文件标记,它对应的红色框柱的 09 00 并不影响加密属性。绿色框住的50 4B 是压缩源文件目录区 ,它对应的绿色框柱的 09 00 影响加密属性,当数字为奇数是为加密,为偶数时不加密。


浙公网安备 33010602011771号