BUUCTF reverse1

下载附件,用IDA64位打开,先shift+F12打开字符串窗口,再按ctrl+f搜索flag

BUUCTF reverse1_第1张图片

我们肯定是要找到正确的flag,那么我们就双击this is the right flag!

然后我们单击这一行,然后使用快捷键ctrl+x

BUUCTF reverse1_第2张图片

选择ok,进入框图

BUUCTF reverse1_第3张图片

使用快捷键F5

BUUCTF reverse1_第4张图片

得到伪代码

__int64 sub_1400118C0()
{
  char *v0; // rdi
  __int64 i; // rcx
  size_t v2; // rax
  size_t v3; // rax
  char v5[36]; // [rsp+0h] [rbp-20h] BYREF
  int j; // [rsp+24h] [rbp+4h]
  char Str1[224]; // [rsp+48h] [rbp+28h] BYREF
  unsigned __int64 v8; // [rsp+128h] [rbp+108h]

  v0 = v5;
  for ( i = 82i64; i; --i )
  {
    *(_DWORD *)v0 = -858993460;
    v0 += 4;
  }
  for ( j = 0; ; ++j )
  {
    v8 = j;
    v2 = j_strlen(Str2);
    if ( v8 > v2 )
      break;
    if ( Str2[j] == 111 )
      Str2[j] = 48;
  }
  sub_1400111D1("input the flag:");
  sub_14001128F("%20s", Str1);
  v3 = j_strlen(Str2);
  if ( !strncmp(Str1, Str2, v3) )
    sub_1400111D1("this is the right flag!\n");
  else
    sub_1400111D1("wrong flag\n");
  sub_14001113B(v5, &unk_140019D00);
  return 0i64;
}

 然后我们就可以读代码了,我们发现程序对str1与str2进行了比较

这里的str1是用户输入的,但是我们不知道str2的值,我们只能双击str2看一下

我们发现这个str2是原先就存在的,而且我们要输入的str1要和str2比较如果相同就是我们所需的flag,但是在之前程序对str2进行了一系列操作

for ( j = 0; ; ++j )
  {
    v8 = j;
    v2 = j_strlen(Str2);
    if ( v8 > v2 )
      break;
    if ( Str2[j] == 111 )
      Str2[j] = 48;
  }

 这里就是将str2中ASCII等于111换成48,那么str2就变成了{hell0_w0rld},那么我们最后要输入的flag就是这个了

你可能感兴趣的:(CTF,java,C)