Analysis
拿到附件用file
确定一下文件类型得知是64位ELF文件
,用IDA
分析:
mian
函数伪代码如下:
__int64 __fastcall main(int a1, char **a2, char **a3) { char s[264]; unsigned __int64 v5;
v5 = __readfsqword(0x28u); printf("Enter the password: "); if ( !fgets(s, 255, stdin) ) return 0; if ( (unsigned int)sub_4006FD(s) ) { puts("Incorrect password!"); return 1; } else { puts("Nice!"); return 0; } }
|
分析上述代码我们可以得知,程序首先定义了一个长度为264位的字符出s
,初步分析认为是用于存储程序的输入,往下看大致得知该程序为校验密码,跳转到验证函数sub_4006FD
验证函数伪代码如下:
__int64 __fastcall sub_4006FD(__int64 a1) { int i; _QWORD v3[4];
v3[0] = "Dufhbmf"; v3[1] = "pG`imos"; v3[2] = "ewUglpt"; for ( i = 0; i <= 11; ++i ) { if ( *(char *)(v3[i % 3] + 2 * (i / 3)) - *(char *)(i + a1) != 1 ) return 1; } return 0; }
|
Exploit
a=["Dufhbmf","pG`imos","ewUglpt"] s='' for i in range(12): s+=chr(ord(a[i % 3][2 * int(i / 3)])-1) print(s)
|