Press

1

打开主函数,可以看到先打开了一个flag的文件,最后经过计算存入out文件中,先查看out文件的内容,010打开

2

里面的数据就是最后存入的数据,再看主函数,可以猜测主要的逻辑在sub_40094B里面,进去看看

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
__int64 sub_40094B()
{
int i; // [rsp+0h] [rbp-8h]
int j; // [rsp+4h] [rbp-4h]

switch ( s[dword_6020A0] )
{
case '>':
++dword_602348;
break;
case '<':
--dword_602348;
break;
case '+':
++byte_6021A0[dword_602348];
break;
case '-':
--byte_6021A0[dword_602348];
break;
case '*':
byte_6021A0[dword_602348] *= byte_6021A0[dword_602348 + 1];
break;
case '.':
byte_6020C0[dword_602268++] = byte_6021A0[dword_602348];
break;
case ',':
byte_6021A0[dword_602348] = byte_6026A0[dword_602680++];
break;
case '[':
if ( !byte_6021A0[dword_602348] )
{
for ( i = 1; dword_602360[dword_6020A0 + i] != dword_602360[dword_6020A0]; ++i )
;
dword_6020A0 += i;
}
break;
case ']':
for ( j = -1; dword_602360[dword_6020A0 + j] != dword_602360[dword_6020A0]; --j )
;
dword_6020A0 = dword_6020A0 + j - 1;
break;
}
return (unsigned int)++dword_6020A0;
}

通过case可以看到熟悉的,.+-[ ],这个应该就是brainfuck,主要都是对byte_6021A0进行操作,交叉应用查找一下,找到另一个调用这个的函数

3

++++++++++[->++++++++++++++++<],[->-<]>>[-]+++++<*++.<*运行一下就可以知道然后它加入了运算,[ 和 ] 是两个for循环,第一个for循环代表的意思是加160,它加了10次,代表的是每次加16,后面对应的就是减去我们输入的a[i],后面再乘5和加2,直接可以写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
flag=[0x60, 0xE1, 0x2F, 0x05, 0x79, 0x80, 0x5E, 0xE1, 0xC5, 0x57,
0x8B, 0xCC, 0x5C, 0x9A, 0x67, 0x26, 0x1E, 0x19, 0xAF, 0x93,
0x3F, 0x09, 0xE2, 0x97, 0x99, 0x7B, 0x86, 0xC1, 0x25, 0x87,
0xD6, 0x0C, 0xDD, 0xCF, 0x2A, 0xF5, 0x65, 0x0E, 0x73, 0x59,
0x1D, 0x5F, 0xA4, 0xF4, 0x65, 0x68, 0xD1, 0x3D, 0xD2, 0x98,
0x5D, 0xFE, 0x5B, 0xEF, 0x5B, 0xCC]

a=""
b=0
for i in range(0x38):
b=b+0xa0
b=b&0xff
for j in range(0,128):
c=((b-j)*5+2)&0xff
if c==flag[i]:
a+=chr(j)
b=c
break
print(a)

ZmxhZ3tkZTBiZDY3ZS02ZDI1LTg3ZDctMTg3Ni1hZDEzMWE2MTY1Y2J9

最后再base64解码

flag{de0bd67e-6d25-87d7-1876-ad131a6165cb}

Lithops

首先运行程序尝试输入,根据运行结果可以猜测存在一个值与输入的(经过运算后)flag进行比对。

主要的加密函数是402970

直接动态调试,在这里下断点

4

v6这里在输出时多次出现,应该就是最后判断是否相等的地方,点进去查看

5

他的值为E4 B8 8D E5 81 9A E4 BC 9F E5 A4 A7 E6 97 B6 E4 BB A3 E7 9A 84 E6 97 81 E8 A7 82 E8 80 85

402900对输入的flag进行utf-8编码,解码

6

既然是中文

生瓜蛋子

太坑了,看官方wp吧

https://mp.weixin.qq.com/s/1V5BEsfdZNRKwWP1mCs8wQ