【BUGKU】easy_re

【BUGKU】easy_re

提示:
flag格式:DUTCTF{xxxx}
Hint: 1.逆向常用的工具有IDA 、ollydbg
地址

尝试

bugku_re
要输入一个flag串,尝试输入失败,根据提示使用IDA查找flag。

IDA

将文件拖入IDA中,按F5进行反编译(提示没有Decompiler,是安装的IDA不带反编译插件,找带的版本重新安装)得到c代码:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int v3; // eax
  __int128 v5; // [esp+0h] [ebp-44h]
  __int64 v6; // [esp+10h] [ebp-34h]
  int v7; // [esp+18h] [ebp-2Ch]
  __int16 v8; // [esp+1Ch] [ebp-28h]
  char v9; // [esp+20h] [ebp-24h]

  _mm_storeu_si128((__m128i *)&v5, _mm_loadu_si128((const __m128i *)&xmmword_413E34));
  v7 = 0;
  v6 = qword_413E44;
  v8 = 0;
  printf(&byte_413E4C);
  printf(&byte_413E60);
  printf(&byte_413E80);
  scanf("%s", &v9);//here
  v3 = strcmp((const char *)&v5, &v9);//比较v5和v9
  if ( v3 )
    v3 = -(v3 < 0) | 1;
  if ( v3 )
    printf(aFlag);
  else
    printf((const char *)&unk_413E90);
  system("pause");
  return 0;
}

v9是输入字符串,将输入v9和v5进行比较。向上查找v5的值,发现v5被赋初值在

  _mm_storeu_si128((__m128i *)&v5, _mm_loadu_si128((const __m128i *)&xmmword_413E34));
  查询如下:
 _mm_store_si128 ( __m128i *p, __m128i a);
指令名:void _mm_store_si128 ( __m128i *p, __m128i a);
功能:可存储128位数据;
说明:将__m128i 变量a的值存储到p所指定的变量中去;
注意:p必须是一个16-bit对齐的一个变量的地址。
之所以找xmmword_413E34(不只是个什么东西,应该是地址),反编译中双击到这里,右键data,得到flag。

最终得到flag为:DUTCTF{We1c0met0DUTCTF}。
bugku_re_flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值