1.查壳
64bit elf
还有一个文本文件,打开
打开是一串数字
根据这个txt文件的名称Output,可以猜测,这个文件的内容可能是程序的输出
2.静态分析
找到main函数反汇编
v7 = __readfsqword(0x28u);
stream = fopen("flag", "r");
fread(ptr, 1uLL, 0x14uLL, stream);
可以看出创建了一个文件输入流,将flag输入了stream
然后将·flag进行了处理后输出 为文件中内容
核心代码
for ( i = 1; i <= 19; ++i )
{
if ( i & 1 )
printf("%ld\n", (unsigned int)(ptr[i] << i));
else
printf("%ld\n", (unsigned int)(i * ptr[i]));
}
根据这段核心代码,按照逆向的方式,还原flag,编写wp
3.wp
ptr = [198,232,816,200,1536,300,6144,984,51200,570,92160,1200,565248,756,1474560,800,6291456,1782,65536000]
flag=""
for i in range(19):
if ((i+1) & 1):#初始i为0,源程序i为1
flag+=chr(ptr[i] >> (i+1))
else:
flag+=chr(ptr[i] // (i+1))
print(flag)
flag{d9-dE6-20c}