Доброго времени суток! Вчера вытащил из одного приложения ключ шифрования AES и расшифровал несколько наборов данных, и ключ и данные на выходе для нескольких тестовых наборов получились одинаковые и в моем коде, и в том что делало приложение. Есть одна проблемка - за этим слоем шифрования есть еще один, но исходников нет (достаточно сложная обфускация). Что-то мне подумалось что там на втором слое будет обычный XOR, а сами данные должны быть в json или xml представлении, попытался это проверить. PHP: function freqanaliz($str){ $freq = array(); $n = strlen($str); for ($i=0; $i<$n; $i++) { $ch = substr($str, $i, 1); $freq[ord($ch)]++; } foreach ($freq as $symb=>$num) $freq[$symb] = round($freq[$symb] / $n * 100, 2); return $freq;} Типичными для json характеристиками являются несколько символов (скобки, кавычки) на уровне на уровне 10-20% знаков, дальше смотря что за данные, если числовые - цифры и точки, если смесь то остальное (буквы / цифры) уже равномерно. Для моего тестового json'а с числами всего различных 38 знаков. Данные, зашифрованные AES: присутствуют 255 разных знаков, относительная частота каждого символа от 0.07% до 1.02% Теперь внимание, вопрос. Блок недорасшифрованных данных обладает следующими характеристиками: 126 - 128 различных символов с char-кодами от 0 до 127, частота от 0.07% до 2.12% и от 0.08 до 2.42% для другого блока. Что это может быть за шифрование такое? В случайное совпадение с числом 128 я не верю. P.S. у двух разных буферов данных после снятия AES первые несколько знаков совпадают, что явно намекает на то что это что-то в духе {"fieldname":"value"} где поле одинаково, а значение меняется. fieldname в тексте по смыслу передаваемых данных должно повторяться несколько раз, но повтора соответствующей последовательности байт нет, значит видимо все таки не перестановочный шифр, а xor с длинным ключём. Почему все таки первый бит всех символов после шифрования нулевой и как это можно использовать для расшифровки? Вариант с убиранием первых (нулевых) битов и прочтения битовой последовательности без них не прошел.
Приложение на чём написано? Если в статике деобфусцировать не получается, попробуйте запустить под отладчиком и в динамике посмотреть. Хотя бы взять данные до и после расшифровки, с ними инфы для анализа будет намного больше. Может, ксор со статическим длинным ключом. Может, ксор с динамическим ключом (к примеру, с номером позиции, или с остатком от деления номера позиции на константу <= 128). Может, что-то ещё, зависит только от фантазии автора. Начальные байты совпадают, нет байтов >= 128 - почти 100%-ные признаки, что шифровался текст со стандартным началом типа "<?xml version="1.0" ... >". Если бы был комплект до и после, было бы больше шансов догадаться.