Страницы

Из источника: Энтропия и ее нормализация

Что такое энтропия применительно к программному коду можно найти в гугле и на васме. Вкратце - числовая оценка эффективности использования информационного объема. Измерять ее будем в битах на 1 байт [0..8] с точностью до сотых. В этом нелегком деле нам поможет PEiD который можно скачать известно где. Итак, запускаем PEiD, кидаем на него, к примеру, невинного AcroRd32.exe, жмем " > > > >" и в появившемся диалоге вычисляем значение Entropy тыканием по соответствующей кнопке. Вот у меня, к примеру получилось 5.06 и рядом в скобках вердикт (Not packed). А теперь проделываем ту же операцию с чем-нибудь упакованным тем же UPX'ом - и получаем 7.82 (Packed)
    Собственно к чему весь этот бред: раз утилита может на основе математической оценки предположить, упакован файл или нет, то почему бы этим не воспользоваться и антивирусу? В данном деле особо отличился лидер по проверке PE-файлов на валидность "антивирус" Avira Antivir. Их последний генерик - ZPack.Gen (по аналогии с XPack.Gen) по наблюдениям выдается исключительно на основе анализа энтропии секции. Т.е. если пакер не определен но энтропия необычно высока - получите клеймо.
    Логичное решение в виде выжигания напалмом конторы дятлов представляется не слишком эффективным - они не первые и наверняка не последния. Ну а поскольку надо быть на шаг впереди, подумаем о симметричном ответе. Раз не нравится наша энтропия - надо ее улучшить. Т.е. нам надо "разбавить" наш экзе таким образом, чтобы эффективность хранения данных уменьшилась, или, другими словами, добавить большое количество однотипных данных.
    Просто добавив кусок nop'ов в секцию, мы долго не протянем и вызовем апдейт генерика до уровня удаления однотипного повторяющегося мусора. В таком случае нам надо сделать такой мусор, который никаким описанием с наскока не удалить. В идеале картина, представленная взгляду в Hiew должна выглядеть как равномерно-распределенный код. (Кстати рекомендую провести некоторое время просто разглядывая картинки экзешников в hex-редакторе) И нам определенно не надо выглядеть как архив или как код со вставками в виде архивов или зашифрованных кусков. Т.е. энтропия должна быть по возможности одинакова в различных отдельно взятых кусках кода/файла.
    Достичь этого достаточно просто - надо все включаемые куски зашифрованных данных "разбавить" мусором (в виде последовательности 00h например) по псевдослучайному алгоритму до тех пор, пока он не будет выглядеть (иметь значение энтропии) как обычный код. Экспериментально установлено что оптимальное значение тут лежит в пределах 6.1-6.8. Сам экзе при запуске будет инициализировать псевдослучайный генератор так, чтобы последовательность чисел, определяющая места вставки мусора, повторилась один-в-один. В итоге весь наш мусор будет удален и можно будет расшифровать блок с секретными данными. 

Из источника: http://interpol.blog.ru/49299619.html


=====
~$ Удачи

Комментариев нет:

Отправить комментарий