• Xman冬令营writeup


    做题一时爽,期末火葬场,一晚上水了三题,跪求期末不挂,老老实实去复习。祝各位表哥冬令营玩的开心。

    中二的成长之路


    很容易发现图片本身就是个压缩包,里面还有个图片,但是加密了

    所以需要我们求出压缩包的密码。
    观察图片,有个二维码,扫描得到密文3ukka4wZf2Q9H8PEI5YKFA==
    继续观察图片

    1. 有红色字样,写着aes,说明是AES加密
    2. 有黑色加粗字样,写的QR,猜测key值与QR有关,后来根据题目提示,key应该是QR的MD5值
      写脚本解密密文
    1. from Crypto.Cipher import AES
      import binascii
      import base64
      obj2 = AES.new('66c35cd8077f7e1db5faefbc048a646a', AES.MODE_CBC,'')
      print obj2.decrypt(base64.b64decode('3ukka4wZf2Q9H8PEI5YKFA=='))

    得到压缩包密码1Znmpr4jzChwxXqB,解密压缩包,得到另一个二维码

    扫描得到密文bqIGBfOGuOsxLYV16OI7xRNAZrcFdYLJtHaDym2O7so=,
    还是同样的套路,aes解密,其中aes的key是图片的名字s776051080zum92N,要注意的是这个密文包括了两段aes,分别解出XCTF{W0W_U_G0T_T和H3_FL4G},连在一起就是flag。

    返老还童

    大概看一下源码,发现密文格式是xxxx-xxxx-xxxx-xxxx,根据’-‘符号把密文分成了四组。
    先对密文做了检验,必须是大小写字母或数字。

    主程序是一大段等式判断,把其中两位参数a、b传到check_flag.html并调用了o0O0oo0o0o0o0oO函数检验是不是满足条件,其中a要大于b,a小于100。

      public static void b(String str) {
    String[] split = str.split("-");
    char[] toCharArray = split[0].toCharArray();
    char[] toCharArray2 = split[3].toCharArray();
    if (toCharArray[0] == toCharArray2[1] - 3 &&
    toCharArray[3] == ((char) (toCharArray2[2] | 1)) &&
    toCharArray2[2] % 2 != 1) {
    a = toCharArray2[3] ^ 55; 91 108 l
    if (toCharArray2[2] == toCharArray[2] + (toCharArray.length * 2) &&
    toCharArray2[0] == toCharArray[0] - (toCharArray.length / 2) &&
    toCharArray2[1] == ((char) (toCharArray[3] ^ 18)) &&
    toCharArray[1] * 2 == toCharArray[2] - 8 &&
    toCharArray2[3] == toCharArray[2]) {
    toCharArray = split[1].toCharArray();
    toCharArray2 = split[2].toCharArray();
    if ((split.length * 3) + toCharArray[1] == toCharArray[3] &&
    toCharArray2[1] * 2 == toCharArray[3] - 11) {
    b = (toCharArray[2] - toCharArray2.length) ^ 113;
    if (toCharArray[0] + toCharArray2[0] == 187 &&
    toCharArray[0] + toCharArray2[3] == 210 &&
    (toCharArray[3] ^ toCharArray[2]) == 47 &&
    (toCharArray[0] ^ toCharArray[1]) == 15 &&
    (toCharArray2[2] ^ toCharArray[1]) == 5 &&
    a > b &&
    a < 100) {
    MainActivity.b.getSettings().setUserAgentString(MainActivity.b.getSettings().getUserAgentString() + ";" + a + ";" + b);
    }
    }
    }
    //d2lu-bmVy-Y7hp-bgtl
    //100-50-108-117
    //98-109-86-121
    //89-55-104-112
    //98-103-116-108



    观察check_flag.html函数,

    主要需要满足的条件是

    a*a-b*b=8(a+b)
    a-b=8
    a*a+a*b+b*b>10000
    a*a+a*b-b*b>10000
    gcd(a,b)=7

    ,写脚本爆破,发现就一组满足条件

    根据a,b的值带入程序方程组很容易就能求出所有密文的值d2lu-bmVy-Y7hp-bgtl,即为flag。

    神秘的TXT

    发现有三个横坐标,三个纵坐标,因为是mobile题目,猜测对应着手机键盘密码。

    因为不知道坐标顺序,所以把8种可能的反转情况都列出来,一个一个试,其中有一个是对的

    XCTF{974856321}
    XCTF{932658741}
    XCTF{398652147}
    XCTF{178452369}
    XCTF{712458963}
    XCTF{314256987}
    XCTF{136254789}
    XCTF{796854123}

    好像是第四个,忘了。

    Only when you plant the flowers can you really smell their fragrance.
  • 相关阅读:
    使用Picture Control显示BMP图片
    [转]程序员技术练级攻略
    自绘控件笔记
    VS2010中CMFCToolBar的用法
    我用到的FireFox浏览器插件
    C# 中的 DataTimePicker 控件的时间转换
    MacBook 小白,安装 JDK
    C# Combobox 设置选中项
    Drupal7(2)
    Drupal7(1)
  • 原文地址:https://www.cnblogs.com/P201521440001/p/9865598.html
Copyright © 2020-2023  润新知