вступление
Дисскусия на эту тему происходила в вирмейкерской сети Evolution
Network.
где деструкция уместна? (теория)
Вирмейкеры-пацифисты конечно скажут, что деструкция и вирусы вещи не
совместимые, я тоже не деструктор и никогда [!] не занимался подобными
вещами (и не собираюсь). Но хочется дать совет деструкторам, потому что
большинство применяет деструкцию неправильно (тут уместна фраза: неумеешь
ненадо) и в результате страдают невинные люди. Что лично для меня не
очень приятно.
Видимо деструкция сильно повлияла на появления в конституции
Российской Федерации статьи о судьбе пойманых вирмейкеров. Немного
поразмышляв на тему "где уместна деструкция" я пришел к выводу, что
правильное применение деструкции сводится к применению ее в
антиотладочных триках и при обнаружении антивирусов способных лечить
вирус.
деструкция в антиотладочных триках
Для чего нужны антиотладочные трики? Для того чтобы защитить вирус от
изучения различными кодерами (ламера остановит простенькая шифровка, а
вот кодера пишущего на асме и имеющего стаж год или чуть больше не
остановит навороченный полиморфик), но как и все люди даже хорошему
кодеру свойственно ошибаться. Если кодер во время не заметит трик и не
занопит его, то его компьютер в лучшем случае повиснет ;). Повиснет, ну и
что... reset нажать не тяжело и заново загрузить зараженный файл в
отладчит ему особых проблем не доставит, но при дальнейшем исследовании
вируса он учтет наличие этого трика и я уверен на 99% что он его во время
занопит. А что если стирать файл который этот крендель разбирает и
повесить тачку? Это причинит немного больше проблем ;), потому что ему
прийдется найти резервную копию файла и снова загрузить его в отладчик.
Но чем больше ему прийдется по потеть и чем больше времени удастся вирусу
добыть тем лучше ;). Поэтому нужно наносить больший вред его винту, для
того чтобы уничтожить все резервные копии файлов с вирусами и чтобы ему
пришлось потеть приводя тачку в чувства, вам решать что вы будете делать
с его тачкой (сносить фат, пороть сектора или просто вешать тачку).
Возможно своей деструкцией вам удастся отбить желание дизасемблировать
вирус у простого смерного (не у антивирусника, вирмейкера или кодера со
стажем) или же выиграть время. В результате невинные чайники и простые
юзеры страдать небудут, а "любопытной варваре, нос оторвали" хотя
деструкторам глубоко начихать кто пострадает, а кто нет...
антиотладочные трики
Итак, в продолжение темы антиотладочных триков. В помощь начинающим
здесь приведена подборка триков. Они позволяют определить, отлаживают ли
вас, дальнейшая реакция виря целиком зависит от вас. Должен заметить, что
завесить машину гораздо проще, чем отфоматировать винт (в том смысле, что
подобные действия легче просечь и пресечь).
1. Противодействие отладчикам реального режима (к ним относятся такие
дебагеры, как TurboDebugger, Debug).
Противодействовать можно двумя способами:
- затруднение работы отладчика
- определение самого факта трассировки.
Первый способ основан на том факте, что отладчики реального режима
используют в своих целях прерывания int 1, int 3, им необходимо
работать с клавиатурой, работа программы под отладчиком занимает гораздо
больше времени, чем без него. По-порядку:
1.1 Забивание нулями адресов прерываний int 1, int 3
xor ax,ax
mov ds,ax
mov ds:[0004],ax
mov ds:[0006],ax
Действует хорошо, но также легко и снимается
1.2 Перенаправление векторов
xor ax,ax
mov ds,ax
mov ax,ds:[0084h]
mov ds:[0004],ax
mov ax,ds:[0086h]
mov ds:[0006],ax
И далее во всей программе заменять вызовы int 21h на int 1
1.3 Отрубание клавиатуры
in al,21h
or al,02
out 21h,al
Опять-таки хороший способ, но только если его не просекли :)
1.4 Проверка времени работы процедуры.
call start_timer
call test_proc
call stop_timer
Теперь пусть в dx:ax - время работы процедуры test_proc, в сх - время
работы процедуры на вашем компе.
div cx
cmp ax,1000 ;для работы на всех компах
jae debugger
1.5 Существует множество триков, связанных с использованием конвейера.
Hо насколько мне известно, они не работают на 586 и выше компах.
Поэтому здесь не рассматриваются.
1.6 Определение факта трассировки
pushf
pop ax
test ah,1
jz traced
Это в примитиве. Hа само деле отладчики при выполнении команды pushf
сбрасывают этот бит, так что вы обломитесь. Hо не все так плохо.
Существует баг процов, связанный с тем, что после выполнения команд типа
pop ss, mov ss,reg пропускается следующая за ним команда. Т.о.
последовательность команд
push ss
pop ss
pushf
pop ax
test ah,1
jz traced
позволит вам определить факт трассировки
1.7 Переход по динмаически изменяемым адресам
Устанавливаем обработчик int 1 на себя. Далее устанавливаем флаг
трассиров- ки, и обрабатываем команды:
int_1 proc
mov bp,sp
add byte ptr [bp+3],offset bbb - offset aaa ;изменяем команду, на
;которую указывает ip
iret
int_1 endp
; код программы
jmp short aaa ;db 0ebh,xxh
....
aaa:
....
bbb:
Таким образом произойдет переход не на метку ааа а на метку bbb Кроме
этого можно в теле обработчика int 1 производить расшифровку кода и сразу
же после выполнения команд призводить обратную зашифровку.
1.8 Для противодействия Soft-Ice можно использовать тот факт, что им
можно управлять через int 3 (более полную информацию см. Interrupt
List)
2. Противодействие отладчикам защищенного режима.
Здесь наши возможности ограничены более сильно в силу того, что данный
тип отладчиков эмулит прерывания, так что ... Hо все равно бороться
можно.
2.1 Забивание отладочных регистров
xor eax,eax
mov dr0,eax
mov dr1,eax
mov dr2,eax
mov dr3,eax
mov dr7,eax
Хороший метод, но ... и отладочные регистры также эмулятся... Мне
кажется (пока что я это еще не проверял) что тут как раз подойдут
проверки на эмуляцию, давно уже применяющиеся против антивирусов.
2.2 Данный код работает против DeGlucker'a v0.04 (взято из Cr0cK'z
AntiDEBUGING FAQ)
db 66h,0fah,0fbh
2.3 Использование функций Win32 (если вирь под win32)
функция IsDebuggerPresent(VOID) возвращает 0, если мы не под
дебугером, иначе возвращает ненулевое значение.
2.4 Обнаружению отладчика Soft-Ice посвящены две статьи в Xine #4
(xine-4.103, xine-4.106). Hе считаю необходимым заниматься переводом и
переписыванием.
P.S. Hо imho лучший способ найти хороший трик - попытаться пройти
какую-нибудь из защит типа PCrypt и взять что-то оттуда...
P.P.S. Просьба опытных кракеров не пинать меня ногами за
представленные здесь простенькие трики - у статьи несколько другое
предназначение.
Список "литературы", в которой можно посмотреть все это и еще больше :)
- Cr0cK'z AntiDEBUGGING FAQ
- Anti Debugging Tricks by Inbar Raz
- Xine #4 (.103, .106)
- Расторгуев С. "Программные методы защиты информации в компьютерах и
сетях"
- да еще много где...
деструкция как метод борьбы с антивирусами
Антивирусы всегда являлись главными "врагами" вирусов. Рано или позно
продукт будет детектиться антивирусами и главное не стирать сектора при
обнаружении на машине антивируса. Нужно сначала определить в состоянии ли
он детектить (и лечить) продукт, для этого наиболее приемлемо чтение
различных документаций (хотя бы документации к дополнению(ям) и списка
всех вирусов определяемых антивирусом) прилагаемых к антивирусу, и при
обнаружении в списке вирусов вирус с названием похожим на наше гробить
тачку. Главное чтобы вирус содержал в своем теле свое имя, которым
антивирусники должны будут назвать его.
article by UazZ & mongoose, both from misdirected youth
|