2024_moectf_re

2024_MoeCTF

xor

首先打开 exe 文件

xor

然后直接进 IDA 进行观察,看到红圈前面的异或以及圈后面的数组,可以判断这里只要解一个异或就好了

xor_IDA

点进红圈,可以看到所求的 flag 的异或值,把它导出来,之后简单使用脚本回溯一下就好了

xor_hex

脚本编写的时候,在 exe 最开始有提示,len=45,可以对长度进行控制。不过不控制也行,最后不属于花括号的内容自己人工判断一下就好了。脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
int main()
{
char password_enc[] = {
73, 75, 65, 71, 80, 66, 95, 65, 28, 22,
70, 16, 19, 28, 64, 9, 66, 22, 70, 28,
9, 16, 16, 66, 29, 9, 70, 21, 20, 20,
9, 23, 22, 20, 65, 64, 64, 22, 20, 71,
18, 64, 20, 89
};
char password[45];
for (int i = 0; i < 46; i++) {
password[i] = password_enc[i] ^ 0x24;
}
password[45] = 0;
printf("%s\n", password);
return 0;
}
//moectf{e82b478d-f2b8-44f9-b100-320edd20c6d0}

tea

简单的茶算法,直接打开 IDA进行查看,这里我对函数进行了简单的修改,使伪代码看起来更清楚。

可以看到,首先会输出提示,说明 flag 的前3部分被取出来成为了密钥的一部分,然后对你的输入进行读取。然后对你的输入进行运算,验证成功和失败都有提示。简单判断,v4、v5即为所求,同时黄色部分的 v5 也能看出,后两个4位字符串共同拼接成了 v5,计算完成后手动拆分即可。

tea_IDA

通过题干给出的 v4、v5 写出简单的 TEA 解码脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdint.h>
int main()
{
uint32_t v4 = 0x284C2234;
uint32_t v5 = 0x3910C558;
uint32_t delta = 0x61C88647;
uint32_t v3 = -(0x61C88647*0x20);
for(int i=0;i<32;i++)
{
v5 -= (v4 + v3) ^ (0x10 * v4 + 0x61657472) ^ ((v4 >> 5) + 0x61657478);
v4 -= (v5 + v3) ^ (0x10 * v5 + 0x65736162) ^ ((v5 >> 5) + 0x6F783436);
v3 += delta;
}
printf("%x %x", v4, v5); //哈希输出
}
//836153a5 8e00 49bd
//moectf{836153a5-8e00-49bd-9c42-caf30620caaf}

2024_moectf_re
http://example.com/2024/09/11/2024-moectf-re/
作者
Tsglz
发布于
2024年9月11日
许可协议