这是第一题
确实运行就可以获得flag
第二题
下载文件然后放在虚拟机中,分析file
然后放ida 64位分析
__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
__int64 result; // rax
char v4; // [rsp+0h] [rbp-20h]
unsigned int v5; // [rsp+8h] [rbp-18h]
unsigned __int64 v6; // [rsp+18h] [rbp-8h]
v6 = __readfsqword(0x28u);
setbuf(stdin, 0LL);
setbuf(stdout, 0LL);
setbuf(stderr, 0LL);
puts("What's Your Birth?");
__isoc99_scanf("%d", &v5);
while ( getchar() != 10 )
;
if ( v5 == 1926 )
{
puts("You Cannot Born In 1926!");
result = 0LL;
}
else
{
puts("What's Your Name?");
gets(&v4);
printf("You Are Born In %d\n", v5);
if ( v5 == 1926 )
{
puts("You Shall Have Flag.");
system("cat flag");
}
else
{
puts("You Are Naive.");
puts("You Speed One Second Here.");
}
result = 0LL;
}
return result;
}
这个代码意思是v5为1926时候得到 system(“cat flag”),但是刚开始输入v5不能为1921,之后在输入v4此处可以发现出现溢出,所以可以通过gets(&v4)溢出至v5覆盖数据为1921,16进制为0x786。
然后编写shellcode
(这里应该写p64,emmm其实结果都一样)
第三题
与第二题类似,直接上代码