Как-то я забыл все данные от одной из игрушек и решил покопать ресурсы.
Нарыл свои данные, но зашифрованы до ужаса.
У меня есть две строчки (вторую не дам, ибо пароль там):
Вот одна из них:
AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA9wj0kiicok2tyiEa+EOoigQAAAACAAAAAAAQZgAAAAEAACAAAABuAbvtG6ep6YlJqB5xEz1i8dqosmY3+PGT5VuBAry3mQAAAAAOgAAAAAIAACAAAAAJuIbwic89F3oRlzD0lnUaQtfPdHMAlS4gqMyeTLivaTAAAAD6lZnI02EKA73X7a6sYwRaocQ23noSZHYWrCdM50a5Og4+lI6mvcoBwWQEIpcXhtdAAAAA1aVZQ65Ki59rMYVKzP4GhNc9cA+xgLPfsEKlOWyX+4C2uMH+Woy+d3Abs8GlIJFGD8ND6pzbXD+pu+D8p4AggQ==
Обе, по видимому, зашифрованы вот таким способом (нарыл все это из файлов игры (там открытые *.pyc-скрипты), в Python не гу-гу):
import base64
from debug_utils import LOG_CURRENT_EXCEPTION
class XORObfuscator:
__PREFIX = '#obfuscate:'
def __init__(self, key):
if len(key) < 1:
raise ValueError, 'Key length must be at least one character'
self.__key = key
def __doXor(self, data):
kIdx = 0
processed = []
for x in range(len(data)):
processed.append(chr(ord(data[x]) ^ ord(self.__key[kIdx])))
kIdx = (kIdx + 1) % len(self.__key)
return ''.join(processed)
def obfuscate(self, data):
return base64.b64encode(self.__PREFIX + self.__doXor(data))
def unobfuscate(self, data):
if len(data.strip()) % 4 != 0:
return data
try:
decode = base64.b64decode(data)
except:
LOG_CURRENT_EXCEPTION()
return data
if decode.startswith(self.__PREFIX):
return self.__doXor(decode[len(self.__PREFIX):])
return data
class PasswordObfuscator(XORObfuscator):
def __init__(self):
XORObfuscator.__init__(self, '416c34666745786b'.decode('hex'))
И чем-то закодированы (чем, кстати?).
Как их расшифровать?