MCTF 第一期winwin

附上网址:这里写链接内容
((_BYTE )&v18 + v10) = ~((_BYTE *)&v18 + v10);
大眼一看这玩意不就是取反吗但是取反之后的值是这玩意
-179 -189 -172 -186 -133 -171 -139 -139 -144 -136 -136 -168 -161 -207 -27 -60 -29 -173 -188 -239 -31 -28 -29 -171 -19 -14 -162 -179 -78 -94。都是负数,不懂就百度吧

char a=2; 那么a=00000010 (char 单字节) 对a取反 ~a=11111101 因为char是无符号型。
那么对无符号数而言,11111101即是253 注意,取反是对整个数位取反,而不是对有效数位取反。

char是无符号型 用python求~会的到负数。
与0xff异或可以求反求得的结果是无符号型

怎么说呢,本以为所有题都是一个套路,结果还是被出题人给骗了
关键代码就这些:

    v18 = xmmword_4031F0;
      v19 = 0xCF9194A0;
      v10 = 0;
      v20 = 0x7D88;
      v21 = 0;
      v12 = xmmword_4031E0;
      v13 = 0x7744CF7B;
      v14 = 0x1EE3;
      v15 = 0;
      v11 = strlen((const char *)&v18);
      if ( v11 != 1 )
      {
        do
        {
          if ( (unsigned int)&v18 + v10 + 5 - (_DWORD)&v18 > v11 - 2 )
            break;
          *((_BYTE *)&v18 + v10) = ~*((_BYTE *)&v18 + v10);
          *((_BYTE *)&v18 + v10 + 5) ^= *((_BYTE *)&v12 + v10) ^ (unsigned __int8)(*((_BYTE *)&v18
                                                                                   + strlen((const char *)&v18)
                                                                                   - v10) >> 3);
          ++v10;
          v11 = strlen((const char *)&v18);
        }
        while ( v10 < v11 - 1 );
        v4 = a4;
      }
      if ( v4 == dword_40438C )
        sub_401160(asc_4031A8, asc_4031D4, &v18);
      return 0;
    }

首先想到的是查看一下v12和v18,然后跟着他的操作来一遍,结果欣欣苦苦编出来的代码输出是一对没用的字符。这就很无奈了o(╥﹏╥)o

其实这里存在了一个套路,出题人让你误以为输出的是这些,是不是很可怕,其实flag是其中的一部分只取代码的上半段的话:

v12=[0x1a,0x3b,0x1c,0xac,0xbb,0xee,0x1e,0x1b,0x1c,0xaa,0x12,0x0d,0xa1,0xb2,0x4d,0x5d,0xb2,0xbc,0xab,0xb9,0x84,0xaa,0x8a,0x8a,0x8f,0x87,0x87,0xa7,0xa0,0xce,0x7b,0xcf,0x44,0x77,0xe3,0x1e]
v18=[0xb2,0xbc,0xab,0xb9,0x84,0xaa,0x8a,0x8a,0x8f,0x87,0x87,0xa7,0xa0,0xce,0xa0,0x94,0x91,0xcf,0x7d,0x88]
for i in range(len(v18)):
    v18[i]= v18[i]^0xff
    print chr(v18[i]),

执行这段代码
M C T F { U u u p x x X _ 1 _ k n 0 � w
这玩意看起来勉强算是flag吧,细心的人能发现他就是upx i know
应该就是了加上最后一个}试一下果然通过了。^_^

总结:城市套路深,不能只有单纯的想法去破解。
不确定那个函数是不是输出flag之前一定要把每一步得出来的值好好看一下,很可能flag就在他们中间
无符号型数的取反

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值