• XSS.stack #1 – первый литературный журнал от юзеров форума

Разбор детекта Kazy от Bitdefender'a

porky365

RAID-массив
Пользователь
Регистрация
02.02.2010
Сообщения
92
Реакции
0
Привет снова всем, цикл статей продолжается :) В этот раз проверил на орфографию :D

Многие криптеры рано или поздно сталкиваются с детектами бита - Heur.Kazy.XXXXX. Причем люди замечают что детект не связан с сигнатурой. Ну например у меня весь код стаба морфится, а оригинальный файл пакуется и криптуется. Как понятно байты всегда разные. Но как же он тогда детектит ? Об этом я и расскажу :)

Статья посвящается всем криптерам, у кого крипт не VB (Михрютка,STE4LTH и другие). От него конечно легко избавится, но каждый раз это делать надоедает.
В общем полный его разбор.

И так начнем с простого, бит как и любой ав цепляется к вашему файле по каким то параметрам. Этими параметрами являются DataDirectory, размер файла, даные в ресурсах и др.
Самый простой способ сбить кази да и другие сигнатуры, просто тупо добавить что то в Дата директорию или убрать. Ну например, не было экспорта у exe, так добавьте его :) Не было ТЛС, добавьте. Был импорт, уберите импорт. Это все нужно делать рандомно.

Это самое простое, теперь полезем непосредственно в алгоритм. К чему привязывается бит для кази:
1. Размер файла
2. DataDirectory
3. EntryPoint
4. Энтропия

Ну первое это размер файла, ну его как не изменяй он будет орать. Он не является самым критичным из параметров. Даже изменив размер +100 кб детект может остатся. Конечно размер можно увеличить еще больше, но для нас криптеров как и для аверов, размер имеет значение. Ведь многим заказчикам очень важен маленький размер. Значит повлиять на эту величину мы не можем. Да и не нужно.

Второе это дата директори. Тут как я и описывал можно хитрить с элементами и мы станем не видимыми. Но это тоже не интересно, это только цветочки. Ягодки будут в впереди.

Энтри пойнт. Вот параметр очень критичный. Меняя его можно заметить как сбиваются алерты. Если размер секции взять 100%, тогда в первых 50% будет Alureon,а дальше кази, ну местами ransam появляется. Поэтому рекомендации тут простые. Энтри у вас должен постоянно меняться, от билда к билду.

И последнее, это энтропия. Это и есть ягодки :) Мало того что он считает энтропию всей секции. Ведь как не смотри у меня она варьируется от 6-6.5, а детект остается. В чем же соль ?: н считает энтропию по блокам. Ну для простаты возьмем размер блока FileAligment. Как понятно выйдет график, где явно будут подьемы и падения. Это и есть признак вашего кода :) Так практически 100% и выявляется ваш зверек. Что тут делать ?
В общем я вижу такой вариант. Требуется перемешивать свой исполняемый код, причем среди этого кода должен быть перемешан и код оригинального файла. Получится что график изменится, а значит и детект уйдет.

Как понятно весь детект базируется на признаках, и как опять было доказано, ими являются энтропия,дата директори и сигнатура (если есть конечно)

Ну что, вот и все. Может после опишу и другие детекты, может и открыл Америку, но для меня было интересно исследовать метод облома этого ав.

Победа будет за нами :)
 
Помнится в то время, когда мой криптор был еще вб'шным одним из критериев была иконка и этот детект кази, да и рансом легко обламывались банальной сменой иконки или даже её перерисовкой (аля хэширование иконки, аспект не был затронут? или это секрет? ;) ведь для бита это вполне естественно) сейчас у бита уже более менее нормьный эмулятор и он любит курить то что находится в криптованном виде, и его можно обломить не криптуя нулей;) ну или разбить криптованный файл по кускам...

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

идея не плоха, но вот как с реализацией? и думаю это обламает далеко не только бита... =)

p.s. Darwin молодец, приятно видеть динамику в этом направлении на дамаге, спасибо!
p.s.s от себя.. постараюсь тоже делиться наблюдениями и результатами тестов
p.s.s. Darwin, расскажите а как обстоят дела с самым лучшим эмулем? (ну конечно же каспером), что вы о нем думаете?)
 
Теперь у меня норм ник наконец :) Darwin --> Porky365. Щас на дамаге и експе хоть норм стало.

Что я думаю насчет каспера ? Ну в общем мне он нравится, я нашел пару методов облома эмуля и их проходит только каспер. Но лучшие средства это универсальные. Поэтому я стараюсь базироваться на том что ав не может знать. Ну там часть PEB,KUSER_SHARED_DATA,данные длл, результаты выполнения функций, переполнение функций. В общем все что позволяет передать управление на мой код :)
 
