zoukankan      html  css  js  c++  java
  • 2021绿盟杯

    太菜了,摆烂了,寄

    RE

    REEEE

    ida 64 分析发现有REEE_encode函数和一个有明显特征的base64比较BOxJB3tMeXV2dkM1BLR5A2Z3ekI2fXWLBUR0fUI2ekaMA2AzA30=

    跟进REEE_encode,发现有一个base64变表,用如下脚本解密

    # coding=utf-8
    import base64
    import binascii
    
    
    change = "RSTUVWXYZabcdefghijklmnoABCDEFGHIJKLMNOPQpqrstuvwxyz0123456789+/"  # 非正常base64表
    normal = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"  # 正常base64表
    key = "BOxJB3tMeXV2dkM1BLR5A2Z3ekI2fXWLBUR0fUI2ekaMA2AzA30="
    ture_key= key.translate(str.maketrans(change, normal))
    print('The real base64code: ' + ture_key)
    decode = base64.b64decode(ture_key)  # 解码为ascii,超过则输出转义字符
    hex_str = binascii.hexlify(decode)  # 强转为bin后编码为hex的字串,再解码为ascii,超过则输出转义字符
    ascii_string = str(hex_str, 'utf-8')  # 去掉b''
    print(decode)
    
    

    解得:flag{d4a6195f09cb75868acd0488652dcf3c}

    Hard re

    IDA反编译调试,发现flag长度为32,且exe自身会释放dll,并且使用 C:WindowsSysWOW64 undll32.exe FakerDll.dll,Check xx(xx为输入的内容) 来调用dll的Check函数。

    反编译dll,定位到Check函数。跟进check_0,分析得要输出Success !!!,需要flag == 1a4 == 9meD3Kcb0FHDbx6jX9FzpxpZUb12345

    分析flag可知,存在另一个函数,若ipMen == c2JWblhyX0dgQnk8RHBdNWdJVW1HazZ0NHg=则可使得flag = 1。

    查询交叉引用,来到主要检查函数sub_1002E0B0中,根据上下文信息 修改类型和推测函数功能 可得

    signal1 = maybe_strcpy(signal2, v19, 27, &input[v5 - 26], 26);
    signal3 = maybe_strcpy(signal1, str0, 14, &v19[0], 13);
    signal2 = maybe_strcpy(signal3, str1, 14, &v19[13], 13);
    for ( i = 0; i < strlen(str0); ++i )
    	{
          if ( (str0[i] ^ 5) <= 'z' && (str0[i] ^ 5) >= '0' )
            str0[i] ^= 5u;
        }
        for ( j = 0; j < strlen(str1); ++j )
        {
          if ( (str1[j] ^ 0xF) <= 'z' && (str1[j] ^ 0xF) >= '0' )
            str1[j] ^= 0xFu;
        }
    

    猜测:signal变量为检查上条指令是否成功执行的依据,成功返回1;maybe_strcpy函数功能为(bool 检查,目标字符串起始地址,目标字符串复制长度,原目标字符串起始地址,原目标字符串复制长度)

    由于是异或,函数可逆,则可以写脚本(嫖一下古月浪子师傅的脚本)

    import base64
    
    lpMen = base64.b64decode('c2JWblhyX0dgQnk8RHBdNWdJVW1HazZ0NHg=')
    flag = ''
    for i in lpMen[13:]:
        if ord('z') >= i ^ 5 >= ord('0'):
            flag += chr(i ^ 5)
        else:
            flag += chr(i)
    for i in lpMen[:13]:
        if ord('z') >= i ^ 0xf >= ord('0'):
            flag += chr(i ^ 0xf)
        else:
            flag += chr(i)
    print(flag)
    

    Crypto

    签到

    凯撒密码 位移为3

    得:flag{2a2ab40b9b031723cca883b61c15fee0}

    easyras

    给出了e,c,n,dp,套用脚本

    import gmpy2 as gp
    
    e = 0x10001
    n = gp.mpz(101031799769686356875689677901727632087789394241694537610688487381734497153370779419148195361726900364384918762158954452844358699628272550435920733825528414623691447245900175499950458168333742756118038555364836309568598646312353874247656710732472018288962454506789615632015856961278964493826919853082813244227)
    dp = gp.mpz(1089885100013347250801674176717862346181995027932544377293216564837464201546385463279055643089303360817423261428901834798955985043080308895369226243973673)
    c = gp.mpz(59381302046219861703693321495442496884448849866535616496729805734326661742228038342690865965545318011599241185017546760846698815333545820228348501022889423901773651749628741238050559441761853071976079031678640014602919526148731936437472217369575554448232401310265267205034644121488774398730319347479771423197)
    
    for x in range(1, e):
        if(e*dp%x==1):
            p=(e*dp-1)//x+1
            if(n%p!=0):
                continue
            q=n//p
            phin=(p-1)*(q-1)
            d=gp.invert(e, phin)
            m=gp.powmod(c, d, n)
            if(len(hex(m)[2:])%2==1):
                continue
            print('--------------')
            print(m)
            print(hex(m)[2:])
            print(bytes.fromhex(hex(m)[2:]))
    

    得:flag{38c60aa8ddcfb50afa3021f40f0acdac}

    MISC

    签到

    base64

    huahua

    修复zip压缩包,修复png图片,改高度为800。得:flag{b3afc91a8fbb6cc798bdebb253b02550}

    NOSIE

    docx和jpg都是假flag,用foremost分离out,得到wav文件,拖入au中观察频谱图,得到:
    flag{98ce526ad52c409763405847185d9c6c}

    DdDdDd

    流量分析,一开始一头雾水,之后重读了一遍题目,发现打印可,能是代指3d打印,刚好DASCTF 2020 6月团队赛复现过gcode,尝试搜索gcode发现有wolt.gcode文件,保存为gcode文件,在https://gcode.ws/ 网站上上传此文件,点3d图,即可得到:flag{2fc07441-fd8f-4e1c-9f0f-72aa8c984a}

    隐藏的数据

    解压改后缀,得到加密文件,用docx得到的密码不对,上爆破工具ARCHPR.exe,得密码为0546,又得到一个加密压缩包,用之前在docx得到的密码解密的新的docx文件,打开发现隐写的flag没有出现,直接右键打开压缩包找到word下的document.xml文件,搜索flag即可得到flag{4de41c0b106051b30cb3c654901b1b06}

  • 相关阅读:
    CSU 1333 Funny Car Racing
    FZU 2195 检查站点
    FZU 2193 So Hard
    ZOJ 1655 FZU 1125 Transport Goods
    zoj 2750 Idiomatic Phrases Game
    hdu 1874 畅通工程续
    hdu 2489 Minimal Ratio Tree
    hdu 3398 String
    洛谷 P2158 [SDOI2008]仪仗队 解题报告
    POJ 1958 Strange Towers of Hanoi 解题报告
  • 原文地址:https://www.cnblogs.com/b1ank/p/15449259.html
Copyright © 2011-2022 走看看