Статистический анализ

Discussion in 'Криптография, расшифровка хешей' started by fbidesign, 28 Dec 2018.

  1. fbidesign

    fbidesign Member

    Joined:
    13 Jul 2008
    Messages:
    79
    Likes Received:
    12
    Reputations:
    0
    Доброго времени суток!
    Вчера вытащил из одного приложения ключ шифрования AES и расшифровал несколько наборов данных, и ключ и данные на выходе для нескольких тестовых наборов получились одинаковые и в моем коде, и в том что делало приложение. Есть одна проблемка - за этим слоем шифрования есть еще один, но исходников нет (достаточно сложная обфускация). Что-то мне подумалось что там на втором слое будет обычный XOR, а сами данные должны быть в json или xml представлении, попытался это проверить.
    PHP:
    function freqanaliz($str)
    {
        
    $freq = array();
        
    $n strlen($str);
        for (
    $i=0$i<$n$i++)
        {
            
    $ch substr($str$i1);
            
    $freq[ord($ch)]++;
        }
        foreach (
    $freq as $symb=>$num)
        
    $freq[$symb] = round($freq[$symb] / $n 1002);
        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 с длинным ключём. Почему все таки первый бит всех символов после шифрования нулевой и как это можно использовать для расшифровки? Вариант с убиранием первых (нулевых) битов и прочтения битовой последовательности без них не прошел.
     
    #1 fbidesign, 28 Dec 2018
    Last edited: 28 Dec 2018
  2. AbakBarama

    AbakBarama Elder - Старейшина

    Joined:
    25 Sep 2010
    Messages:
    350
    Likes Received:
    299
    Reputations:
    51
    Приложение на чём написано? Если в статике деобфусцировать не получается, попробуйте запустить под отладчиком и в динамике посмотреть. Хотя бы взять данные до и после расшифровки, с ними инфы для анализа будет намного больше.

    Может, ксор со статическим длинным ключом. Может, ксор с динамическим ключом (к примеру, с номером позиции, или с остатком от деления номера позиции на константу <= 128). Может, что-то ещё, зависит только от фантазии автора.

    Начальные байты совпадают, нет байтов >= 128 - почти 100%-ные признаки, что шифровался текст со стандартным началом типа "<?xml version="1.0" ... >". Если бы был комплект до и после, было бы больше шансов догадаться.