首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【愚公系列】2021年12月 攻防世界-简单题-REVERSE-004(re1)

【愚公系列】2021年12月 攻防世界-简单题-REVERSE-004(re1)

作者头像
愚公搬代码
发布2021-12-27 08:15:02
发布2021-12-27 08:15:02
3460
举报
文章被收录于专栏:历史专栏历史专栏

文章目录


一、re1

题目链接:https://adworld.xctf.org.cn/task/task_list?type=reverse&number=4&grade=0&page=1

二、使用步骤

1.运行exe

2.IDA

F5反编译找到main主体函数

代码语言:javascript
复制
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}


总结

  • IDA-F5用法
  • IDA-R用法
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、re1
  • 二、使用步骤
    • 1.运行exe
    • 2.IDA
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档