Hello,RE!

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

Hello,RE!

80

或许你需要去学习下IDA的使用,但是只需要学一点点就能做这题了
PS:IDA里面按R可以把奇怪的数字变成字符串

格式为flag{*****}包含flag{}提交

参考资料:
《IDA Pro 权威指南》
各种CTF比赛的逆向部分的writeup

1.exe

打开这个.exe之后可以看见输入flag,输入2次之后猜测是一个循环只有输入正确才会停止

 直接把它丢进IDA中分析,F5可以得到主代码的伪代码(IDA载入目标程序后,按F5键,得到伪代码)

 分析代码:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char v4; // [esp+11h] [ebp-7Fh]       
  int v5; // [esp+75h] [ebp-1Bh]      //由地址可以知道v5-v12是连着的,是一个数组
  int v6; // [esp+79h] [ebp-17h]
  int v7; // [esp+7Dh] [ebp-13h]
  int v8; // [esp+81h] [ebp-Fh]
  int v9; // [esp+85h] [ebp-Bh]
  int v10; // [esp+89h] [ebp-7h]
  __int16 v11; // [esp+8Dh] [ebp-3h]
  char v12; // [esp+8Fh] [ebp-1h]

  __main();
  printf(&fmt);
  v5 = 'galf';    //这里选定需要转换的字符串,右键,选择R转换成字符串
  v6 = 'leW{';
  v7 = 'emoc';
  v8 = '_oT_';
  v9 = 'W_ER';
  v10 = 'dlro';
  v11 = '}!';
  v12 = 0;
  while ( scanf("%s", &v4) != -1 && strcmp(&v4, (const char *)&v5) )  //这里可以知道v4是我们输入的字符串,v5是那个长的字符串
    printf(aFlag);
  printf(aFlag_0);
  printf(&byte_410030);

  printf(&byte_410064);
  printf(&byte_41008F);

  getchar();
  getchar();
  return 0;
}

得出这个之后把每个段的字符串反着读出来:flag{Welcome_To_RE_World!}

 

 

猜你喜欢

转载自blog.csdn.net/hold_on_/article/details/83032952
re
今日推荐