【Writeup】Bugku-逆向-easy_re

 

题目来源

运行程序

找到main函数,如下:

 1 int __cdecl main(int argc, const char **argv, const char **envp)
 2 {
 3   int v3; // eax
 4   __int128 v5; // [esp+0h] [ebp-44h]
 5   __int64 v6; // [esp+10h] [ebp-34h]
 6   int v7; // [esp+18h] [ebp-2Ch]
 7   __int16 v8; // [esp+1Ch] [ebp-28h]
 8   char v9; // [esp+20h] [ebp-24h]
 9 
10   _mm_storeu_si128((__m128i *)&v5, _mm_loadu_si128((const __m128i *)&xmmword_413E34));
11   v7 = 0;
12   v6 = qword_413E44;
13   v8 = 0;
14   printf(&byte_413E4C);
15   printf(&byte_413E60);
16   printf(&byte_413E80);
17   scanf("%s", &v9);
18   v3 = strcmp((const char *)&v5, &v9);
19   if ( v3 )
20     v3 = -(v3 < 0) | 1;
21   if ( v3 )
22     printf(aFlag);
23   else
24     printf((const char *)&unk_413E90);
25   system("pause");
26   return 0;
27 }

其中三个printf的内容分别为如下,和程序运行时看到的一样:

通过scanf将输入的值赋给v9,并与v5进行字符串比较,但v5并没有被赋值,到这里就没有头绪了。

接下来判断v3是否为0,输出的结果分别如下:

这时发现还有一个

1 v6 = qword_413E44;

看看里面是什么东西:

转码之后为:

注意这里和上面的字符都是倒着写的,整体转过来应该就是flag了:

DUTCTF{We1c0met0DUTCTF}

posted @ 2020-04-26 11:24  AFJ1923  阅读(277)  评论(0)    收藏  举报