World-Wide-CTF-2024 Flag Checker wp

题目提示关注main函数执行前的函数,看到有回调函数TlsCallback_0

image

这样下来Source的值是FAKE,说明有问题

image

看main函数,加载4-character的参数,储存在pbInput,用FindResourceW查找程序内嵌的资源(ID为101,类型为0xA),算参数的MD5,异或进行资源解密

image

尝试连接命名管道".\pipe\wwf1",用 CreateFile 打开管道(\.\pipe\wwf1),然后通过 WriteFile 发送数据,ReadFile 接收数据。

管道服务(\.\pipe\wwf1)是一种 进程间通信(IPC, Inter-Process Communication) 机制,允许不同程序(或同一程序的不同部分)通过 命名管道(Named Pipe) 交换数据。

在这里,真正的 flag 检查可能在服务端(也就是前面的资源),客户端只负责发送和接收结果。

image

可以用CFF Explorer 提取资源

命名管道的服务端通常是一个独立的可执行程序,而这些程序的最后都是00数据

image

0异或任何数都是这个数本身,可以用这个知道异或的MD5值是什么

image

image

那么参数应该是FLAG

import hashlib
md5 = hashlib.md5(b"FLAG").digest()  
with open("ch1.exe", "rb") as f:
    encrypted_data = f.read()
decrypted = bytes([encrypted_data[i] ^ md5[i % 16] for i in range(len(encrypted_data))])
with open("ch2.exe","wb") as f:
    f.write(decrypted)

解密资源,再来分析资源

image

image

这里才是真正的check

image

image

分析函数

image

image

rc4解密得到aes的key和iv

image

命名管道(Named Pipe)是什么?

管道(Pipe) 是一种单向或双向的数据通道,类似于现实中的水管,数据像水流一样从一个进程流向另一个进程。
命名管道(Named Pipe) 是 Windows 提供的机制,允许 不同进程(甚至不同机器)通过 名称(如 \.\pipe\mypipe)通信。
它采用 客户端-服务器(Client-Server)模型:
服务端(Server) 创建管道并等待连接。
客户端(Client)(如这段代码)尝试连接并发送数据。

RCData 的常见用途

存储自定义数据(如配置文件、密钥、Shellcode、加密数据等)。

存储未加密的资源(如游戏素材、脚本、文本数据)。

存储加密/压缩的数据(需要程序运行时解密)。

posted @ 2025-07-22 21:13  zzz222666  阅读(48)  评论(0)    收藏  举报