▄▄ █ ▀▀▀ Virus Magazine █ Box 176, Kiev 210, Ukraine IV 1998 ▀██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ █ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▐▀▀▀ █▀▀▀▀▀▀▀█ ▐█ █▀▄ █▀▀ ▄▀▀ ▄▀▀ ▄█▄ ▄▀▀ █▀█ ▌ █ ▄▀█ █ ▄▀▀ █▄▄ █ █ ▀▀█ █ █ █ █ █▀ █▀ █ █ █▀ █ █ █ █ █ █ █ █ █ █ █ ▄▄█ █ █ ▐ ▐ ▐ ▐▄▄ ▐▄▄ ▐ ▐▄▄ ▐▄▀ ▀█ ▀▄█ ▐ ▐▄▄ ▐▄▄▄ █ █ █▄▄ █ ▐ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █▄▄▄▄▄▄▄█ (C) Copyright, 1994-98, by STEALTH group WorldWide, unLtd. ЗАРАЖЕHИЕ ФАЙЛОВ ПРИ ЗАВЕРШЕHИИ ВЫПОЛHЕHИЯ ПРОГРАММЫ (fn.4Ch int 21h) Большинство вирусов заражают файлы при из запуске на выпол- нение. Однако файлы можно заражать не только при запуске их на выполнение, а и при завершении выполнения программы. Рассмотрим данный способ (перехватывается ah=4Ch int 21h). Вся информация почерпнута из книги Финогенова "Самоучитель по системным функция MS-DOS". Итак, приступим. Вначале - цитата. "Как известно, функция DOS 4Ch всегда вызывается в конце программы, чтобы завершить ее выполнение и передать управление системе (конкретно - командному процессору COMMAND.COM). Однако откуда DOS знает, какую именно программу (процесс) следует завер- шить и куда именно передать управление ? Эта информация хранится в PSP выполняемой программы. В слове по смещению 16h от начала PSP записан идентификатор (т.е. сегментный адрес PSP) родительского процесса, а в двухслов- ной ячейке по смещению 0Ah - конкретный адрес возврата в него. В то же время в области текущих данных SDA в слове по смещению 10h хранится идентификатор текущего процесса. Если компьютер не вы- полняет никакую программу, текущим является COMMAND.COM и его ID записан в в SDA. При запуске с клавиатуры любой программы DOS за- писывает в SDA ее ID, а в PSP запущенной программы - ID родитель- ского процесса и адрес возврата в него, чем и обеспечивается воз- можность завершения запущенной программы и возврата в систему." Т.о., для заражения вирусу необходимо : 1) получить адрес SDA 2) получить сегментный адрес PSP текущей программы 3) получить сегментный адрес окружения программы (PSP:2ch) 4) осуществить поиск имени программы в окружении Формат окружения (все числа занимают по одному байту): 'variable1=value1',0 'variable2=value2,'0 ......... 'variableN=valueN',0,0,1,0 'Fullpath+Name',0 5) заразить ее Привожу фрагмент программы, реализующий данные шаги : . . . . . ; получим адрес SDA и из него адрес PSP mov ax,5d06h int 21h mov ax,ds:[si+10h] mov es,ax ; ES = PSP ; получим адрес окружения mov ax,es:[2ch] mov ds,ax xor si,si ; DS:SI = Environment ; ищем имя программы Find: cmp byte ptr ds:[si],0 je Cont1 RepFind: inc si jmp Find Cont1: cmp byte ptr ds:[si+1],0 jne RepFind cmp byte ptr ds:[si+2],1 jne RepFind cmp byte ptr ds:[si+3],0 jne RepFind add si,4 mov dx,si Infect: ; все ! теперь заражаем . . . . . Сам RCE.Crypt вирус, использующий данный метод заражения, вы имеете возможность просмотреть в части SOURCES (IV_12\VIRII\4CH\4CH.ASM). Приветствуются все рекомендации по улучшению, которые направляйте в адрес Stealth Group. HellRaiser 1997