xctf攻防世界 REVERSE 高手进阶区 srm-50

0x1. 进入环境,下载附件

题目给出了一个exe文件,打开运行后,效果如图:
在这里插入图片描述

0x2. 问题分析

0x2_1. 检查是否套壳

使用exeinfo PE打开文件,如图:
在这里插入图片描述
没有任何套壳。

0x2_2. 使用IDA分析

将程序丢入IDA中,搜索main函数,F5反编译得到伪代码,如图:
在这里插入图片描述
针对重点代码进行分析:

BOOL __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4)
{
  if ( strstr(&String, "@") && strstr(&String, ".") && strstr(&String, ".")[1] && strstr(&String, "@")[1] != 46 ) // 判断用户输入的邮箱格式是否正确
  {
    v28 = xmmword_410AA0;    // 双击变量,变成字符可以看到 'iaf noitartsigeR'
    v29 = 1701999980;
    *(_OWORD *)Src = xmmword_410A90; // 'cuS noitartsigeR'
    v30 = 46;
    v26 = xmmword_410A80; //  galf ruoY !ssec
    v27 = 3830633;
    if ( strlen(v11) != 16 // 前文定义v11是4位字符,但是此处是需要v11长度为16
      || v11[0] != 'C'
      || v23 != 88
      || v11[1] != 'Z'
      || v11[1] + v22 != 155
      || v11[2] != '9'
      || v11[2] + v21 != 155
      || v11[3] != 'd'
      || v20 != '7'
      || v12 != 'm'
      || v19 != 'G'
      || v13 != 'q'
      || v13 + v18 != 170
      || v14 != '4'
      || v17 != 'g'
      || v15 != 'c'
      || v16 != '8' )
    {
      strcpy_s(&Text, 0x100u, (const char *)&v28); // 如果上述条件满足,则v28变量的内容送到提示框
    }
    else
    {
      strcpy_s(&Text, 0x100u, Src); // 将src提示信息送入提示框
      strcat_s(&Text, 0x100u, v11); // 再将v11的信息粘贴到src后面
    }
  }
  else
  {
    strcpy_s(&Text, 0x100u, "Your E-mail address in not valid.");
  }
  MessageBoxA(hDlg, &Text, "Registeration", 0x40u); // 返回弹框对象
  return 1;
}

这里很迷糊的一点就是,明明前面定义v11是char类型的4位长度,结果if语句中判断要求是11位,那么到底是多少?我们双击一下v12变量,看看存放的地址,如图:
在这里插入图片描述
var240地址是v11,存放4个地址位后,v12放在的var23C位置,那么相当于输入多余的内容会放入后续的,v12,v13,v14…等地址位置,这样看就一目了然了,将if的内容转换成字符:
在这里插入图片描述
v11分别为:CZ9d
v12-v20分别为:mq4c8g9G7bAX
因此最终的答案为:CZ9dmq4c8g9G7bAX
效果如图:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l8947943

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值