吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 388|回复: 4
收起左侧

[CTF] 解题领红包之四 {Windows 初级题} ai的解题思路

[复制链接]
laremehpe 发表于 2026-3-4 22:05
本帖最后由 laremehpe 于 2026-3-4 22:11 编辑

解题领红包之四 {Windows 初级题}

概述

本指南解释了如何通过分析 Python 字节码从 crackme 挑战中提取密码。

步骤 1:提取可执行文件

使用 https://github.com/zrax/pycdc 工具将程序提取到 crackMe_py.exe_extracted\ 目录,其中包含 Python 字节码文件。

步骤 2:查找加密的标志

在提取的字节码文件 crackme_easy.pyc 中搜索加密数据,查找类似 base64 的模式:

import re
with open('crackMe_py.exe_extracted/crackme_easy.pyc', 'rb') as f:
    data = f.read()

# 搜索 base64 模式
b64_patterns = re.findall(rb'[A-Za-z0-9+/]{20,}={0,2}', data)

找到:e3w+fiRvfW18fnx4ZAZ6Pj43YwB9OWMXfXo8Dg4O

步骤 3:解码 Base64

加密的标志是 base64 编码的。对其进行解码:

import base64
encrypted_flag = "e3w+fiRvfW18fnx4ZAZ6Pj43YwB9OWMXfXo8Dg4O"
flag_bytes = base64.b64decode(encrypted_flag)
# 结果:b'{|>~$o}m|~|xd\x06z>>7c\x00}9c\x17}z<\x0e\x0e\x0e'

步骤 4:尝试 XOR 解密

由于挑战提示了 "XOR"(找到了类似 xor_decrypt 的函数名),尝试使用不同的密钥进行 XOR 解密:

# 尝试所有单字节 XOR 密钥(0-255)
for key in range(256):
    decrypted = bytes([b ^ key for b in flag_bytes])
    # 检查结果是否都是可打印的 ASCII 字符
    if all(32 <= b <= 126 for b in decrypted):
        print(f"密钥 {key}: {decrypted.decode('utf-8')}")

步骤 5:找到正确的密钥

只有 密钥 78(0x4E)产生包含有意义文本的可打印输出:

密钥 78: 52p0j!3#2026*H4ppy-N3w-Y34r@@@

这个字符串包含可识别的模式:

  • 52(来自 "52pojie")
  • 2026(来自年份)
  • H4ppy(看起来像 "Happy")
  • N3w(看起来像 "New")
  • Y34r(看起来像 "Year")

步骤 6:验证密码

为了确认这是正确的,用相同的密钥将其加密回去:

password = "52p0j!3#2026*H4ppy-N3w-Y34r@@@"
key = 78

# 加密
encrypted = bytes([ord(c) ^ key for c in password])

# 应该匹配原始的加密标志
print(encrypted == flag_bytes)  # True

完整的 Python 脚本

这是提取和验证密码的完整脚本:

import base64
import re

# 读取字节码文件
with open('crackMe_py.exe_extracted/crackme_easy.pyc', 'rb') as f:
    data = f.read()

# 查找 base64 模式
b64_patterns = re.findall(rb'[A-Za-z0-9+/]{20,}={0,2}', data)
print("找到的 base64 模式:", b64_patterns)

# 加密的标志
encrypted_flag = "e3w+fiRvfW18fnx4ZAZ6Pj43YwB9OWMXfXo8Dg4O"

# 解码 base64
flag_bytes = base64.b64decode(encrypted_flag)
print(f"\n加密的标志(十六进制):{flag_bytes.hex()}")
print(f"长度:{len(flag_bytes)} 字节")

# 尝试所有单字节 XOR 密钥
print("\n尝试使用所有密钥进行 XOR 解密:")
for key in range(256):
    decrypted = bytes([b ^ key for b in flag_bytes])
    if all(32 <= b <= 126 for b in decrypted):
        decrypted_str = decrypted.decode('utf-8')
        # 检查是否包含有意义的单词
        if any(word in decrypted_str.lower() for word in ['pojie', 'happy', '2026', 'flag']):
            print(f"密钥 {key:3d}: {decrypted_str}")

# 验证正确的密码
password = "52p0j!3#2026*H4ppy-N3w-Y34r@@@"
key = 78
encrypted = bytes([ord(c) ^ key for c in password])
print(f"\n验证:{encrypted == flag_bytes}")

总结

密码 *52p0j!3#2026H4ppy-N3w-Y34r@@@** 通过以下方式获得:

  1. 在字节码中找到 base64 编码的加密标志:e3w+fiRvfW18fnx4ZAZ6Pj43YwB9OWMXfXo8Dg4O
  2. 从 base64 解码得到:b'{|>~$o}m|~|xd\x06z>>7c\x00}9c\x17}z<\x0e\x0e\x0e'
  3. 使用密钥 78 进行 XOR 解密得到:52p0j!3#2026*H4ppy-N3w-Y34r@@@

免费评分

参与人数 2威望 +1 吾爱币 +21 热心值 +2 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
daxz + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

tiger198361 发表于 2026-3-5 15:41
谢谢楼主分享
leo200117 发表于 2026-3-5 16:14
CWS666 发表于 2026-3-8 16:59
 楼主| laremehpe 发表于 2026-3-8 20:25
CWS666 发表于 2026-3-8 16:59
学习了,可以把完整的题目发一下吗

题目在这里: https://www.52pojie.cn/home.php?mod=task&do=view&id=45
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-4-11 21:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表