[2019红帽杯]easyRE

  1. 先用IDA打开,无main函数,查字符串
    1

  2. 先进入个关键词
    2

​ 解码:

3

4

发现是干扰项

  1. 进入第二个关键词所在函数

    5

​ 在汇编界面,找到v12
6

​ 逆向运算得到v15

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
char v15[]={0x49,
0x6F,
0x64,
0x6C,
0x3E,
0x51,
0x6E,
0x62,
0x28,
0x6F,
0x63,
0x79,
0x7F,
0x79,
0x2E,
0x69,
0x7F,
0x64,
0x60,
0x33,
0x77,
0x7D,
0x77,
0x65,
0x6B,
0x39,
0x7B,
0x69,
0x79,
0x3D,
0x7E,
0x79,
0x4C,
0x40,
0x45,
0x43};
int i;
char result[strlen(v15)];
for ( i = 0; i < strlen(v15); ++i ){
result[i] =v15[i] ^ i;
}
printf("%s",result);
}

得到

7

到这里后没什么线索了,就在能再去找了
发现可疑字符串

8

进入函数

9

根据前面的提示,前4个字符是flag,猜测这个函数大概的意思就是v1分别和byte_6CC0A0和byte_6CC0A3的前四个字符异或是flag,就进行第二个循环,先可以编写解题脚本了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
char byte_6CC0A0[]={
0x40,0x35,0x20,0x56, 0x5D, 0x18, 0x22, 0x45, 0x17, 0x2F, 0x24, 0x6E, 0x62,
0x3C, 0x27, 0x54, 0x48, 0x6C, 0x24, 0x6E, 0x72, 0x3C, 0x32,
0x45, 0x5B
};
int i,j;
char flag[] = "flag";
char flag2[4];
char result[strlen(byte_6CC0A0)];
for(i = 0;i < 4; i++){
flag2[i] = flag[i] ^ byte_6CC0A0[i];
}
for ( i = 0; i < strlen(byte_6CC0A0); ++i ){
j = i%4;
result[i] = flag2[j] ^ byte_6CC0A0[i];
}
printf("%s",result);
}
1
flag{Act1ve_Defen5e_Test}