Polar靶场-Misc-困难部分 上

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编码

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

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