конкретно
результаты выполнения функций
без использования пеба, переполнений данных длл может его обламить или только в комплексе решение обходит?

у меня по другому его обходит, ключ - время! ;) мне просто интересна альтернатива...

p.s. слышал что обламывается с помощью SEH, брутфорса ключа декрипта.. знакомы с этими методами?
 
у меня по другому его обходит, ключ - время! wink.gif мне просто интересна альтернатива

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

Сех тоже не использую, так как его установка ставит минусы. Ну конечно в приделах разумного можно. Но это не мое.

Пример алгоритма привести можете, если не сюда, то можем пообщатся в аське или в джабере.
 
антиэмуль для каспера
Код:
xor eax, eax 
        mov ebx, fs:[eax] 
        pushfd 

        
        push offset @l1 
        push -1 
        mov fs:[eax], esp 

        
        xor eax,[eax] 

       
        push -1 
        xor eax,[eax] 
        popfd 

       
        mov eax, [eax] 
        nop
        ud2 
        nop 
        nop 
        int 03 
        jmp @end_of_line 

       
        @l1: mov eax, [esp + 04h] 
        @l2: mov edx, [esp + 0Ch] 
        mov eax, [eax] 
        cmp eax, 0C000001Dh 
        jz @x2 

        cmp eax, 080000003h 
        jz @x1 

        cmp eax, 0C0000005h 
        jnz @set_tf_bit 

        @x2: inc dword ptr [edx+0B8h] 
        @x1: inc dword ptr [edx+0B8h] 

        @set_tf_bit: 
        cmp dword ptr [edx+0B8h],offset @end_of_line
        jae @end_of_handler 
        or dword ptr [edx+0C0h],100h 
        @end_of_handler:xor eax,eax 
        inc [count] 
        ret 

        
        @end_of_line:mov fs:[eax],ebx 
        sub esp, 8 
        popfd
 
@greenzy
заинтересовал опкод ud2 , вбив в гугл я увидел, что http://sasm.narod.ru/docs/pm/pm_int/chap_3.htm, как видно из таблици Недопустимая команда (Invalid Opcode) в защищенном режиме процессора

inc [count] что должно быть тут?
 
да на количество кода можно закрыть глаза, можно всегда сделать и криптонуть шелкод, гораздо интереснее какой толк нам с вашей "части" эмулятора?:) спору нет вы молодец, но хотелось бы действительно увидеть и остальную часть или же если это секрет, зачем вообще выкладывать?;)
 
Так или иначе использование каких-либо частных случаев обхода эмуляторов не даёт постоянного результата(всё равно расковыряют и добавят в базу).

Чем вариант с задержками не нравится ?

P.S: Через 1-2 года все апишки наконец-то будут нормально эмулировать(надо же авшникам на что-то жить) :)
 
@Chococream задержка не нравится, так как бывает когда нужно чтобы все моментом открывалось а задержка антиэмуляции + депак + декрипт = прилично, тестами было выяснено что каспер до 5-5.8 сек эмулирует, а если криво писать функцию задержки, то 17-17.8 секунд, что конечно не приемлемо.

greenzy
мультимедийные команды
имеете ввиду ответы ошибок апи вызовов ? опрашиваете через GetLastError?

p.s. ко всем вопрос.. кто нибудь копал в сторону декрипта брутфорсом?
 
demien
нет, это немножко другое. команды/опкоды подразделяются на несколько типов. одним из них является мультимедийные (хотя можно использовать другие расширенные). большинство из них не эмулируются ав.
вот небольшой ман http://www.intel80386.com/simd/mmx2-doc.html
подобные команды можно использовать в качестве первых байтов для точки входа декриптора, но не постоянной основе. иначе ав добавят их как сигнатуру.
если криптор пермутирующий, то вполне логично взять штук 10 таких команд
 
demien
Если мне не изменяет логика, то брутфорс потребует некоторого времени и будет почти идентичен той самой задержке? Имеет ли тогда это смысл, если
тестами было выяснено что каспер до 5-5.8 сек эмулирует, а если криво писать функцию задержки, то 17-17.8 секунд, что конечно не приемлемо.
? :)
 
Большие циклы брута скорее всего будут воспринят так же как крипт, т.е. плохо,
но думаю можно разбавить цикл мусором или псевдо полезным кодом,
большой плюс брута я думаю в отсутсвии ключа как такового.
 
Через 1-2 года все апишки наконец-то будут нормально эмулировать(надо же авшникам на что-то жить)

через 1- 2 гда уже и новая винда будет :)

х#йней не страдайте :) юзайте апи :)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх