[BUUCTF]REVERSE——刮开有奖

刮开有奖

附件

步骤:

  1. 例行检查,无壳,32位程序
    在这里插入图片描述
  2. 32位ida载入,shift+f12检索程序里的字符串,看到了一个base64加密的特征字符串,猜想这题用到了base64加密
    在这里插入图片描述
  3. 从main函数开始看程序
    在这里插入图片描述
    DialogBoxParam函数百度后得知是根据对话框模板资源创建一个模态的对话框,直接看函数主体
  if ( a2 == 272 )
    return 1;
  if ( a2 != 273 )
    return 0;
  if ( (_WORD)a3 == 1001 )                      // a3=1001
  {
    memset(&String, 0, 0xFFFFu);                // memset函数将string初始化置0
    GetDlgItemTextA(hDlg, 1000, &String, 0xFFFF);
    if ( strlen(&String) == 8 )                 // string的长度为8
    {
      v7 = 90;
      v8 = 74;
      v9 = 83;
      v10 = 69;
      v11 = 67;
      v12 = 97;
      v13 = 78;
      v14 = 72;
      v15 = 51;
      v16 = 110;
      v17 = 103;
      sub_4010F0((int)&v7, 0, 10);              // sub_4010F0是一个排序 升序的算法 ,
                                                // 对v7数组进行处理后,v7的数据是
                                                // 51  67  69  72  74  78  83  90  97  103  110
                                                // 
      memset(&v26, 0, 0xFFFFu);
      v26 = string[5];
      v28 = string[7];
      v27 = string[6];
      v4 = sub_401000((int)&v26, strlen(&v26)); // sub_401000是base64加密算法,对v26进行了base64加密后复制给v4
      memset(&v26, 0, 0xFFFFu);                 // v26清0
      v27 = string[3];
      v26 = string[2];
      v28 = string[4];
      v5 = sub_401000((int)&v26, strlen(&v26));
      if ( String == v7 + 34                    // string[0]='U'
        && string[1] == v11                     // string[1]='J'
        && 4 * string[2] - 141 == 3 * v9        // string[2]='W'
        && string[3] / 4 == 2 * (v14 / 9)       // string[3]='P'
        && !strcmp(v4, "ak1w")                  // V4=ak1w
        && !strcmp(
              v5,
              "V1Ax") )
      {                                         // v5=V1Ax
        MessageBoxA(hDlg, "U g3t 1T!", "@_@", 0);
      }
    }
    return 0;
  }
  if ( (_WORD)a3 != 1 && (_WORD)a3 != 2 )
    return 0;
  EndDialog(hDlg, (unsigned __int16)a3);
  return 1;
}

代码的大部分分析都写在注释里了,剩下的就是两个base64解密,用python3自带的base64库解密一下
在这里插入图片描述
根据这段代码,将string字符串理一下得到flag
在这里插入图片描述
flag{UJWP1jMp}

原文地址:https://www.cnblogs.com/xlrp/p/14273683.html