攻防世界-简单题-REVERSE-003(re1)

admin 2023年3月21日13:32:19评论26 views字数 1013阅读3分22秒阅读模式

一、re1

题目链接:https://adworld.xctf.org.cn/challenges/list

二、使用步骤

  1. 运行exe

攻防世界-简单题-REVERSE-003(re1)

2.IDA

F5反编译找到main主体函数

攻防世界-简单题-REVERSE-003(re1)

int __cdecl main(int argc, const char **argv, const char **envp){  int v3; // eax  __m128i v5; // [esp+0h] [ebp-44h] BYREF  int v6; // [esp+1Ch] [ebp-28h]  char v7[32]; // [esp+20h] [ebp-24h] BYREF
v5 = _mm_loadu_si128((const __m128i *)&xmmword_413E34); LOWORD(v6) = 0; printf(&byte_413E4C, v5.m128i_i64[0], v5.m128i_i64[1], 1129600324, 8210004, 0, v6); printf(&byte_413E60); printf(&byte_413E80); scanf("%s", v7); v3 = strcmp(v5.m128i_i8, v7); if ( v3 ) v3 = v3 < 0 ? -1 : 1; if ( v3 ) printf(aFlag); else printf(aFlagGet); system("pause"); return 0;}

可以看到一个关键的字符串,print(aFlag),那么证明这就是输入正确flag,然后,会输出aFlag证明你的flag正确,然后,继续往上分析,可以看到v3的值,是由strcmp()决定的,比较v5和输入的字符串,如果一样就会进入后面的if判断,所以,我们继续往上分析,看看哪里又涉及v5,可以看到开头的_mm_storeu_si128(),对其进行分析发现它类似于memset(),将xmmword_413E34的值赋值给v5,所以,我们可以得到正确的flag应该在xmmword_413E34中,然后,我们双击413E34进行跟进。

攻防世界-简单题-REVERSE-003(re1)

我们使用IDA的另一个功能 R ,能够将十进制的数转换为字符串。

攻防世界-简单题-REVERSE-003(re1)

得到flag:DUTCTF{We1c0met0DUTCTF}


————————————————

转载于:

https://blog.csdn.net/aa2528877987/article/details/122154371


原文始发于微信公众号(网络安全学习爱好者):攻防世界-简单题-REVERSE-003(re1)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月21日13:32:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   攻防世界-简单题-REVERSE-003(re1)https://cn-sec.com/archives/1617770.html

发表评论

匿名网友 填写信息