Buuctf-Mysterious另类逆向题解

下载发现是一个exe可执行文件

双击运行,输入密码123456 没有任何反应,当然没反应,密码肯定不对

请出IDA pro,我这里用IDA Pro v8.3演示,把exe文件拖拽到IDA打开

按shift +F12快捷键搜索字符串

我们发现第二行有可疑字符串,有flag嫌疑,双击上面的well done

well done里“Buff3r_0v3rf|0w”这个可以字符串又出现了,并都指向一个“DialogFunc_”函数

在左侧函数窗口双击这个函数,按快捷键F5编译

int __stdcall DialogFunc_0(HWND hWnd, int a2, int a3, int a4)
{
  int v4; // eax
  char Source[260]; // [esp+50h] [ebp-310h] BYREF
  _BYTE Text[257]; // [esp+154h] [ebp-20Ch] BYREF
  __int16 v8; // [esp+255h] [ebp-10Bh]
  char v9; // [esp+257h] [ebp-109h]
  int Value; // [esp+258h] [ebp-108h]
  CHAR String[260]; // [esp+25Ch] [ebp-104h] BYREF

  memset(String, 0, sizeof(String));
  Value = 0;
  if ( a2 == 16 )
  {
    DestroyWindow(hWnd);
    PostQuitMessage(0);
  }
  else if ( a2 == 273 )
  {
    if ( a3 == 1000 )
    {
      GetDlgItemTextA(hWnd, 1002, String, 260);
      strlen(String);
      if ( strlen(String) > 6 )  
        ExitProcess(0);
      v4 = atoi(String);
      Value = v4 + 1;
      if ( v4 == 122 && String[3] == 120 && String[5] == 122 && String[4] == 121 )
      {
        strcpy(Text, "flag");
        memset(&Text[5], 0, 0xFCu);
        v8 = 0;
        v9 = 0;
        _itoa(Value, Source, 10);
        strcat(Text, "{");
        strcat(Text, Source);
        strcat(Text, "_");
        strcat(Text, "Buff3r_0v3rf|0w");
        strcat(Text, "}");
        MessageBoxA(0, Text, "well done", 0);
      }
      SetTimer(hWnd, 1u, 0x3E8u, TimerFunc);
    }
    if ( a3 == 1001 )
      KillTimer(hWnd, 1u);
  }
  return 0;
}

  if ( strlen(String) > 6 )
        ExitProcess(0);           #如果密码长度大于6位,程序退出
      v4 = atoi(String);           #把V4传递给函数atoi(String)
      Value = v4 + 1;             
      if ( v4 == 122 && String[3] == 120 && String[5] == 122 && String[4] == 121 )
      {
        strcpy(Text, "flag");    #满足上面条件密码是正确输出flag

v4:122(10进制)

String[3] =120     (10进制) 对应ASCII表为x

String[5] =122 (10进制)对应ASCII表为y

String[4] = 121(10进制)对应ASCII表为z

ASCII菜鸟教程

所以密码是122xyz,运行程序输入得到flag

flag{123_Buff3r_0v3rf|0w}

  • 23
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值