花指令

题目简介

Run and capture the flag!

从简介可以看出来 可以动调获取flag 因为是跑起来获取flag

进去能看到有花指令 我们去除花指令 我自己写了一个一键去除花指令的IDA插件 要的可以联系我领取

  1. 去除花指令方法

image

image

image

  1. 动调

随便下一个断点 F8一步一步走 到这里会出现让你输入 我们随便输入一个 额 剧透一波 输入16位

image

长度验证

image

第一个字符验证

image

最后一个字符验证 采用了一种比较绕的方法

image

如图0xF 不就是15吗 正好16位 然后两个add了一下跟155比较

image

image

然后算一下 86 那不就是V吗 对不对

image

然后就是以此类推

  1. flag

flag直出

int __fastcall main(int argc, const char **argv, const char **envp)
{
  __int64 v3; // rdx
  char s[512]; // [rsp+0h] [rbp-200h] BYREF

  memset(s, 0, sizeof(s));
  std::operator<<<std::char_traits<char>>(&std::cout, "Please Enter the valid key!\n", 32);
  std::operator>><char,std::char_traits<char>>(&std::cin, s);
  if ( strlen(s) != 16 )
    goto LABEL_19;
  if ( s[0] != 69 )
    goto LABEL_19;
  v3 = 69;
  if ( s[15] != 86 )
    goto LABEL_19;
  if ( s[1] == 90
    && (v3 = 90, s[14] == 65)
    && s[2] == 57
    && (v3 = 57, s[13] == 98)
    && s[3] == 100
    && (v3 = 100, s[12] == 55)
    && s[4] == 109
    && (v3 = 109, s[11] == 71)
    && s[5] == 113
    && (v3 = 113, s[10] == 57)
    && s[6] == 52
    && (v3 = 52, s[9] == 103)
    && s[7] == 99
    && (v3 = 99, s[8] == 56) )
  {
    std::operator<<<std::char_traits<char>>(&std::cout, "Serial number is valid :)\n", 99);
    return 0;
  }
  else
  {
LABEL_19:
    std::operator<<<std::char_traits<char>>(&std::cout, "Serial number is not valid!\n", v3);
    return 0;
  }
}

flag

EZ9dmq4c8g9G7bAV