Сейчас на форуме: asfa, _MBK_, Rio (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Энтропия файлов
Посл.ответ Сообщение

Ранг: 49.3 (посетитель), 43thx
Активность: 0.060
Статус: Участник

Создано: 27 февраля 2009 23:17
· Личное сообщение · #1

Стал разбираться с энтропией. Алго взял из "упаковщиков в последний раз". Рассчитывается энтропия для файла целиком и отдельно для каждой PE-секции. Результаты рассчетов отличаются от результатов PEiD и DiE. Отсюда и вопрос - как считают энтропию эти тулзы?

Пример: блокнот из WinXP. Размер 552960 бит; 417510 "полезных" бит -> энтропия файла 1,3244. DiE показывает теже самые биты, но энтропия 75,504. Откуда взялось это число? PEiD говорит, что энтропия 6,07.
Энтропия по секциям:
моя: .text - 1,28 .data - 6,714 .rsrc - 1,405
PEiD: .text - 6,28 .data - 1,150 .rsrc - 5,710

Энтропию по секциям я считаю просто - беру RawOffset и RawSize секции, читаю эти байты, считаю энропию. Может надо все нули в конце секции откинуть?

Интересно, как PEiD рассчитывает энтропию для всего файла и для отдельной секции и как это делает DiE?



Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 27 февраля 2009 23:45
· Личное сообщение · #2

Посмотри этот топик http://www.exelab.ru/f/action=vthread&forum=6&topic=13431. Там есть немного про энтропию



Ранг: 49.3 (посетитель), 43thx
Активность: 0.060
Статус: Участник

Создано: 28 февраля 2009 17:37
· Личное сообщение · #3

SVLab Да, не много. Указывают на ошибки в "упаковщиках в последний раз", но как я понял там ошибка в тексте статьи, а в коде по шеннону. Ссылка на реферат тоже ничего нового не дала. Еще есть что-нибудь? Исходники PEiD`a?



Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 28 февраля 2009 18:50 · Поправил: SVLab
· Личное сообщение · #4

Ссылка на wasm там же.
Если ты просто смотрел реферат, то там нет формул. Нужно качать.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 28 февраля 2009 19:19
· Личное сообщение · #5

По поводу разных чисел-в топике по линку выше уже написано. По поводу, как считается, можешь подебажить сами проги, сорцов пеид наверняка не найти, а по поводу ДИЕ можешь хеллспавна потыкать, он добрый, подсчёт энтропии может и даст.



Ранг: 49.3 (посетитель), 43thx
Активность: 0.060
Статус: Участник

Создано: 28 февраля 2009 19:50
· Личное сообщение · #6

SVLab пишет: Если ты просто смотрел реферат, то там нет формул. Нужно качать.
Я посмотрел все линки из кряклабовского топика. Не понял, что значит надо качать? Естественно я его скачал и прочитал.

Archer пишет: По поводу разных чисел-в топике по линку выше уже написано.
В том топике написано: "Учите матчасть. гугл еще не умер." А хелспаун там мало отвечал и шутил больше.

Archer пишет: можешь подебажить сами проги... можешь хеллспавна потыкать
Для меня это не лучшая затея Интересно, читает хэлспаун вопросы новичков или придется личку ему спамить



Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 28 февраля 2009 20:59
· Личное сообщение · #7

user_ пишет:
Не понял, что значит надо качать

Ну, я имел ввиду, если просто смотреть на сайте, то там криво отображается (без графики, т.е. формул)

На wasm'е же кто-то приводил исходник подсчета.
А что там замутил hellspawn в die, знает только он. Возможно, его коэффициент соотносится как-то с размером файла.



Ранг: 49.3 (посетитель), 43thx
Активность: 0.060
Статус: Участник

Создано: 28 февраля 2009 21:36
· Личное сообщение · #8

SVLab пишет:На wasm'е же кто-то приводил исходник подсчета. А что там замутил hellspawn в die, знает только он.

Да все я там видел и исходник этот. Обычный исходник, тоже самое, что и в "упаковщиках" + вывод результатов работы + обработка ошибок (типа файл не найден), которые только глаз замыливают.

В истории версий DiE где-то упоминается, что введен некий коэффециент к для подсчета энтропии, но никаких подробностей. Раз мои результаты отличаются от DiE и PEiD, значит алго у них другой. По их числам можно легко судить упакован файл(секция) или нет, а по моим нельзя, но легко судить об "упакованности" на глаз. Т.Е. я стал строить диаграмму из 256 столбцов. Высота столбца пропорциональна количеству байт, соответствующих номеру столбца.

Пример.
Берем файл, упакованный упх.
Энтропия файла моя - 1.0059; UPX1 - 1.0002; .rsrc - 1.5096. PEiD - 8.00 (Packed); UPX1 - 8,0; .rsrc - 5,33.
Таким образом из моих чисел можно судить, что файл упакован, секция UPX1 упакована и секция ресурсов тоже упакована ведь коэффециент не 2 не 3 и не 4, а 1.5 Но на диаграмме отлично видно, что секция UPX1 упакована(все столбцы имеют почти одинаковую длину), а ресурсы имеют огромный потенциал для сжатия(6000 нулей - длиннющий столбец).

Я запутался. Кто знает какие алго используют топовые тулзы - подскажите.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 28 февраля 2009 22:36 · Поправил: Hellspawn
· Личное сообщение · #9

user_

в чём вопрос, кроме того как считают другие? алго у тебя есть, теория тоже. выводить результат можно по разному, в процентах или просто коэфициентом. а уж жальше только фантазия. можно откидывать нули, или откидывать самый частый байт + самый редкий, чтобы было более срденее значение. можно привязать к размеру файла и т.д.

з.ы. я всё читаю, тока не всегда пишу

-----
[nice coder and reverser]




Ранг: 10.6 (новичок)
Активность: 0.010
Статус: Участник

Создано: 01 марта 2009 00:12 · Поправил: AndreyMust19
· Личное сообщение · #10

user_
Тема твоя мне очень близка. Некоторое время я тоже занимался "подсчетом энтропии".

Собственно энтропия в информатике - это сколько бит требуется на кодирование одного байта (поэтому макс. значение = 8). Очень важно - как считать эту энтропию. Если считать ее для всего файла, то чем больше будет файл, тем неточнее выйдет энтропия. Окажется что в все байты встречаются с одинаковой постоянностью, несмотря на фрагменты, в которых эти байты встречаются с разной постоянностью. Чтобы учитывать эти фрагменты (и повысить точность энтропии), надо отдельно подсчитывать энтропию небольших кусочков файла (н-р 1024 байта), а потом находить их среднее арифметическое. Чем меньше файл, тем меньше нужно выбирать выбирать размер кусочка. Вывод: простая энтропия всего файла - это далеко не коэфициент "сжатости" его содержимого.
Но это будет уже не энтропия, а среднее арифметическое энтропий отдельных кусочков файла .
Истинная энтропия - это энтропия всего файла, а все остальное - это нечто другое. PEiD: .text - 6,28 .data - 1,150 .rsrc - 5,710 - эти цифры являются энтропией этих секций.

Для секций надо учитывать не физический размер, а только те байты, к-е попадают в виртуальный образ, но при этом принадлежат секции, а не являются нулевыми или возникают от выравнивания. Ну если phys. size < virt. size, значит в память прочитаются все phys. size байты. А если virt. size < phys. size, то прочитаются все virt. size байты. А если virt. size == 0, то прочитается ALIGN(phys. size, section_align).

Но то, что я пытался сделать, -это какую часть займет размер упакованного файла от исходного.
Некоторые программы могут показывать не энтропию, а ((entropy / 8) * 100), якобы выдавая это за "энтропию в процентах". Но это кол-во процентов - не соотношение упакованного файла к оригиналу, так как энтропия возрастает не линейно:
-= Энтропия =- -= Во сколько раз можно упаковать =-
// 7.4 - 7.7 - упаковано максимально
// 7.15 - в 1.11 раз
// 6.1 - в 1.3 раза
// 4.8 - в 4 раза
// 4.422 - можно упаковать в 2 раза
// 4.420 - можно в 4 раза
// 3.5 - в 10 раз
Ты пишешь:
DiE показывает теже самые биты, но энтропия 75,504
Скорее всего, это и есть энтропия в процентах (= 6,04032).

А я пытался сделать алгоритм, узнающий соотношение размера упакованного файла к исходному (для проверки упаковывал RAR'ом). Получилось несколько алгоритмов, но все они были не очень точные (в каждом случае "показания датчиков" сильно разнились).
Мои мысли приближалсь к операциям, входящим в алгоритмы сжатия. Как архиватор узнает - в каком месте файла какой алгоритм сжатия применить? Он использует специальные алгоритмы, выясняющие - насколько хорошо этим способом упакуется фрагмент (или прямо упаковывал его разными способами, а потом сравнивал - какой из них сжимал лучше).

В итоге я решил что кроме подсчета энтропии нужно во всем файле искать повторяющиеся комбинации. Ведь, например, слово 'Microsoft Windows' может находится в разных фрагментах файла и в этом случае энтропия их не учтет (т. к. они не будут подсчитываться вместе).

Еще есть пара идей - подсчитывать энтропию не отдельных фрагментов, а нескольких фрагментов вместе. Н-р, 1и2, 1и3, 1и4, 1и5, ... 1и36, а потом найти среднюю арифметическую этих энтропий. Это и будет энтропией 1-го фрагмента. Потом таким же образом (не исключая из подсчета пары типа 2-4 и 4-2) подсчитать энтропии всех остальных фрагментов и взять их среднее арифметическое.

Так что, через некоторое время, может опять засяду за этот алгоритм .

ДОБАВИЛ:
Ах да, забыл. Твоя "энтропия" (цифры типа 1.402, 1.002) - это "порядочность" данных, то есть обратная энтропии величина. (там, где ты их написал, сумма твоего числа и энтропии почти равна 8).




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 01 марта 2009 01:16 · Поправил: Hellspawn
· Личное сообщение · #11

AndreyMust19

зачем столько отсебятины?? читаем http://ru.wikipedia.org/wiki/Информационная_энтропия http://ru.wikipedia.org/wiki/Информационная_энтропия

-----
[nice coder and reverser]




Ранг: 49.3 (посетитель), 43thx
Активность: 0.060
Статус: Участник

Создано: 01 марта 2009 01:18
· Личное сообщение · #12

Hellspawn пишет: в чём вопрос, кроме того как считают другие?
Заинтересовался этой темой, думал будет проще, но как всегда открываются подводные камни. Вот и решил на форум написать. Если эти "другие" не расскажут как делают они, то может быть скажут как не надо делать, чтобы я на их же грабли не наступал

AndreyMust19 пишет: Твоя "энтропия" (цифры типа 1.402, 1.002) - это "порядочность" данных, то есть обратная энтропии величина.
Значит ли это, что если из 8 вычесть "порядочность", то получится энтропия? Видимо "да". А значит, что мои результаты почти совпадают с PEiD`овскими. Из твоего поста я понял, почему почти совпадают.
Я просто проганяю алго, а PEiD очевидно устраивает пляски с обрезанием алигановских нулей, откидывает макс и мин значения и хз что еще.

Как я понял, с произвольным файлом все легко и простой прогон через алго достаточно паказателен, а вот с PE много нюансов. Пока я себе представляю дополнительные условия так:
1) не берем в расчет заголовки (DOS, PE, директории) //Но ведь пакер может всунуть свой код и в пустое место в заголовке и джампить на него (если не ошибаюсь FSG так делает)
2) не берем в рассчет секцию ресурсов, т.к. она не может быть запакована, а если пакер и обработал ресурсы, то они лежат в другом месте, а в секции только не упакованная иконка
3) не совсем ясно, что делать с секцией с неинициализированными данными
4) гемор с V.Size и RawSize

