[攻防世界

先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}
原文地址:https://www.cnblogs.com/Here-is-SG/p/15200406.html