广度优先搜索

尝试一个条件中所有可能的方法 运行量大

还有简单的可以控制外层循环

check = [0x2, 0x18, 0xf, 0xf8, 0x19, 0x4, 0x27, 0xd8, 0xeb, 0x0, 0x35, 0x48, 0x4d, 0x2a, 0x45, 0x6b, 0x59, 0x2e, 0x43, 0x1, 0x18, 0x5c, 0x9, 0x9, 0x9, 0x9, 0xb5, 0x7d]

# 我们用一个 solutions 列表存储当前所有可能的合法字符串前缀
# 初始状态只有最后一位字符 f27
solutions = [[check[27]]]

# 从第 26 位一直推到第 0 位(这本质上就是 BFS)
for step in range(26, -1, -1):
    new_solutions = []
    for partial_flag in solutions:
        # partial_flag[0] 永远是上一次循环确定的那个字符
        last_char = partial_flag[0]
        
        for i in range(32, 128):
            # 你的加密公式逻辑
            if (i ^ 0x19) ^ (i % 0x11 + last_char) == check[step]:
                # 如果匹配,把新字符插在列表最前面,形成新的可能路径
                new_solutions.append([i] + partial_flag)
    
    solutions = new_solutions

# 打印最终结果
for sol in solutions:
    print("".join(map(chr, sol)))

哈哈哈哈哈哈哈 极致的循环 这个怎么说呢 就很简单但又很难 所有的算法逆向都可以这样来爆破

check = [0x2, 0x18, 0xf, 0xf8, 0x19, 0x4, 0x27, 0xd8, 0xeb, 0x0, 0x35, 0x48, 0x4d, 0x2a, 0x45, 0x6b, 0x59, 0x2e, 0x43, 0x1, 0x18, 0x5c, 0x9, 0x9, 0x9, 0x9, 0xb5]

f27 = 0x7d
for f26 in range(32, 128):
    if (f26 ^ 0x19) ^ (f26 % 0x11 + f27) == check[26]:
        for f25 in range(32, 128):
            if (f25 ^ 0x19) ^ (f25 % 0x11 + f26) == check[25]:
                for f24 in range(32, 128):
                    if (f24 ^ 0x19) ^ (f24 % 0x11 + f25) == check[24]:
                        for f23 in range(32, 128):
                            if (f23 ^ 0x19) ^ (f23 % 0x11 + f24) == check[23]:
                                for f22 in range(32, 128):
                                    if (f22 ^ 0x19) ^ (f22 % 0x11 + f23) == check[22]:
                                        for f21 in range(32, 128):
                                            if (f21 ^ 0x19) ^ (f21 % 0x11 + f22) == check[21]:
                                                for f20 in range(32, 128):
                                                    if (f20 ^ 0x19) ^ (f20 % 0x11 + f21) == check[20]:
                                                        for f19 in range(32, 128):
                                                            if (f19 ^ 0x19) ^ (f19 % 0x11 + f20) == check[19]:
                                                                for f18 in range(32, 128):
                                                                    if (f18 ^ 0x19) ^ (f18 % 0x11 + f19) == check[18]:
                                                                        for f17 in range(32, 128):
                                                                            if (f17 ^ 0x19) ^ (f17 % 0x11 + f18) == check[17]:
                                                                                for f16 in range(32, 128):
                                                                                    if (f16 ^ 0x19) ^ (f16 % 0x11 + f17) == check[16]:
                                                                                        for f15 in range(32, 128):
                                                                                            if (f15 ^ 0x19) ^ (f15 % 0x11 + f16) == check[15]:
                                                                                                for f14 in range(32, 128):
                                                                                                    if (f14 ^ 0x19) ^ (f14 % 0x11 + f15) == check[14]:
                                                                                                        for f13 in range(32, 128):
                                                                                                            if (f13 ^ 0x19) ^ (f13 % 0x11 + f14) == check[13]:
                                                                                                                for f12 in range(32, 128):
                                                                                                                    if (f12 ^ 0x19) ^ (f12 % 0x11 + f13) == check[12]:
                                                                                                                        for f11 in range(32, 128):
                                                                                                                            if (f11 ^ 0x19) ^ (f11 % 0x11 + f12) == check[11]:
                                                                                                                                for f10 in range(32, 128):
                                                                                                                                    if (f10 ^ 0x19) ^ (f10 % 0x11 + f11) == check[10]:
                                                                                                                                        for f9 in range(32, 128):
                                                                                                                                            if (f9 ^ 0x19) ^ (f9 % 0x11 + f10) == check[9]:
                                                                                                                                                for f8 in range(32, 128):
                                                                                                                                                    if (f8 ^ 0x19) ^ (f8 % 0x11 + f9) == check[8]:
                                                                                                                                                        for f7 in range(32, 128):
                                                                                                                                                            if (f7 ^ 0x19) ^ (f7 % 0x11 + f8) == check[7]:
                                                                                                                                                                for f6 in range(32, 128):
                                                                                                                                                                    if (f6 ^ 0x19) ^ (f6 % 0x11 + f7) == check[6]:
                                                                                                                                                                        for f5 in range(32, 128):
                                                                                                                                                                            if (f5 ^ 0x19) ^ (f5 % 0x11 + f6) == check[5]:
                                                                                                                                                                                for f4 in range(32, 128):
                                                                                                                                                                                    if (f4 ^ 0x19) ^ (f4 % 0x11 + f5) == check[4]:
                                                                                                                                                                                        for f3 in range(32, 128):
                                                                                                                                                                                            if (f3 ^ 0x19) ^ (f3 % 0x11 + f4) == check[3]:
                                                                                                                                                                                                for f2 in range(32, 128):
                                                                                                                                                                                                    if (f2 ^ 0x19) ^ (f2 % 0x11 + f3) == check[2]:
                                                                                                                                                                                                        for f1 in range(32, 128):
                                                                                                                                                                                                            if (f1 ^ 0x19) ^ (f1 % 0x11 + f2) == check[1]:
                                                                                                                                                                                                                for f0 in range(32, 128):
                                                                                                                                                                                                                    if (f0 ^ 0x19) ^ (f0 % 0x11 + f1) == check[0]:
                                                                                                                                                                                                                        print(''.join(map(chr, [ f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27])))