【攻防世界】Reverse系列之re1

【攻防世界】Reverse系列之re1

使用IDA打开该文件,反汇编获取其源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // eax
__m128i v5; // [esp+0h] [ebp-44h] BYREF
__int64 v6; // [esp+10h] [ebp-34h]
int v7; // [esp+18h] [ebp-2Ch]
__int16 v8; // [esp+1Ch] [ebp-28h]
char v9[32]; // [esp+20h] [ebp-24h] BYREF

v5 = _mm_loadu_si128((const __m128i *)&xmmword_413E34);
v7 = 0;
v6 = 0x7D465443545544i64;
v8 = 0;
printf("欢迎来到DUTCTF呦\n");
printf("这是一道很可爱很简单的逆向题呦\n");
printf("输入flag吧:");
scanf("%s", v9);
v3 = strcmp(v5.m128i_i8, v9);
if ( v3 )
v3 = v3 < 0 ? -1 : 1;
if ( v3 )
printf(aFlag_0); //输入错误
else
printf(aFlagGet); //输入正确
system("pause");
return 0;
}

根据上面代码进行反推,关键代码为 **v3 = strcmp(v5.m128i_i8, v9);**所以反推回去可以判断只要输入值为v5.m128i这个变量的值,即判断成功,输出”flag get”

我们查看v5的值,可以看到为空值,这是为什么呢?我们看到代码中的**v5 = _mm_loadu_si128((const __m128i *)&xmmword_413E34);**这里才对v5进行赋值,我们查看xmmword_413E34的值

1
2
xmmword_413E34  xmmword 3074656D30633165577B465443545544h
qword_413E44 dq 7D465443545544h

将16进制转换为字符,对其进行解码

1
DUTCTF{We1c0met0DUTCTF}
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2024 John Doe
  • 访问人数: | 浏览次数:

让我给大家分享喜悦吧!

微信