1. 程式人生 > 其它 >NSSCTF_N1book_Re_[第五章 CTF之RE章]BabyConst

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}