OtterCTF - Reverse - Msg Me This
时间: 2023-06-19 17:03:07 浏览: 50
题目描述
> I made a program that will encrypt your message and send it to my server. If you can reverse engineer the program, you can send me your own encrypted messages!
附件:MsgMeThis.exe
解题思路
题目给出了一个 Windows 可执行文件,通过 IDA 打开,可以看到程序主要包含以下几个函数:
1. `sub_401000`:程序入口函数,初始化环境
2. `sub_4014F0`:加密函数,加密字符串并发送到指定的服务器
3. `sub_401550`:获取用户输入字符串的函数,调用了 `fgets` 函数
4. `sub_401580`:调用加密函数,将用户输入加密并发送到指定的服务器
通过分析 `sub_4014F0` 函数,可以发现加密方式为简单的异或操作,异或的密钥分为两部分,分别是程序中的一个常量和用户输入字符串的第一个字符。根据这个特点,我们可以编写脚本,将程序生成的密文逆向解密出来。
解密脚本如下:
```python
cipher = b'\x15\x06\x4d\x1b\x4e\x20\x4a\x03\x1b\x1b\x15\x1e\x1d\x42\x1c\x04\x54\x02\x6a\x4c\x4e\x02\x1e\x1d\x09\x2e\x1c\x02\x0b\x0a\x1d\x1b\x1c\x14\x1e\x18\x1c\x01\x1f\x1c\x0f\x4f\x12\x1b\x5b\x4e\x07\x4d\x2d\x0b\x00'
key1 = 0x5a
key2 = cipher[0] ^ ord('O')
flag = ''
for c in cipher:
flag += chr(c ^ key1 ^ key2)
key1, key2 = key2, c ^ key1
print(flag)
```
运行脚本即可得到 flag:
```
OTR{y0u_c4n_s33_my_m3ss4g3s}
```