Loading

攻防世界-难度1- happyctf

参考
https://www.52pojie.cn/thread-1792441-1-1.html

查壳

IDA静态分析

反编译main函数

int __cdecl main(int argc, const char **argv, const char **envp)
{

  v3 = std::operator<<<std::char_traits<char>>(&std::cout, "please input flag");
  std::ostream::operator<<(v3, std::endl<char,std::char_traits<char>>);
  std::operator>><char>(&std::cin, &str);
  if ( std::string::length(&str) == 24 )
  {
    p_str = &str;
    v14 = std::string::_Unchecked_begin(&str);
    v13 = std::string::_Unchecked_end(&str);
    while ( v14 != v13 )
    {
      item = *v14;
      lambda_1b3a4e77a09e1a7ed440bad3aa4c443b_::operator()(&add, item);
      ++v14;
    }
    qmemcpy(key, "rxusoCqxw{yqK`{KZqag{r`i", sizeof(key));
    lambda_7686c8adb828765130ce2b0d457195d9_::_lambda_7686c8adb828765130ce2b0d457195d9_(
      &cmp,
      (unsigned __int8 (*)[24])key);
    v9 = std::vector<unsigned char>::_Unchecked_begin(&v);
    v8 = std::vector<unsigned char>::_Unchecked_end(&v);
    while ( v9 != v8 )
    {
      if ( !lambda_7686c8adb828765130ce2b0d457195d9_::operator()(&cmp, *v9) )
      {
        v6 = std::operator<<<std::char_traits<char>>(&std::cout, "error");
        std::ostream::operator<<(v6, std::endl<char,std::char_traits<char>>);
        LOBYTE(v19) = 0;
        std::vector<unsigned char>::~vector<unsigned char>(&v);
        v19 = -1;
        std::string::~string(&str);
        return 0;
      }
      ++v9;
    }
    v7 = std::operator<<<std::char_traits<char>>(&std::cout, "good job");

关键步骤

  1. 对输入的24个字符进行异或
while ( v14 != v13 )
{
  item = *v14;
  lambda_1b3a4e77a09e1a7ed440bad3aa4c443b_::operator()(&add, item);
  ++v14;
}
  1. 逐位比较
while ( v9 != v8 )
{
  if ( !lambda_7686c8adb828765130ce2b0d457195d9_::operator()(&cmp, *v9) )
  {
    v6 = std::operator<<<std::char_traits<char>>(&std::cout, "error");
    std::ostream::operator<<(v6, std::endl<char,std::char_traits<char>>);
    LOBYTE(v19) = 0;
    std::vector<unsigned char>::~vector<unsigned char>(&v);
    v19 = -1;
    std::string::~string(&str);
    return 0;
  }
  ++v9;
}

题解

s = 'rxusoCqxw{yqK`{KZqag{r`i'
for i in range(len(s)):
    print(chr(ord(s[i]) ^ 0x14), end='')
posted @ 2024-04-29 23:19  _rainyday  阅读(19)  评论(0编辑  收藏  举报