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}

 

posted @ 2022-05-17 20:56  Luccky  阅读(212)  评论(0编辑  收藏  举报