题目分析
题目设置的还是比较巧妙的。
本身是一个二进制的文件,linux 64环境,保护情况如下:
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: PIE enabled
功能一共三个:
1. go: 选择一个level,然后会再问你一次level,输入之后,回答两次level想加这么多次的问题,就是a * b类型,回答完成之后输出你在多少秒内完成了多少level
2. hint: 打印NO PWN NO FUN
3. give up: 退出
实现如下:
go
int go(void)
{
int v1; // ST0C_4@10
__int64 v2; // [sp+0h] [bp-120h]@1
int v3; // [sp+8h] [bp-118h]@9
__int64 v4; // [sp+10h] [bp-110h]@0
__int64 v5; // [sp+10h] [bp-110h]@4
signed __int64 v6; // [sp+18h] [bp-108h]@7
__int64 v7; // [sp+20h] [bp-100h]@10
puts("How many levels?");
v2 = read_num();
if ( v2 > 0 )
v4 = v2;
else
puts("Coward");
puts("Any more?");
v5 = v4 + read_num();
if ( v5 > 0 )
{
if ( v5 <= 999 )
{
v6 = v5;
}
else
{
puts("More levels than before!");
v6 = 1000LL;
}
puts("Let's go!'");
v3 = time(