美文网首页CTF-PWN
RoarCTF 2019 黄金六年、polyre

RoarCTF 2019 黄金六年、polyre

作者: Nevv | 来源:发表于2019-10-16 15:38 被阅读0次

    黄金6年

    解压出一个mp4,然后用ffmpeg获取每一帧图片,找到三个二维码,分别为i、want、play。

    mkdir imps && ffmpeg -i ./xx.mp4 -q:v 2 -f image2 ./imps/%07d.jpeg

    strings可以看到mp4文件最后有3个base64字符串,拼接在一起解码后得到一个rar文件,解压密码为iwantplayctf

    flag:roarctf{CTF-from-RuMen-to-RuYuan}

    Polere

    使用工具去除扁平化控制流混淆

    • 使用异或的操作就是为了区分是否进位(因为每次都是乘以2,但是异或后会改变最后一位是奇数),可以简单测试下
    #include <stdlib.h>
    #include <stdio.h>
    
    
    int main(int argc , char* argv[])
    {   
        long long test= 0x6161616161616161;
        int i;
        for(i=0;i<64;i++){
         if(test >=0){
          printf(">0 0x%lx\n", test);
          test=test<<1;
         } else{
          printf("<0 0x%lx\n", test);
          test=test<<1;
          printf("<0_1 0x%lx\n", test);
          test=test^0xb0004b7679fa26b3;
          printf("<0_2 0x%lx\n", test);
         }
         printf("0x%lx\n", test);
        }
       printf("%p 0x%lx\n", &test, test);
    }
    // 0xa0caec43d66f53ef
    
    • 简单使用 "aaaaaaaa" 逆出来的结果实验下:
    test = 0xbc8ff26d43536296
    
    for i in range(64):
     # if (test >> 63) ==  0: # zhengshu
     if test % 2 == 0:
      print "dayu0   " + hex(test)
      test /= 2;
     else:
      print "xiaoyu0  " + hex(test)
      test = (1 << 64) + test
      test ^= 0xB0004B7679FA26B3
      test /= 2;
    
    print struct.pack("q",test)
    

    相关文章

      网友评论

        本文标题:RoarCTF 2019 黄金六年、polyre

        本文链接:https://www.haomeiwen.com/subject/hwlumctx.html