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

举报
愚公搬代码 发表于 2021/12/26 13:28:12 2021/12/26
【摘要】 一、re1题目链接:https://adworld.xctf.org.cn/task/task_list?type=reverse&number=4&grade=0&page=1 二、使用步骤 1.运行exe 2.IDAF5反编译找到main主体函数int __cdecl main(int argc, const char **argv, const char **envp){ int ...

一、re1

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

二、使用步骤

1.运行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}


总结

  • IDA-F5用法
  • IDA-R用法
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。