Bugku love

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35396598/article/details/86761189

https://ctf.bugku.com/challenges#love

首先是下载文件

程序的流程大体就是输入,然后比较。

所以首先用IDA打开程序,

使用 shift +F12  查看 有哪些字符串

看到有一个 enter the flag

那就是程序的入口吧,所以双击这个 字符串,然后

使用X , 查看地址

使用F5进行反编译

int sub_F756E0()
{
  size_t v0; // eax@6
  const char *v1; // eax@6
  size_t v2; // eax@9
  char v4; // [sp+0h] [bp-188h]@6
  char v5; // [sp+Ch] [bp-17Ch]@1
  size_t v6; // [sp+10h] [bp-178h]@3
  size_t j; // [sp+DCh] [bp-ACh]@6
  size_t i; // [sp+E8h] [bp-A0h]@1
  char Dest[108]; // [sp+F4h] [bp-94h]@5
  char Str; // [sp+160h] [bp-28h]@6
  char v11; // [sp+17Ch] [bp-Ch]@6
  unsigned int v12; // [sp+184h] [bp-4h]@1
  int savedregs; // [sp+188h] [bp+0h]@1

  memset(&v5, 0xCCu, 0x17Cu);
  v12 = (unsigned int)&savedregs ^ __security_cookie;
  for ( i = 0; (signed int)i < 100; ++i )
  {
    v6 = i;
    if ( i >= 0x64 )
      sub_F71154();
    Dest[v6] = 0;
  }
  sub_F7132F("please enter the flag:", v4);
  sub_F71375("%20s", &Str);
  v0 = j_strlen(&Str);
  v1 = (const char *)sub_F710BE(&Str, v0, &v11);
  strncpy(Dest, v1, 0x28u);
  sub_F71127();
  i = j_strlen(Dest);
  for ( j = 0; (signed int)j < (signed int)i; ++j )
    Dest[j] += j;
  v2 = j_strlen(Dest);
  strncmp(Dest, Str2, v2);
  if ( sub_F71127() )
    sub_F7132F("wrong flag!\n", v4);
  else
    sub_F7132F("rigth flag!\n", v4);
  sub_F7126C(&savedregs, &dword_F75890);
  sub_F71280();
  return sub_F71127();
}

代码有点长。。大概意思就是

将输入的串Str1先进行base64加密 再与串Str2比较 若相等 则输出"right flag"    ##PS 来自https://blog.csdn.net/xiangshangbashaonian/article/details/78923289

str2=="e3nifIH9b_C@n@dH"

解密的脚本参照这个师傅

import base64

s ="e3nifIH9b_C@n@dH"

flag =""

for i in range(len(s)):

flag += chr(ord(s[i])- i)

flag = base64.b64decode(flag)

print(flag)

得到 flag{i_l0ve_you}'

猜你喜欢

转载自blog.csdn.net/qq_35396598/article/details/86761189
今日推荐