靶场:攻防世界题目名称:Reversing-x64Elf-100难度:11、下载题目后,发现是后缀为.re的文件 2、为了识别文件类型,放入kali使用file进行识别,确认为64位的ELF文件 3、执行测试 流程大致是执行文件后,会让你输入password,这个password可能是flag,或者找到password后会给你返回flag。4、查看是否加壳,确认无壳 5、放入ida查看 6、文件导入后,可以在右侧函数名称栏,明显看到main函数,一般main函数都是程序入口 7、按F5快捷键进行编译 函数如下,我门对该函数进行解析:__int64 __fastcall main(int a1, char **a2, char **a3){ char s[264]; // [rsp+0h] [rbp-110h] BYREF unsigned __int64 v5; // [rsp+108h] [rbp-8h]
v5 = __readfsqword(0x28u); printf("Enter the password: "); if ( !fgets(s, 255, stdin) ) return 0LL; if ( (unsigned int)sub_4006FD(s) ) { puts("Incorrect password!"); return 1LL; } else { puts("Nice!"); return 0LL; }}定义了一个264位的字符串s,这个应该是执行程序后输入的字符串,然后会通过如下语句进行输入提示字符串printf("Enter the password: "); ,然后读取字符串然后发送到sub_4006FD函数进行校验,如果校验失败提示Incorrect password!,校验成功返回nice。
8、我们跳转到校验密码函数sub_4006FD看一下。 可以看到代码如图所示,v3是一个二维数组,v3[][],,然后通过for循环,0<i<12,如果校验算出的值比我们输入的值大于1,则通过校验,返回0LL,否则校验失败,返回1LL。校验算法为v3数据第一个参数为i%3,第二个参数为[2*(i/3)],这里的i/3是c语言中的,取得整,然后通过ascll码减一再转为字符串得到我们的flag。
9、Exp代码如下(python3): 运行结果如下:Code_Talkers
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)