NSSCTF_N1book_Re_[第五章 CTF之RE章]BabyConst
阿新 • • 發佈:2022-05-17
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((constvoid *)(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}