• BUUCTF RE CrackRTF


    BUUCTF RE CrackRTF

    int __cdecl main_0(int argc, const char **argv, const char **envp)
    {
      DWORD v3; // eax
      DWORD v4; // eax
      char Str[260]; // [esp+4Ch] [ebp-310h] BYREF
      int v7; // [esp+150h] [ebp-20Ch]
      char String1[260]; // [esp+154h] [ebp-208h] BYREF
      char Destination[260]; // [esp+258h] [ebp-104h] BYREF
    
      memset(Destination, 0, sizeof(Destination));
      memset(String1, 0, sizeof(String1));
      v7 = 0;
      printf("pls input the first passwd(1): ");
      scanf("%s", Destination);
      if ( strlen(Destination) != 6 )    ///输入长度为6
      {
        printf("Must be 6 characters!\n");
        ExitProcess(0);
      }
      v7 = atoi(Destination);
      if ( v7 < 100000 )
        ExitProcess(0);
      strcat(Destination, "@DBApp"); ///进行链接  
      v3 = strlen(Destination);     ///v3=12   
      sub_40100A((BYTE *)Destination, v3, String1);
      if ( !_strcmpi(String1, "6E32D0943418C2C33385BC35A1470250DD8923A9") )
      {
        printf("continue...\n\n");
        printf("pls input the first passwd(2): ");
        memset(Str, 0, sizeof(Str));
        scanf("%s", Str);
        if ( strlen(Str) != 6 )
        {
          printf("Must be 6 characters!\n");
          ExitProcess(0);
        }
        strcat(Str, Destination);
        memset(String1, 0, sizeof(String1));
        v4 = strlen(Str);
        sub_401019((BYTE *)Str, v4, String1);
        if ( !_strcmpi("27019e688a4e62a649fd99cadaafdb4e", String1) )
        {
          if ( !(unsigned __int8)sub_40100F(Str) )
          {
            printf("Error!!\n");
            ExitProcess(0);
          }
          printf("bye ~~\n");
        }
      }
      return 0;
    }
    
    

    可以看到sub_40100A((BYTE *)Destination, v3, String1); if ( !_strcmpi(String1, "6E32D0943418C2C33385BC35A1470250DD8923A9") )
    一个是处理string 函数 然后将String1与字符串进行比较
    进入sub_40100A函数查看

    int __cdecl sub_401230(BYTE *pbData, DWORD dwDataLen, LPSTR lpString1)
    {
      int result; // eax
      DWORD i; // [esp+4Ch] [ebp-28h]
      CHAR String2[4]; // [esp+50h] [ebp-24h] BYREF
      BYTE v6[20]; // [esp+54h] [ebp-20h] BYREF
      DWORD pdwDataLen; // [esp+68h] [ebp-Ch] BYREF
      HCRYPTHASH phHash; // [esp+6Ch] [ebp-8h] BYREF
      HCRYPTPROV phProv; // [esp+70h] [ebp-4h] BYREF
    
      if ( !CryptAcquireContextA(&phProv, 0, 0, 1u, 0xF0000000) )// 创建密钥   Hash加密函数
                                                    // 
                                                    // 
                                                    // 
        return 0;
      if ( CryptCreateHash(phProv, 0x8004u, 0, 0, &phHash) )// 创建Hash
      {
        if ( CryptHashData(phHash, pbData, dwDataLen, 0) )
        {
          CryptGetHashParam(phHash, 2u, v6, &pdwDataLen, 0);
          *lpString1 = 0;
          for ( i = 0; i < pdwDataLen; ++i )
          {
            wsprintfA(String2, "%02X", v6[i]);
            lstrcatA(lpString1, String2);
          }
          CryptDestroyHash(phHash);
          CryptReleaseContext(phProv, 0);
          result = 1;
        }
        else
        {
          CryptDestroyHash(phHash);
          CryptReleaseContext(phProv, 0);
          result = 0;
        }
      }
      else
      {
        CryptReleaseContext(phProv, 0);
        result = 0;
      }
      return result;
    }
    

    ALG_ID该值标识要使用的哈希算法我们去查一下ALG_ID大全

    发现是SHA1加密
    可以利用网上已有的加密解密进行 同样第二个检测是md5加密

    最后输入完输出一个rtf文件
    Flag{N0_M0re_Free_Bugs}

  • 相关阅读:
    信号学习第一课--基础知识
    进程学习第一课--基本操作
    执行sql语句后的数据处理api
    如何持续改善你的开车技术?
    刹车失灵不用怕 常见故障分析及应对方法
    原地打方向原来很伤车?看完还敢吗?
    这儿有四个开车小细节,新手司机一定要牢记
    毁车隐患多 真正的老司机绝不会这样停车
    80%的事故发生在这些路段!想保命快点我
    流言终结者!自动挡用车误区,你可能每天都在犯错
  • 原文地址:https://www.cnblogs.com/socialbiao/p/15664587.html
Copyright © 2020-2023  润新知