使用的工具:IDA(虽说这题是Linux的ELF文件逆向,但是我还正式学Linux,于是。。。)
找到主函数,分析一下,先是读取输入,然后是一个if/else。
IF sub_8048451()==1:
调用函数sub_80484F7
ELSE
write(1, "Wrong\n", 6u)
然后看看sub_80484F7是什么:
return write(1, "Correct!\n", 9u);
于是乎显然,答案在sub_8048451()中。
sub_8048451():
{
if ( byte_804A021 != '1' )
return 0;
byte_804A020 ^= 52u;
byte_804A022 ^= 50u;
byte_804A023 ^= 136u;
if ( byte_804A024 != 'X' )
return 0;
if ( byte_804A025 )
return 0;
if ( byte_804A022 != 124 )
return 0;
if ( byte_804A020 == 'x' )
return byte_804A023 == -35;
return 0;
}
函数对输入进行了一番处理与判断。
分析一下,如果要让sub_8048451()==1,则:
byte_804A020=='x' ^ 52;
byte_804A021=='1';
byte_804A022==124^50;
byte_804A023==-35^136;
byte_804A024=='X';
byte_804A025==0
写个程序输出一下:
#include <stdio.h>
int main(void){
int a[5];
a[0]='x'^52;
a[1]='1';
a[2]=124^50;
a[3]=-35^136;
a[4]='X';
for (int i = 0; i < 5; i++)
printf("%c", a[i]);
return 0;
}
result:L1NUX
这就是答案了吧。