zoukankan      html  css  js  c++  java
  • re | [羊城杯 2020]login

    pyinstaller编译的exe文件
    直接上pyinstxtractor,提出index文件加上文件头:

    420D0D0A000000000DA91B60A8090000

    就可以进行反编译
    上pyuncompyle6,提出以下源代码:

    # uncompyle6 version 3.7.1
    # Python bytecode 3.7 (3394)
    # Decompiled from: Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)]
    # Embedded file name: login.py
    # Compiled at: 2021-02-04 15:58:05
    # Size of source mod 2**32: 2472 bytes
    import sys
    input1 = input('input something:')
    if len(input1) != 14:
        print('Wrong length!')
        sys.exit()
    else:
        code = []
        for i in range(13):
            code.append(ord(input1[i]) ^ ord(input1[(i + 1)]))
    
        code.append(ord(input1[13]))
        a1 = code[2]
        a2 = code[1]
        a3 = code[0]
        a4 = code[3]
        a5 = code[4]
        a6 = code[5]
        a7 = code[6]
        a8 = code[7]
        a9 = code[9]
        a10 = code[8]
        a11 = code[10]
        a12 = code[11]
        a13 = code[12]
        a14 = code[13]
        if (a1 * 88 + a2 * 67 + a3 * 65 - a4 * 5 + a5 * 43 + a6 * 89 + a7 * 25 + a8 * 13 - a9 * 36 + a10 * 15 + a11 * 11 + a12 * 47 - a13 * 60 + a14 * 29 == 22748) & (a1 * 89 + a2 * 7 + a3 * 12 - a4 * 25 + a5 * 41 + a6 * 23 + a7 * 20 - a8 * 66 + a9 * 31 + a10 * 8 + a11 * 2 - a12 * 41 - a13 * 39 + a14 * 17 == 7258) & (a1 * 28 + a2 * 35 + a3 * 16 - a4 * 65 + a5 * 53 + a6 * 39 + a7 * 27 + a8 * 15 - a9 * 33 + a10 * 13 + a11 * 101 + a12 * 90 - a13 * 34 + a14 * 23 == 26190) & (a1 * 23 + a2 * 34 + a3 * 35 - a4 * 59 + a5 * 49 + a6 * 81 + a7 * 25 + (a8 << 7) - a9 * 32 + a10 * 75 + a11 * 81 + a12 * 47 - a13 * 60 + a14 * 29 == 37136) & (a1 * 38 + a2 * 97 + a3 * 35 - a4 * 52 + a5 * 42 + a6 * 79 + a7 * 90 + a8 * 23 - a9 * 36 + a10 * 57 + a11 * 81 + a12 * 42 - a13 * 62 - a14 * 11 == 27915) & (a1 * 22 + a2 * 27 + a3 * 35 - a4 * 45 + a5 * 47 + a6 * 49 + a7 * 29 + a8 * 18 - a9 * 26 + a10 * 35 + a11 * 41 + a12 * 40 - a13 * 61 + a14 * 28 == 17298) & (a1 * 12 + a2 * 45 + a3 * 35 - a4 * 9 - a5 * 42 + a6 * 86 + a7 * 23 + a8 * 85 - a9 * 47 + a10 * 34 + a11 * 76 + a12 * 43 - a13 * 44 + a14 * 65 == 19875) & (a1 * 79 + a2 * 62 + a3 * 35 - a4 * 85 + a5 * 33 + a6 * 79 + a7 * 86 + a8 * 14 - a9 * 30 + a10 * 25 + a11 * 11 + a12 * 57 - a13 * 50 - a14 * 9 == 22784) & (a1 * 8 + a2 * 6 + a3 * 64 - a4 * 85 + a5 * 73 + a6 * 29 + a7 * 2 + a8 * 23 - a9 * 36 + a10 * 5 + a11 * 2 + a12 * 47 - a13 * 64 + a14 * 27 == 9710) & (a1 * 67 - a2 * 68 + a3 * 68 - a4 * 51 - a5 * 43 + a6 * 81 + a7 * 22 - a8 * 12 - a9 * 38 + a10 * 75 + a11 * 41 + a12 * 27 - a13 * 52 + a14 * 31 == 13376) & (a1 * 85 + a2 * 63 + a3 * 5 - a4 * 51 + a5 * 44 + a6 * 36 + a7 * 28 + a8 * 15 - a9 * 6 + a10 * 45 + a11 * 31 + a12 * 7 - a13 * 67 + a14 * 78 == 24065) & (a1 * 47 + a2 * 64 + a3 * 66 - a4 * 5 + a5 * 43 + a6 * 112 + a7 * 25 + a8 * 13 - a9 * 35 + a10 * 95 + a11 * 21 + a12 * 43 - a13 * 61 + a14 * 20 == 27687) & (a1 * 89 + a2 * 67 + a3 * 85 - a4 * 25 + a5 * 49 + a6 * 89 + a7 * 23 + a8 * 56 - a9 * 92 + a10 * 14 + a11 * 89 + a12 * 47 - a13 * 61 - a14 * 29 == 29250) & (a1 * 95 + a2 * 34 + a3 * 62 - a4 * 9 - a5 * 43 + a6 * 83 + a7 * 25 + a8 * 12 - a9 * 36 + a10 * 16 + a11 * 51 + a12 * 47 - a13 * 60 - a14 * 24 == 15317):
            print('flag is GWHT{md5(your_input)}')
            print('Congratulations and have fun!')
        else:
            print('Sorry,plz try again...')
    

    垃圾玩意儿,又是解方程组,z3写一下方便一点,左移7改成乘128。

    from z3 import *
    Sol = Solver()
    # 初始化变量
    a0=Int("b0")
    a1=Int("a1")
    a2=Int("a2")
    a3=Int("a3")
    a4=Int("a4")
    a5=Int("a5")
    a6=Int("a6")
    a7=Int("a7")
    a8=Int("a8")
    a9=Int("a9")
    a10=Int("a10")
    a11=Int("a11")
    a12=Int("a12")
    a13=Int("a13")
    a14=Int("a14")
    # 添加限制
    Sol.add(a1 * 88 + a2 * 67 + a3 * 65 - a4 * 5 + a5 * 43 + a6 * 89 + a7 * 25 + a8 * 13 - a9 * 36 + a10 * 15 + a11 * 11 + a12 * 47 - a13 * 60 + a14 * 29 == 22748)
    Sol.add(a1 * 89 + a2 * 7 + a3 * 12 - a4 * 25 + a5 * 41 + a6 * 23 + a7 * 20 - a8 * 66 + a9 * 31 + a10 * 8 + a11 * 2 - a12 * 41 - a13 * 39 + a14 * 17 == 7258)
    Sol.add(a1 * 28 + a2 * 35 + a3 * 16 - a4 * 65 + a5 * 53 + a6 * 39 + a7 * 27 + a8 * 15 - a9 * 33 + a10 * 13 + a11 * 101 + a12 * 90 - a13 * 34 + a14 * 23 == 26190)
    Sol.add(a1 * 23 + a2 * 34 + a3 * 35 - a4 * 59 + a5 * 49 + a6 * 81 + a7 * 25 + a8 * 128 - a9 * 32 + a10 * 75 + a11 * 81 + a12 * 47 - a13 * 60 + a14 * 29 == 37136)
    Sol.add(a1 * 38 + a2 * 97 + a3 * 35 - a4 * 52 + a5 * 42 + a6 * 79 + a7 * 90 + a8 * 23 - a9 * 36 + a10 * 57 + a11 * 81 + a12 * 42 - a13 * 62 - a14 * 11 == 27915)
    Sol.add(a1 * 22 + a2 * 27 + a3 * 35 - a4 * 45 + a5 * 47 + a6 * 49 + a7 * 29 + a8 * 18 - a9 * 26 + a10 * 35 + a11 * 41 + a12 * 40 - a13 * 61 + a14 * 28 == 17298)
    Sol.add(a1 * 12 + a2 * 45 + a3 * 35 - a4 * 9 - a5 * 42 + a6 * 86 + a7 * 23 + a8 * 85 - a9 * 47 + a10 * 34 + a11 * 76 + a12 * 43 - a13 * 44 + a14 * 65 == 19875)
    Sol.add(a1 * 79 + a2 * 62 + a3 * 35 - a4 * 85 + a5 * 33 + a6 * 79 + a7 * 86 + a8 * 14 - a9 * 30 + a10 * 25 + a11 * 11 + a12 * 57 - a13 * 50 - a14 * 9 == 22784)
    Sol.add(a1 * 8 + a2 * 6 + a3 * 64 - a4 * 85 + a5 * 73 + a6 * 29 + a7 * 2 + a8 * 23 - a9 * 36 + a10 * 5 + a11 * 2 + a12 * 47 - a13 * 64 + a14 * 27 == 9710)
    Sol.add(a1 * 67 - a2 * 68 + a3 * 68 - a4 * 51 - a5 * 43 + a6 * 81 + a7 * 22 - a8 * 12 - a9 * 38 + a10 * 75 + a11 * 41 + a12 * 27 - a13 * 52 + a14 * 31 == 13376)
    Sol.add(a1 * 85 + a2 * 63 + a3 * 5 - a4 * 51 + a5 * 44 + a6 * 36 + a7 * 28 + a8 * 15 - a9 * 6 + a10 * 45 + a11 * 31 + a12 * 7 - a13 * 67 + a14 * 78 == 24065)
    Sol.add(a1 * 47 + a2 * 64 + a3 * 66 - a4 * 5 + a5 * 43 + a6 * 112 + a7 * 25 + a8 * 13 - a9 * 35 + a10 * 95 + a11 * 21 + a12 * 43 - a13 * 61 + a14 * 20 == 27687)
    Sol.add(a1 * 89 + a2 * 67 + a3 * 85 - a4 * 25 + a5 * 49 + a6 * 89 + a7 * 23 + a8 * 56 - a9 * 92 + a10 * 14 + a11 * 89 + a12 * 47 - a13 * 61 - a14 * 29 == 29250)
    Sol.add(a1 * 95 + a2 * 34 + a3 * 62 - a4 * 9 - a5 * 43 + a6 * 83 + a7 * 25 + a8 * 12 - a9 * 36 + a10 * 16 + a11 * 51 + a12 * 47 - a13 * 60 - a14 * 24 == 15317)
    
    
    
    # 求解
    
    print(Sol.check())
    print(Sol.model())
    
    m = Sol.model()
    
    print("answer:")
    [print(chr(int(str(m[i]))),end='') for i in v]
    #ans=''.join([(chr(int(str(m[i])))) for i in v])
    print(ans)
    

    结果如下:

    [a2 = 24,
     a13 = 88,
     a14 = 33,
     a6 = 43,
     a9 = 52,
     a5 = 104,
     a12 = 74,
     a7 = 28,
     a1 = 119,
     a10 = 108,
     a11 = 88,
     a8 = 91,
     a4 = 7,
     a3 = 10]
    

    也就是[119, 24, 10, 7, 104, 43, 28, 91, 52, 108, 88, 74, 88, 33]
    然后反推一个异或:注意这里源代码中code和a不是一一对应的......****(zhanghua)

    aim = [119, 24, 10, 7, 104, 43, 28, 91, 52, 108, 88, 74, 88, 33]
    aim = [10, 24, 119, 7, 104, 43, 28, 91, 108, 52, 88, 74, 88, 33]
    print(len(aim))
    flag = [0 for i in range(14)]
    flag[13] = aim[13]
    
    for i in range(12, -1, -1):
    	flag[i] = aim[i] ^ flag[i+1]
    	
    print(flag)
    for i in flag:
    	print(chr(i),end='')
    # U_G07_th3_k3y!
    

    md5一下就可以了
    over.

  • 相关阅读:
    html页面格式化输出js对象
    JavaScript之构造函数
    关于配置nginx服务器相关事宜
    react-native实践(基于antd-mobile)
    python字典和条件控制
    python运算符与数据类型
    python简介和python工具的选择
    day48-python爬虫学习三
    day47-python爬虫学习二
    day46-python爬虫学习
  • 原文地址:https://www.cnblogs.com/Mz1-rc/p/14375235.html
Copyright © 2011-2022 走看看