一、re1
题目链接:https://adworld.xctf.org.cn/challenges/list
二、使用步骤
-
运行exe
2.IDA
F5反编译找到main主体函数
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进行跟进。
我们使用IDA的另一个功能 R ,能够将十进制的数转换为字符串。
得到flag:DUTCTF{We1c0met0DUTCTF}
————————————————
转载于:
https://blog.csdn.net/aa2528877987/article/details/122154371
原文始发于微信公众号(网络安全学习爱好者):攻防世界-简单题-REVERSE-003(re1)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论