[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}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值