先exeinfo查一下
发现是32位文件,用32位的ida打开,反编译主函数
观察代码主体
scanf("%s", &v9);
v3 = strcmp((const char *)&v5, &v9);
if ( v3 )
v3 = -(v3 < 0) | 1;
if ( v3 )
printf(aFlag_0);
else
printf((const char *)&unk_413E90);
追踪aFlag_0,发现此时是错误答案的提示
故v3的值在第二个if之前一定是0
考虑到1, -1与1进行|运算结果结果均不为0,则
v3 = strcmp((const char *)&v5, &v9);
该运算结果为0,即v5与v9字典序相同,为同一字符串
考虑到v9由我们输入,则v5储存了flag
又v5由__int128定义,应与xmmword有关,则猜测xmmword_413E34储存了flag,双击追踪,发现其储存的值为"3074656D30633165577B465443545544h"
按a键将其直接转换为字符串,得到flag
DUTCTF{We1c0met0DUTCTF}