【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}