NSSCTF_N1book_Re_[第五章 CTF之RE章]BabyConst
64位ELF文件
找到一些字符串,跟进后进入主函数:
__int64 __fastcall main(int a1, char **a2, char **a3) { __int64 result; // rax int i; // [rsp+Ch] [rbp-B4h] int j; // [rsp+Ch] [rbp-B4h] char v6[96]; // [rsp+10h] [rbp-B0h] BYREF char s[72]; // [rsp+70h] [rbp-50h] BYREF unsigned __int64 v8; // [rsp+B8h] [rbp-8h] v8 = __readfsqword(0x28u); puts("Input flag:"); __isoc99_scanf("%63s", s); if ( strlen(s) == 48 ) { for ( i = 0; i <= 11; ++i ) { sub_40085B(v6); sub_4008A7(v6, &s[4 * i], 4LL); sub_4009F5(v6, (char *)&unk_6031E0 + 16 * i); } for ( j = 0; j <= 11; ++j ) { if ( memcmp((const void *)(16LL * j + 6304224), (char *)&unk_603080 + 16 * j, 0x10uLL) ) { puts("GG!"); return 0LL; } } puts("Congratulations!"); result = 0LL; } else { puts("GG!"); result = 0LL; } return result; }
然后
sub_40085B函数:
_DWORD *__fastcall sub_40085B(_DWORD *a1) { _DWORD *result; // rax *a1 = 0; a1[1] = 0; a1[2] = 1732584193; a1[3] = -271733879; a1[4] = -1732584194; result = a1; a1[5] = 271733878; return result; }
最开始还以为只是简单的数组初始化
但是查查资料之后发现这个就是MD5的初始化MD缓存盒:
然后就是找找密文:
然后发现找到密文在函数unk_603080里:
在十六进制 查看:
刚刚好12行,每行32位,正好符合MD5密文字符数
然后挨行挨行解密:
拼起来就是
n1book{U5in9__c0n5ts_7o_1d3nt1fy_mD5__41gor1thm}