▄▄ █ ▀▀▀ Virus Magazine █ Box 176, Kiev 210, Ukraine IV 1998 ▀██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ █ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▐▀▀▀ █▀▀▀▀▀▀▀█ ▐█ █▀▄ █▀▀ ▄▀▀ ▄▀▀ ▄█▄ ▄▀▀ █▀█ ▌ █ ▄▀█ █ ▄▀▀ █▄▄ █ █ ▀▀█ █ █ █ █ █▀ █▀ █ █ █▀ █ █ █ █ █ █ █ █ █ █ █ ▄▄█ █ █ ▐ ▐ ▐ ▐▄▄ ▐▄▄ ▐ ▐▄▄ ▐▄▀ ▀█ ▀▄█ ▐ ▐▄▄ ▐▄▄▄ █ █ █▄▄ █ ▐ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █▄▄▄▄▄▄▄█ (C) Copyright, 1994-98, by STEALTH group WorldWide, unLtd. "О сегментированных файлах - оверлейных - я расскажу в следующем номере. Вернее, о некоторых методах внедрения в них. Здесь поле для фантазии достаточно широкое. Учиться, учиться и учиться. А мы вас научим. Успехов !" LovinGOD Ну-с, господа, кто угадает из какого номера IV выдрана вышеприведенная цитата ? Правильный ответ - из третьего ! Еще в далеком 1994 году много- уважаемый LG обещал всех нас научить заражать оверлейные EXEшники... Сейчас на дворе год 1998 и обещание это все также остается лишь обеща- нием. Нехорошо получается...Народ ждет уже 4 года :) Придется исправ- лять эту ситуевину...Итак, приступим...Тема нашей сегодняшней беседы: КАК ЖЕ ВСЕ-ТАКИ ПОСЕЛИТЬСЯ В ОВЕРЛЕЙНОМ EXE-ФАЙЛЕ ------------------------------------------------- Для начала - несколько организационных моментов : 1.Для полного понимания данного текста неплохо было бы ознакомиться (тем, кто еще не успел :) со стандартным способом заражения EXE-файлов.Способ сей был описан в IV #3. 2.Если кто надеется увидеть в конце текста работоспособный код, реализующий нижеизложенную идею, то пусть не надеется :) Расклад такой - я рассказываю технологию, а реализуете вы все сами.На этом левые прогрузы заканчиваются и я перехожу непосредственно к делу. Итак, чем же оверлейный экзешник отличается от обычного ? А практически ничем. Только в память он грузится не полностью...В этом-то и кроется главное западло. Если пытливым оком глянуть на его header , то можно легко заметить, что размер файла, записанный в header'e не совпадает с реальным...Условно оверлейный EXE-файл можно представить в виде двух частей : ┌─────────────────────┐ │ Корневой модуль │ (1) ├─────────────────────┤ │ Разная хрень, кото- │ │ рая потом догружа- │ (2) │ ется в память │ └─────────────────────┘ Как же обращаться с таким монстром ? Элементарно, в принципе...Изложенный ниже способ хоть и не лишен недостатков, но вполне работоспособен... ПЛАН ДЕЙСТВИЙ КОВАРНОГО ВИРУСА, КОТОРЫЙ ХОЧЕТ ПОСЕЛИТЬСЯ В ОВЕРЛЕЙНОМ EXE ------------------------------------------------------------------------- Шаг 1.ВЕЛИКОЕ ПЕРЕСЕЛЕНИЕ. -------------------------- Кусок части (2), идущий сразу за корневым модулем и по размеру равный длине нашего вируса перемещаем в конец файла.В результате файл будет выглядеть примерно так : ┌─────────────────────┐ │ Корневой модуль │ ├─────────────────────┤ │ Дырка :) │ ├─────────────────────┤ │ Продолжение (2) │ ├─────────────────────┤ │ Начало (2) │ (3) └─────────────────────┘ Примерный кусочек кода, который реализовывает вышеописанное: mov ax,4202h xor cx,cx xor dx,dx int 21h ;Получим реальную длину файла mov word ptr len,ax ;и сохраним ее mov word ptr len+2,dx xor eax,eax mov ax,word ptr [exe_header+4] dec ax shl eax,9h add ax,word ptr [exe_header+2] ;eax = длине файла из заголовка cmp eax,len ;Ежели длина в header'e совпадает je not_overlay ;реальной длиной - отваливаем... mov dx,ax shr eax,10h mov cx,ax mov ax,4200h int 21h mov ah,3Fh mov cx,tst_len mov dx,offset buf push cx dx int 21h ;Считаем начало части (2) в буфер xor cx,cx xor dx,dx mov ax,4202h int 21h mov ah,40h pop dx cx int 21h ;И запишем содержимое буфера ;в конец файла [...Skip...] len dd ? exe_header db 18h dup('') buf: Шаг 2.INFECT'EM ALL ! --------------------- Заражаем EXEшник стандартным способом, опираясь на значения из заголовка. Да, ни в коем случае не заражаем файл при открытии. Пакостим только при зак- рытии EXE-файла. Тут даже код какой-либо писать лень, все необходимое уже описано в IV #3. После второго шага файл будет выглядеть примерно так : ┌─────────────────────┐ │ Корневой модуль │ ├─────────────────────┤ │ Вирррус ! │ -> Здесь раньше была Дырка :) ├─────────────────────┤ │ Продолжение (2) │ ├─────────────────────┤ │ Начало (2) │ └─────────────────────┘ Шаг 3.ЖДЕМ-С... --------------- Так точно...Файл мы уже заразили.Теперь ждем, пока кто-нибудь не запустит уже зараженный файл. Шаг 4.МЫ УЙДЕМ ИЗ ЗООПАРКА. --------------------------- Ура ! Кто-то запустил инфицированный файл.Ясно, что первым управление получит наш вирус (если в предыдущих пунктах все было сделано правильно :) Дальше все стандартно - вирус заражает память.Перехватываем 21h инт, и (никто не забыл, что мы должны заражать файл при закрытии ?) отслеживаем вызов функций 3Eh или 4Ch. Шаг 5.Selfimmolation. --------------------- Самый трудный шаг в моральном плане :) Память мы заразили - нужно отдавать управление жертве.Но вы ведь помните, что заражая файл мы нехило покорежили его оверлейную часть.И теперь корневой модуль не сможет корректно подгружать необходимые ему для работы данные.Поэтому приведем файл в исходное состоя- ние. Да-да ! Переместим кусок (3) на его первоначальное место. И временно забъем на то, что в этом случае (3) затрет в файле наш вирус. Хотя приколь- но вообще - вирус лечит сам себя :) Небольшой hint - как вирусу узнать имя проги, из которой он стартовал и которую ему сейчас предстоит вылечить (ценой собственной жизни) ? Очень просто ! Посмотреть в enviroment table : mov es,ds:[2Ch] mov cx,0FFFFh xor ax,ax xor di,di scan: repne scasb scasb jnz scan add di,2h ;es:di указывают на строку с именем программы Шаг 6.REBORN FROM HELL. ----------------------- Будем считать, что после пятого шага прогамма-жертва благополучно отработала и собирается уйти на покой.Но вирус-то наш уже в памяти, и он не дремлет ! Помните, какие функции 21 инта мы контролируем ? Правильно - 3Eh и/или 4Ch. Поэтому при закрытии файла мы его снова заразим (если кто не понял как - то еще раз внимательно перечитайте все, начиная с первого шага :) Разлука была недолгой. Файл-жертва и вирус снова вместе ! ДОСТОИНСТВА ДАННОГО МЕТОДА -------------------------- 1.Вирус находится в середине файла. Advanced ламерам будет сложнее его найти :) 2.Если EXEшник обладает способностью проверять сам себя на предмет различ- ных изменений в коде, то при заражении его вышеописанным способом он ничего не заметит. Я думаю, ясно почему :) НЕДОСТАТКИ ДАННОГО МЕТОДА ------------------------- 1.С защищенного от записи диска зараженный экзешник стартовать не будет :( Но в то же время это так романтично...В этом есть что-то от вирусов, написанных на паскале :) 2.Существует вероятность того, что повторно вирус файл не заразит.Для повышения вероятности того, что вирус благополучно поселится на компьютере, неплохо было бы найти еще какое-нибудь уютное жилище, из которого не нужно будет раз за разом исчезать, а затем появляться снова - например, MBR. Ну, а как заражать MBR я думаю вы и без меня знаете :) (c) ShadowMaker 1997