吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1041|回复: 3
收起左侧

[CTF] 2026【春节】解题领红包之二 {Windows 初级题}_解题思路分享

[复制链接]
wansconst 发表于 2026-4-1 20:29
本帖最后由 wansconst 于 2026-4-1 20:36 编辑

我之前没有学习过PC程序逆向,之前有下过一个CE程序,不会使用干脆直接拖入IDA中,发现真的可以进行解析成功,那好呀直接根据题目运行后的提示搜索字符串,发现了一条记录,查看引用跟进,找到本次题目的主逻辑。
B01CMD窗口题目程序.jpg
B02IDA查找字符串.jpg
B03IDA查看字符串引用.jpg
B05IDA查看伪代码.jpg

查看伪代码猜测p_Str就是我们输入的字符串并查看紧接着跟着他的函数
B06IDA查看伪代码.jpg
B07IDA查看伪代码.jpg

进入函数内部发现一个静态变量,我们点击它的地址查看它的值,发现并没有其他地方进行赋值只要我们刚刚一处进行了读取,说明它是提前存好的,如果IDA View窗口没有值我们就去Hex View窗口进行查看
B08IDA查看全局变量存储的值.jpg

然后再回到主函数查看它的其他代码
B09IDA解析伪代码.jpg

最后我们已经确定解密逻辑就在如图第三个框框里的if分支内,那么我们可以直接进入函数内部进行查看
B10IDA解析伪代码.jpg

函数内部显示开辟了100字节空间的函数再是进行这100字节空间的初始化,我们进入到初始化函数内部查看其逻辑
B11IDA解析伪代码.jpg
可以发现它进行了前32字节数据的初始化,我们把伪代码丢给AI生成python脚本进行获取它初始化的内容,代码如下:
[Python] 纯文本查看 复制代码

def decrypt_block():
    # 原始数据,按照 sub_401620 中的顺序
    data = [
        758280311,  # 0x2D2D2D77 -> 0x77, 0x2D, 0x2D, 0x2D
        1663511336,  # 0x632D2D28 -> 0x28, 0x2D, 0x2D, 0x63
        1880974179,  # 0x702D2D63 -> 0x63, 0x2D, 0x2D, 0x70
        494170226,  # 0x1D6F6E72 -> 0x72, 0x6E, 0x6F, 0x1D
        842146570,  # 0x32320F0A -> 0x0A, 0x0F, 0x32, 0x32
        657202491,  # 0x272D2D3B -> 0x3B, 0x2D, 0x2D, 0x27
        658185525,  # 0x273F2D35 -> 0x35, 0x2D, 0x3F, 0x27
    ]

    # 构建字节数组
    bytes_list = []

    # 添加 DWORD 值(4字节整数),注意小端序
    for dword in data:
        # 小端序转换为字节
        bytes_list.extend([dword & 0xFF, (dword >> 8) & 0xFF,
                           (dword >> 16) & 0xFF, (dword >> 24) & 0xFF])

    # 添加 WORD 值 (12323 = 0x3023)
    bytes_list.append(0x23)  # 低字节
    bytes_list.append(0x30)  # 高字节

    # 添加 BYTE 值 (99 = 0x63)
    bytes_list.append(0x63)

    # 对前 31 个字节进行异或 0x42 解密
    for i in range(31):
        bytes_list[i] ^= 0x42

    # 转换为字符串
    result = bytes(bytes_list[:31]).decode('ascii')
    return result


if __name__ == '__main__':
    # 计算并打印结果
    decrypted_string = decrypt_block()
    print(f"解密后的字符串: '{decrypted_string}'")
    print(f"字符串长度: {len(decrypted_string)}")
    print(f"十六进制表示: {bytes(decrypted_string, 'ascii').hex()}")




这是我第一次分析Windows程序,笨重之处请见谅,不太会表达没表达清楚的地方请发表评论我会一一回复。

免费评分

参与人数 4威望 +1 吾爱币 +23 热心值 +4 收起 理由
358059103 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
111mz + 1 + 1 热心回复!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
伤城幻化 + 1 + 1 能看懂汇编和伪代码已经很强了

查看全部评分

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

358059103 发表于 2026-4-3 12:04
能看懂汇编和伪代码确实专业啊,非常不错的教程,收藏学习下。感谢分享。
jiushidt 发表于 2026-4-3 19:07
aaa9527aaa 发表于 2026-4-3 23:25
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-5-24 18:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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