Советы по успешной расшифровке - PullRequest
2 голосов
/ 25 марта 2011

У меня есть исполняемый файл, который расшифровывает ввод двоичных данных пользователем.Моя задача - восстановить алгоритм дешифрования, не видя исходного кода исполняемого файла.Я уже сделал около 50 попыток расшифровки, и, судя по результатам, алгоритм, очевидно, прост (XOR-подобен, но изменение байта входных данных обычно влияет на два байта вывода), а длина ключа определенно равна 16байт, но я все еще не могу восстановить его.

Итак, мой вопрос: есть ли какие-либо советы по успешному восстановлению алгоритма дешифрования?Будем весьма благодарны за некоторые рекомендации или любую другую помощь.

Вот несколько реальных примеров, я вижу там закономерность, но не могу понять весь алгоритм.Если я введу более 16 байтов (например, 17 нулевых байтов), последовательность выходных байтов повторяется.Левая часть - это то, что я ввожу, правая - то, что я получаю (все в шестнадцатеричной форме):

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> 73 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 AA 65
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 -> 94 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 AA 66
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 -> 93 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 AA 75
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 -> 83 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 AA 76
00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 -> 83 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 A9 64
00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 -> 94 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 BA 55
00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 00 -> 94 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 B9 54
00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00 -> 94 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 75 A8 64
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 -> 73 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 AA 63

PS Это не «взлом» в обычном смысле.Я пишу вьюер 3D-моделей для небезызвестного формата (.bmd), но некоторые модели зашифрованы, поэтому я хочу реализовать свой собственный внутренний расшифровщик вместо использования внешнего исполняемого файла.

Ответы [ 3 ]

2 голосов
/ 25 марта 2011

Ваш подход совершенно правильный.Если мы предположим, что это 16-байтовое блочное шифрование и что это действительно xor-код, вы можете действовать следующим образом (обратите внимание, что все вычисления выполняются по модулю 2):

  • Входной блок 128 бит иБлок вывода также
  • Шифрование может быть выполнено с помощью двоичной матрицы 128x128 E: out = e (in) = E * in + e (0)
  • Каждая строка в E в основном говорит вам, какиебиты будут перевернуты на выходе, если вы измените соответствующий бит на входе.
  • Вы можете получить E и e (0), используя ваш подход, установить один бит каждый и вычислить выход.Таким образом, вы получаете матрицу E строка за строкой, т.е. вам нужно 128 входных значений, чтобы собрать полную матрицу.e (0) - это просто кодирование нулевой строки.
  • Расшифровка затем определяется как d (out) = D * (out-e (0)) с матрицей D.
  • Если мы объединим оба, мы получим = d (out) = D * (E * in + e (0) -e (0)) = D * E * in.
  • Таким образом, мы должны вычислить двоичную инверсию матрицы шифрования E. Есть известные алгоритмы для этой проблемы (см., Например, http://en.literateprograms.org/Binary_matrix_%28Java%29).

Редактировать: Я проверил, подходит ли приведенный вами пример к предположениям. Если бы это был простой код XOR, у нас было бы XOR [1-я строка, 2-я строка, 4-я строка] = 0 на входе и выходе. То же самое для XOR [1-я строка,5-я строка, 6-я строка, 7-я строка] = 0. В предоставленных ограниченных данных это верно для всех битов, но для первых 8 в выходных данных (что не говорит о многом, так как в любом случае затронуто только несколько бит). К сожалению, я не могу вам сказатьбольше на данный момент с такими ограниченными данными.

1 голос
/ 25 марта 2011

Насколько велик исполняемый файл - можете ли вы разобрать его и перепроектировать расшифровку из этого?

Возможно, опубликуйте несколько примеров, которые показывают, почему вы думаете, что это работает так, как вы думаете - кто-то еще может что-то заметить ...

0 голосов
/ 25 марта 2011

То, что вы хотите, скорее всего, будет использовать серый код для расшифровки файла. Серый код можно расшифровать с помощью некоторых xors, таких как: http://www.morkalork.com/mork/article/74/How_to_understand_and_use_Gray_code.htm

...