Отсюда видно, что нужно почти полностью разбирать PE-файл на запчасти. Это скучно и муторно. Скажите кто писал плагины для PE Tools, насколько сложно освоить их SDK? Позволяет ли он каким-либо образом получать файл в "разобранном" виде? или работает только как дампер? Цитата из редми:

PTDS - Это интерфейс для написания плагинов для PE Tools версий 1.5++
Он имеет следующие возможности:
- Дапм процесса/модуля процесса
- Получение списка процессов/модулей процесса
- Оптимизация PE файлов (RebuildPE)


AndreyMust19 не мог бы ты показать свои наработки? Исходники не прошу, покажи exe. Масштабы работы видно не малые, хотелось бы увидеть чего ты уже добился. А вообще, то что ты рассказал это уже эвристика и если все грамотно реализовать, то эвристика нехилая. Но масштабы работы немного пугают.



Ранг: 10.6 (новичок)
Активность: 0.010
Статус: Участник

Создано: 01 марта 2009 17:16 · Поправил: AndreyMust19
· Личное сообщение · #13

Hellspawn
зачем столько отсебятины??
В том, что энтропия - это ненадежный признак упакованного файла. Все зависит от того, как программа ее считает и учитывает ли "бесполезные" нули, не несущие в себе данные, а использующиеся только для выравнивания.
user_
не берем в рассчет секцию ресурсов, т.к. она не может быть запакована
Нет, упаковать ее можно (и она хорошо упаковывается, особенно UNICODE-строки и иконки). Просто не все пакеры это делают, ибо имхо формат Resource Directory - самый сложный из всех. Посмотри - редакторов ресурсов много, но около половины из них меняют их неправильно (что либо гробит ресурсы, либо всю программу).
почти полностью разбирать PE-файл на запчасти
Не весь. Достаточно заняться только заголовком (между заголовком и первой секцией) и секциями. Лучше взять алгоритм сжатия из архиватора (н-р, bzip) и упаковывать секцию в памяти, а потом сравнить упакованный размер с размером самой секции. Думаю, будет самый надежный способ проверки сжатости секций файла. А "сжатость" образа можно вычислить как среднее арифметическое показателей всех секций. Оверлеи в конце секций и в конце файла учитывать не надо - пакеры их не трогают, так как невозможно узнать - каким образом они используются программой (только если это не отладочная информация).
не мог бы ты показать свои наработки?
В архиве - все исходники и некоторые exe (релизные и дебагные). Насчет этих примеров я уже ничего не помню. Помоему они тестировочные - так что не удивляйся если программа не откроет файл. Лучше посмотри исходники и скомпилируй их. Может посже выложу версии, которые точно выведут "энтропию" файла, указанного в текстовой строке.

