broken_hash
图片加后缀打开在底部发现有rar压缩包,分离一下

打开压缩包有注释:7bf21a26cd6
import hashlib
rar_pwd = '????' # letters+digital
rar_pwd = hashlib.md5('????'.encode()).hexdigest()
第三行覆盖了原始变量,这里可以了解到哈希算法为md5,而第二行我们又可以知道原始密码为4位数字加字母组成
'????'.encode():将字符串转换为字节流(因为哈希函数处理的是字节,而非字符串)。hashlib.md5(...):创建 MD5 哈希对象并处理字节流。.hexdigest():将哈希结果转换为十六进制字符串(便于人类阅读和存储)。
已知部分哈希值:7bf21a26cd6,原始密码为4位数字加字母,定义原始密码范围是大小写字母和数字爆破,即匹配到对应哈希值前缀输出
import hashlib
import itertools
def crack_md5(target_part, max_length=4):
# 定义密码可能包含的字符集:大小写字母+数字
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
# 循环尝试从1到max_length位的密码
for length in range(1, max_length + 1):
# 显示当前尝试的密码长度(单行刷新)
print(f"尝试{length}位密码...", end='\r')
# 生成当前长度的所有字符组合(笛卡尔积)
for pwd_tuple in itertools.product(chars, repeat=length):
# 将元组转换为字符串(如('H','3','l','o')→'H3lo')
pwd = ''.join(pwd_tuple)
# 计算字符串的MD5哈希值(先编码为字节,再转十六进制)
md5_hash = hashlib.md5(pwd.encode()).hexdigest()
# 检查哈希值是否以目标前缀开头
if md5_hash.startswith(target_part):
print("\n匹配成功!")
print(f"原始密码: {pwd}")
print(f"完整哈希: {md5_hash}")
return pwd, md5_hash
# 所有长度尝试完毕未找到匹配
print("\n未找到匹配密码")
return None, None
if __name__ == "__main__":
# 目标MD5哈希前缀
target = '7bf21a26cd6'
# 已知密码为4位,仅尝试1-4位长度(提高效率)
crack_md5(target, max_length=4)

原始密码: H3lo
完整哈希: 7bf21a26cd627170e0e05ceee551c044
用哈希值给压缩包解密即可
flag{dbee4535f4853a3adc9ac3bbe1358819}
deep

#include <iostream>
// 全局字符数组(原始存储flag字符串,当前被清空)
char g_szBuffer[] = "";
int main(int argc, char *argv[])
{
unsigned int uNum = 0; // 用于存储转换后的整数值
// 循环遍历数组,每次处理4字节(char数组每4字节转为一个unsigned int)
for (int i = 0; i < sizeof(g_szBuffer) / 4; i++)
{
// 将当前4字节内存块强制解释为unsigned int类型
uNum = *(unsigned int*)(&g_szBuffer[i * 4]);
// 输出转换后的十进制整数值
printf("%d\r\n", uNum);
}
system("pause"); // 暂停程序防止控制台闪退
return 0;
}
恢复脚本:(把一个十进制整数(比如 1735287398)转换成计算机内存中的二进制存储形式,每次取4个字节(32位)
nums = [
859254885, 1714499893, 875837240, 825505075,
962737761, 1647404083, 842360118, 811938613
]
flag = b''.join(
num.to_bytes(4, byteorder='little') for num in nums
).decode()
print(f"flag{{{flag}}}")
flag{e073511f87443541a6b93d1b6e5253e0}
过程示例:

爱你
最低位RGB发现压缩包,保存

最后发现注释

安装utf9库后编写脚本
import utf9
pwd = b",\x9b\xce\xa6s)\xd0\xd2t\x10\x9c\x0c'3\x99\xdc`r2\x08\r'1\x010\xdev2\x90\xcf&\xe3 \xc4"
utf9.utf9decode(pwd)
key:LoveCynd1
flag{01e979f6dd21cd325e05fc1405e76bfd}
菜狗
第一步爆破可以得出压缩包密码:zaqqaz
解压后是一张图片,可用小绵羊的图片工具 cloacked-pixel 破解

记事本打开输出文件flag{ae7e960d8e7ce40e2157285680e2a5e4}
东北话是最好的语言
滑到底部发现是base转图片

小绵羊文本倒转后转图片,保存图片后010打开发现还有base编码

解码后得到东北话语言,下载脚本安装解密