"""
Enigma Crackme Challenge
Автор: Claude
Уровень сложности: Средний
Цель: Найти правильный пароль
"""
import base64
import hashlib
import random
import time
import sys
import os
def _integrity_guard():
try:
with open(__file__, 'rb') as f:
content = f.read()
if b'# -*- coding: utf-8 -*-' not in content[:100]:
print('Ошибка целостности: файл был изменен')
sys.exit(1)
lines = content.split(b'\n')
if not lines[0].startswith(b'#!/usr/bin/env python'):
print('Ошибка целостности: заголовок был изменен')
sys.exit(1)
if b'# End of file checksum: ' not in lines[-1]:
print('Ошибка целостности: контрольная сумма отсутствует')
sys.exit(1)
except Exception:
print('Не удалось проверить целостность файла')
sys.exit(1)
def _transform_1(s, key=7):
result = ''
for c in s:
result += chr(ord(c) ^ key)
return result
def _transform_2(s, shift=3):
if len(s) <= 1:
return s
mid = len(s) // 2
return _transform_2(s[mid:], shift) + _transform_2(s[:mid], shift)
def _transform_3(s, salt='enigma'):
h = hashlib.sha256((s + salt).encode()).hexdigest()
return h[:16]
def _obscure_key(key):
parts = []
for i in range(0, len(key), 2):
if i + 1 < len(key):
parts.append(key[i:i + 2])
else:
parts.append(key[i])
random.shuffle(parts)
return ''.join(parts)
def _generate_dynamic_key(static_key, seed):
dynamic_key = ''
for i, c in enumerate(static_key):
dynamic_key += chr((ord(c) + seed + i) % 256)
return dynamic_key
_c1 = base64.b64decode('U2VjcmV0UGFzc3dvcmQxMjM=').decode()
_c2 = _transform_1('Zpv!ibwf!tpmwfe!uif!dibnmfohf"', 1)
_c3 = _transform_1('Jodpssfdu!qbttxpse/!Usz!bhbjo/', 1)
class _VerifierEngine:
def __init__(self, seed=42):
self.seed = seed
self._init_dynamic_vars()
def _init_dynamic_vars(self):
self.key_a = _transform_3(_c1, str(self.seed))
self.key_b = _transform_2(self.key_a)
self.key_c = _obscure_key(self.key_b)
t = int(time.time())
self.token = _transform_3(str(t), self.key_a)
def _verify_part1(self, password):
if len(password) < 8 or len(password) > 16:
return False
has_digit = False
has_alpha = False
for c in password:
if c.isdigit():
has_digit = True
if c.isalpha():
has_alpha = True
return has_digit and has_alpha
def _verify_part2(self, password):
p1 = _transform_1(password, 7)
p2 = _transform_2(p1)
p3 = _transform_3(p2, self.token)
dyn_key = _generate_dynamic_key(p3, self.seed)
target_hash = '7c4a8d09ca3762af'
computed_hash = hashlib.sha256((dyn_key + self.key_c).encode()).hexdigest()[:16]
return computed_hash == target_hash
def verify(self, password):
if not self._verify_part1(password):
return False
return self._verify_part2(password)
def main():
_integrity_guard()
engine = _VerifierEngine()
max_attempts = 5
attempts = 0
print('\n==================================================')
print('Добро пожаловать в Enigma Crackme Challenge!')
print('==================================================')
print('\nПравила:')
print('1. Найдите правильный пароль')
print('2. У вас есть', max_attempts, 'попыток')
print('3. Пароль содержит буквы и цифры')
print('\n')
while attempts < max_attempts:
try:
password = input(f'Попытка {attempts + 1}/{max_attempts}. Введите пароль: ')
print('Проверка', end='')
for _ in range(3):
time.sleep(0.3)
print('.', end='', flush=True)
print('\n')
if engine.verify(password):
print(_c2)
break
print(_c3)
attempts += 1
except KeyboardInterrupt:
print('\nВыход из программы...')
sys.exit(0)
if attempts >= max_attempts:
print('\nВы исчерпали все попытки. Попробуйте снова позже.')
if __name__ == '__main__':
main()