5a02_01.03.2009_CRACKLAB.rU.tgz - Entropy.rar



Ранг: 49.3 (посетитель), 43thx
Активность: 0.060
Статус: Участник

Создано: 02 марта 2009 14:02
· Личное сообщение · #14

Hellspawn пишет: зачем столько отсебятины?
А вот я бы твою отсебятину послушал с удовольствием Статья познавательная, но изложено математическим языком, а я его понимаю с трудом и поэтому не люблю. Цитата: "...Шеннон показал, что единственная функция, удовлетворяющая этим требованиям, имеет вид: -K*Сумма(P(i)*log2(pi)), где K — константа (и в действительности нужна только для выбора единиц измерения)." Цитата: "-+- DiE 0.63 [*] Переработано определение энтропии: (введен коэфициент [k])."

Это одна и таже К? Каково значение К?

AndreyMust19 пишет: Лучше взять алгоритм сжатия из архиватора (н-р, bzip) и упаковывать секцию в памяти
ИМХО это уж слишком. Какие-то алгоритмы архиваторов... зачем? Тогда уж блаже упаковать архиватором файл и сравнить размеры упакованного и неупакованного Не, я лучше попробую к уже имиющимуся алго прикрутить пару плюшек вроде откидывания макс и мин значений и т.д. И буду на пеид ориентироваться (а если хэлспаун расскажет как получается его ентропи индекс, тогда и на дие).

AndreyMust19 пишет: через некоторое время, может опять засяду за этот алгоритм
Если засядешь, то лучше реализуй все в виде длл и опиши подробно экспортные функи. Тогда можно будет легко прикрутить к любому проекту.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 02 марта 2009 15:04
· Личное сообщение · #15

user_ пишет:
Это одна и таже К? Каково значение К?


нет это свои нароботки, коэф. зависит от размера файла

-----
[nice coder and reverser]



 eXeL@B —› Вопросы новичков —› Энтропия файлов
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати