информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаЗа кого нас держат?Все любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[ASM] Хмм... 19.10.01 23:23  Число просмотров: 1003
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
Что-то не стыкуется... OneHalf ведь тоже подставляет незараженный MBR.

Для проверки я написал 2 проги, обе перехватывают Int 13h. Мой обработчик при считыании сектора 0/0/1 заменяет первые 4 байта этого сектора нулями.

Первая прога перехватывает Int 13h до загрузки ДОС (запускается из MBR, как бут-вирус)
Вторая - после (обычная TSR, запускается из autoexec.bat)

1) Ставим в MBR первую прогу, загружаем Win95 OSR2, читаем первый сектор DiskEdit'ом - первые 4 байта оригинальные, т.е. система не вызвала мой обработчик, а считала сектор с помощью своих драйверов.
Загружаемся в Safe Mode или Command Prompt only, читаем первый сектор - в нем первые 4 байта - нули (т.е. обработчик-то действует :-)

2) Ставим в autoexec.bat вторую прогу, загружаем Win95 OSR2, читаем первый сектор DiskEdit'ом - первые 4 байта - нули.

Получается, что алгоритм не совсем такой, как описал z0.
Или это только у меня так ? :))


; Первая прога - компилить в .com и назвать newmbr.i13
.386
CODE            SEGMENT USE16
	        ASSUME  CS:CODE, DS:CODE, ES:CODE
                ORG     100H

Start:
		xor	ax, ax
		mov	si, 7C00h
		cli
		mov	sp, si
		mov	ss, ax
		sti
		mov	ds, ax
		push	ax
		push	si
		sub	word ptr ds:[413h], 4
		int	12h			; Put (memory size)/1K in ax
		shl	ax, 6
		mov	es, ax

		mov	di, offset Start
		push	es
		push	offset Cont_Boot
		cld
		mov	cx, 200h / 4
	rep	movsd
		retf

Cont_Boot:

		mov	ax, 201h
		pop	bx
		pop	es
		push	es
		push	bx
		mov	cx, 3
		mov	dx, 80h
		int	13h			; Disk  dl=drive 0  ah=func 02h
						;  read sectors to memory es:bx
						;   al=#,ch=cyl,cl=sectr,dh=head
		mov	ax, cs
		shl	eax, 16
		mov	es, ax			; ES = 0
		mov	ax, offset New_13h
		cli
		xchg	eax, es:[13h*4]
		mov	cs:Old_13h, eax
		sti
		retf


New_13h		proc	far
		pushf
		cmp	ah,2
		jne	Sys_13h
		cmp	cx, 1
		jne	Sys_13h
		cmp	dx, 80h
		jne	Sys_13h

		popf
		push	es
		push	bx	
		pushf
		call	cs:Old_13h
		pop	bx
		pop	es	
		mov	dword ptr es:[bx], 0
		retf	2
Sys_13h:
		popf
		db	0EAh
Old_13h 	dd	0
New_13h		endp

CODE            ENDS

		END	Start
// ------------------------------------------------
// Инсталляция в MBR
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <bios.h>

void main()
{
   int filedes;
   char buffer[512];

   biosdisk(_DISK_READ, 0x80, 0, 0, 1, 1, buffer);
   biosdisk(_DISK_WRITE, 0x80, 0, 0, 3, 1, buffer);

   filedes = open("newmbr.i13",  O_BINARY | O_RDONLY);
   if (filedes == -1)
   {
     printf("ERROR: Failed to open file 'newmbr.i13'\n");
     return;
   }
   long fl = filelength(filedes);
   if (fl > 0x100)
   {
     printf("ERROR: newmbr.i13 size is too big\n");
     return;
   }
   read(filedes, buffer, fl);
   close (filedes);
   biosdisk(_DISK_WRITE, 0x80, 0, 0, 1, 1, buffer);
}
// ------------------------------------------------
// Деинсталляция из MBR

#include <bios.h>

void main()
{
   char buffer[512];

   biosdisk(_DISK_READ, 0x80, 0, 0, 3, 1, buffer);
   biosdisk(_DISK_WRITE, 0x80, 0, 0, 1, 1, buffer);
}

;--------------------------------------------------
; Вторая прога (tsrint13.asm) 
.386
CODE            SEGMENT USE16
	        ASSUME  CS:CODE, DS:CODE, ES:CODE
                ORG     100H

Start:
		mov	ax, cs
		shl	eax, 16
		mov	es, ax			; ES = 0
		mov	ax, offset New_13h
		cli
		xchg	eax, es:[13h*4]
		mov	Old_13h, eax
		sti
		lea	dx, VeryEnd+1
		int	27h


New_13h		proc	far
		pushf
		cmp	ah,2
		jne	Sys_13h
		cmp	cx, 1
		jne	Sys_13h
		cmp	dx, 80h
		jne	Sys_13h

		popf
		push	es
		push	bx	
		pushf
		call	cs:Old_13h
		pop	bx
		pop	es	
		mov	dword ptr es:[bx], 0
		retf	2
Sys_13h:
		popf
		db	0EAh
Old_13h 	dd	0
New_13h		endp

VeryEnd:

CODE            ENDS

		END	Start

---
<programming> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach