提示:
flag格式:DUTCTF{xxxx}
Hint: 1.逆向常用的工具有IDA 、ollydbg
地址
尝试
要输入一个flag串,尝试输入失败,根据提示使用IDA查找flag。
IDA
将文件拖入IDA中,按F5进行反编译(提示没有Decompiler,是安装的IDA不带反编译插件,找带的版本重新安装)得到c代码:
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // eax
__int128 v5; // [esp+0h] [ebp-44h]
__int64 v6; // [esp+10h] [ebp-34h]
int v7; // [esp+18h] [ebp-2Ch]
__int16 v8; // [esp+1Ch] [ebp-28h]
char v9; // [esp+20h] [ebp-24h]
_mm_storeu_si128((__m128i *)&v5, _mm_loadu_si128((const __m128i *)&xmmword_413E34));
v7 = 0;
v6 = qword_413E44;
v8 = 0;
printf(&byte_413E4C);
printf(&byte_413E60);
printf(&byte_413E80);
scanf("%s", &v9);//here
v3 = strcmp((const char *)&v5, &v9);//比较v5和v9
if ( v3 )
v3 = -(v3 < 0) | 1;
if ( v3 )
printf(aFlag);
else
printf((const char *)&unk_413E90);
system("pause");
return 0;
}
v9是输入字符串,将输入v9和v5进行比较。向上查找v5的值,发现v5被赋初值在
_mm_storeu_si128((__m128i *)&v5, _mm_loadu_si128((const __m128i *)&xmmword_413E34));
查询如下:
_mm_store_si128 ( __m128i *p, __m128i a);
指令名:void _mm_store_si128 ( __m128i *p, __m128i a);
功能:可存储128位数据;
说明:将__m128i 变量a的值存储到p所指定的变量中去;
注意:p必须是一个16-bit对齐的一个变量的地址。
之所以找xmmword_413E34(不只是个什么东西,应该是地址),反编译中双击到这里,右键data,得到flag。
最终得到flag为:DUTCTF{We1c0met0DUTCTF}。