def bruteforce_lost_bits(result, mask, validation_func): """ Brute force البتات المفقودة فقط """ # Identify lost bits lost_bits_mask = ~mask & 0xFFFFFFFF preserved_bits = result & mask candidates = [] # Try all combinations of lost bits num_lost_bits = bin(lost_bits_mask).count('1') for i in range(2 ** num_lost_bits): # Reconstruct candidate key candidate = preserved_bits # Fill in lost bits with current iteration bit_pos = 0 for shift in range(32): if (lost_bits_mask >> shift) & 1: if (i >> bit_pos) & 1: candidate |= (1 << shift) bit_pos += 1 # Validate candidate if validation_func(candidate): candidates.append(candidate) return candidates # Example validation: check if decryption produces valid plaintext def validate_key(key): """Test if key is correct""" test_ciphertext = 0x12345678 plaintext = test_ciphertext ^ key # Check if plaintext looks valid return 0x20 <= (plaintext & 0xFF) <= 0x7E # ASCII printable # Execute attack result = 0b00010110101011110000111101010101 mask = 0x1FFFFFF valid_keys = bruteforce_lost_bits(result, mask, validate_key) print(f"Found {len(valid_keys)} valid key candidates")