@IzeBerg

Как расшифровать строку?

Как-то я забыл все данные от одной из игрушек и решил покопать ресурсы.
Нарыл свои данные, но зашифрованы до ужаса.
У меня есть две строчки (вторую не дам, ибо пароль там):

Вот одна из них:
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'))


И чем-то закодированы (чем, кстати?).
Как их расшифровать?
  • Вопрос задан
  • 3410 просмотров
Пригласить эксперта
Ответы на вопрос 2
@throughtheether
human after all
В данном отрывке, насколько я понял, исходный текст XOR-ится с ключом, к результату добавляется префикс '#obfuscate:' и результат кодируется в base64.

Если на вход данному алгоритму дать 'iliahonz@gmail.com', то результат будет такой:
I29iZnVzY2F0ZTooAF0HDyoWEQELWQcOKVYILgE=
Есть мнение, что предоставленный вами шифротекст порожден или другим алгоритмом, или этим алгоритмом с другим ключом. Можете все исходники предоставить?
Ответ написан
@custos
@throughtheether прав, плюс небольшое уточнее. Если бы строка обфусцировалась по этому алгоритму то base64decode вернул бы строку начинающуюся с __PREFIX, затем легко можно было бы подобрать ключ (во всяком случае его часть) просто поксорив результат известной строкой. Однако префикса в приведенной строке нет. В лучшем случае этот алгоритм годится только для строк с паролями, на что намекает название одно из классов...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы