[攻防世界]Reversing-x64Elf-100
下载下来的文件,放入查壳工具中,这是一个64位无壳的文件,拖入ida64中,查看到main函数之后反编译获得到了伪代码。
signed __int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
signed __int64 result; // rax
char s; // [rsp+0h] [rbp-110h]
unsigned __int64 v5; // [rsp+108h] [rbp-8h]
v5 = __readfsqword(0x28u);
printf("Enter the password: ", a2, a3);
if ( !fgets(&s, 255, stdin) )
return 0LL;
if ( (unsigned int)sub_4006FD((__int64)&s) )
{
puts("Incorrect password!");
result = 1LL;
}
else
{
puts("Nice!");
result = 0LL;
}
return result;
}
之后有一个if,是管输出成果还是失败的,进入if中查看。
signed __int64 __fastcall sub_4006FD(__int64 a1)
{
signed int i; // [rsp+14h] [rbp-24h]
const char *v3; // [rsp+18h] [rbp-20h]
const char *v4; // [rsp+20h] [rbp-18h]
const char *v5; // [rsp+28h] [rbp-10h]
v3 = "Dufhbmf";
v4 = "pG`imos";
v5 = "ewUglpt";
for ( i = 0; i <= 11; ++i )
{
if ( (&v3)[i % 3][2 * (i / 3)] - *(char *)(i + a1) != 1 )
return 1LL;
}
return 0LL;
}
之后根据这个伪代码进行脚本的编写。
flag_s = ['Dufhbmf','pG`imos','ewUglpt']
flag =''
for i in range(12):
s = chr(ord(flag_s[i%3][2*(int(i/3))])-1)
flag +=s
print(flag)
获得flag就是Code_Talkers