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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
>>прикол: как загрузить загрузчик? 02.11.01 13:19  
Автор: imho Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Попробуйте скопировать загрузочный сектор типа Windows 98, переименовать его в COM-файл и запустить из коммандной строки ДОС.

Я попробовал - и по экрану поползли ЖУКИ !!!
Не верите - попробуйте сами!
Я таких ни в одной гребаной интернациональной ASCII - кодировке не видел. Даже в Windings! Интересно - мелкомягкие знают?

***> ТАК КАК ЖЕ ЗАПУСТИТЬ ЭТОТ БУТСЕКТОР НА ЗАГРУЗКУ???? <***
Что именно делать то : ну там типа ES=DI, DS=SS, jmp [?:?]... или как???
Совсем не прикол, вот пример его трассировки... 02.11.01 13:49  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
> Попробуйте скопировать загрузочный сектор типа Windows 98,
...
> Я попробовал - и по экрану поползли ЖУКИ !!!

Дело в том, что родной mbr грузится биосом по адресу 0000:07c00h -
- всегда. И он себя перемещает куда-нибудь ниже ; Чтобы загрузить на свое место boot-сектор винта.

Ниже пример трассировщика mbr винчестера:
Написал Chingachguk ;)
.286
text segment byte public
assume cs:text,ds:text
org 100h
begin:
; Open file with MBR
mov ax,3d02h
mov dx,offset MbrName
int 21h
jnc @@FileOpen
mov dx,offset ErrMess
call @@Message
jmp @@Exit
@@FileOpen:
mov bx,ax ; Save descriptor
; Make New Address After Our Segment (after cs:/ds:/ss:/es:)
push cs
pop ax ; Get current segment to ax
add ax,1000h ; ax:=ax+64K/16
mov ds,ax
mov dx,07c00h ; ds:dx = to next segment (cs+64K:07c00h)
mov ah,3fh
mov cx,512
int 21h ; Read MBR from file
jnc @@MbrReaded
mov dx,offset ErrMess
push cs
pop ds
call @@Message
jmp @@Exit
@@MbrReaded:
mov ah,3eh
int 21h ; Close MBR file
mov si,dx ; si = 07c00h -> to begin of MBR
mov ax,word ptr es:[@@BeginMbr]
cmp ds:[si],ax
jnz @@NoStandMbr
mov ax,ds ; nop nop replace to xor ax,ax, ax=ds
mov word ptr ds:[si],9090h
@@NoStandMbr:
push ds
push dx
retf ; Execute MBR !
@@Exit:
mov ax,4C00h
int 21H ; BACK TO DOS
@@Message:
mov ah,09h
int 21h
retn
@@BeginMbr:
xor ax,ax ; Begin of standart MBR ?...
ErrMess db 'Error !','$'
MbrName db 'saveboot.dat',0
DiskBuffer db 512 dup(?)
Text Ends
end begin
Совсем не прикол, вот пример его трассировки... 06.11.01 09:44  
Автор: dron <Ivanov Andrey> Статус: Member
<"чистая" ссылка>
года 4 назад я тоже ради интереса писал загрузчик, который спрашивал пароль, делал сом файл и потом дискедитом вставлял его в мбр. Почему то строка запроса пароля не хотела выводиться полностью на экран, выводились, насколько я помню, только 3 буквы, причем я пробовал по-разному как биосовской функцией вывода на экран, так и прямым выводом символов в видеобуфер. результат один и тот же. Подскажите, может я чего ни учел.
Подробнее, если можно... 06.11.01 11:22  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
> года 4 назад я тоже ради интереса писал загрузчик, который
> спрашивал пароль, делал сом файл и потом дискедитом
> вставлял его в мбр. Почему то строка запроса пароля не
> хотела выводиться полностью на экран, выводились, насколько
> я помню, только 3 буквы, причем я пробовал по-разному как
> биосовской функцией вывода на экран, так и прямым выводом
> символов в видеобуфер. результат один и тот же. Подскажите,
> может я чего ни учел.

Надо б код глянуть ... А так не совсем понятно, как именно ты его(com) написал и можно ли его было в таком виде в mbr ложить ... Куда ты старый mbr деваешь ? Написал ты com с org 7c00 или еще как ...
код 07.11.01 13:10  
Автор: dron <Ivanov Andrey> Статус: Member
<"чистая" ссылка>
> Надо б код глянуть ... А так не совсем понятно, как именно
> ты его(com) написал и можно ли его было в таком виде в mbr
> ложить ... Куда ты старый mbr деваешь ? Написал ты com с
> org 7c00 или еще как ...
А старый мбр ручками переносится в 13 сектор, и моя прога грузит его из этого сектора, и потом скачет на него

ideal

segment cods
assume cs:cods,ds:cods
org 100h
proc boot
;push cs
push ds
push es
;mov ax,cods
;mov cs,ax
;mov ds,ax
;mov es,ax
jmp nach
str1 db 'ENTER PASSWORD',0dh,0ah
;mov ah,05h
;mov al,00h
;int 10h
nach:
;mov ax,cs
; mov es,ax
;mov ah,13h
;mov al,1
;mov bh,0
;mov cx,15
;mov bl,14h
;mov dh,22
;mov dl,15
;push cs
;pop es
;lea bp,[cs:str1-100h]
;int 10h

mov bx,0b800h
mov es,bx
mov bx,3520
mov ah,14h
mov al,'P'
mov [es:bx],ax
mov al,'a'
add bx,2
mov [es:bx],ax
mov al,'s'
add bx,2
mov [es:bx],ax
;mov bx,5
;mov ax,123
;mov dx,'f'
mov al,'s'
add bx,2
mov [es:bx],ax
mov al,'w'
add bx,2
mov [es:bx],ax
mov al,'o'
add bx,2
mov [es:bx],ax
mov al,'r'
add bx,2
mov [es:bx],ax
mov al,'d'
add bx,2
mov [es:bx],ax
mov al,':'
add bx,2
mov [es:bx],ax

;mov ah,13h
;mov al,1
;mov bh,0
;mov bl,17h
;mov cx,16
;mov dh,22
;mov dl,5
;mov bp,12
;int 10h
mov dl,'h'
mov ah,00h
int 16h
cmp al,dl
jne nach
mov dl,'a'
mov ah,00h
int 16h
cmp al,dl
jne nach
mov dl,'c'
mov ah,00h
int 16h
cmp al,dl
jne nach
mov dl,'k'
mov ah,00h
int 16h
cmp al,dl
jne nach


pop es
pop ds
mov dh,0
mov dl,80h
mov cl,13
mov ch,0
mov al,1
mov ah,02h
mov bx,0
mov es,bx
mov bx,7c00h
int 13h

db 0eah
dw 7c00h
dw 0000h
endp boot
ends cods
end boot






код 07.11.01 13:47  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
Посмотрел я твою программу. Вот что я хочу сказать по ней:

Проверил я вывод твой. На трассировщике, который я в этой нитке человеку высылал, котрый про жуков грил ;) Все работает. Выводит
строку "Password:" Но !

1. Перед выводом на экран, а ты неявно пользуешься режимом 03h
экрана (текстовой, 80x25), я б этот режим устанавливал. (mov ax,0003h, int 10h). Возможно, ты пишешь в видеопамять, не подготовившись. Но вероятность этого, на мой взгляд, ~5%.

2. Но вот главный баг вроде вот в чем:

> А старый мбр ручками переносится в 13 сектор, и моя прога
> грузит его из этого сектора, и потом скачет на него
>...
; Вот ты решил пердать управление родному mbr, котрый вроде как
; должен быть в секторе 13...
> mov dh,0 / mov dl,80h / mov cl,13 / mov ch,0
> mov al,1 / mov ah,02h / mov bx,0 / mov es,bx / mov bx,7c00h
; Все зашибато, кроме одного: твой код сейчас как раз сидит
; именно в 0000:07c00h, и ты поверх себя ...
> int 13h
; ... записываешь настоящий mbr
; И теперича здесь уже не эти команды:
> db 0eah / dw 7c00h / dw 0000h
; А какой-то кусок родного mbr. Последствия плачевны ;).

Вот как в таких случаях поступает настоящий mbr (98 или NT):

Сразу при старте копирует себя из 0000:07c00 в 0000:06xxh,
те ниже в памяти, что-то там делает и грузит boot сектор найденного
раздела винта на свое старое место, те в 0000:07с00h, и вот потом
делает jmp far или retf на эту точку...
Есть и другие варианты ;)


код 07.11.01 15:08  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> Вот как в таких случаях поступает настоящий mbr (98 или
> NT):
>
> Сразу при старте копирует себя из 0000:07c00 в 0000:06xxh,
> те ниже в памяти, что-то там делает и грузит boot сектор
> найденного
> раздела винта на свое старое место, те в 0000:07с00h, и вот
> потом
> делает jmp far или retf на эту точку...
> Есть и другие варианты ;)
>
конечно красивее поставить CD 13 EA 00 7С 00 00 в видеопамять
а если чуть-чуть усложнить то и обработка ошибок будет...
код 08.11.01 09:38  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
> конечно красивее поставить CD 13 EA 00 7С 00 00 в
> видеопамять
> а если чуть-чуть усложнить то и обработка ошибок будет...

Для вышеприведенного случая (dron), на мой взгляд, можно и вот так :
; Заготовим регистры для вызова
mov ax,0201h
mov bx,07c00h
mov cx,0001h
mov dx,0080h
push 0h
pop es
; Готовимся к переходу
pushf
push es
push bx
; Переходим в биос.
jmp dword ptr es:[13h*4]
OK 08.11.01 18:43  
Автор: dron <Ivanov Andrey> Статус: Member
<"чистая" ссылка>
Большое спасибо всем за советы!! Смысл ясен! Я что-то наподобие подозревал, но так сам и не допер :)))
код 07.11.01 13:27  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> А старый мбр ручками переносится в 13 сектор, и моя прога
> грузит его из этого сектора, и потом скачет на него

> mov es,bx
> mov bx,7c00h
> int 13h ; это сериализация, очередь команд очищается

>
> db 0eah ; ' этого уже нет оно переписано чтением по int13
> dw 7c00h
> dw 0000h

как оно у тебя скакать может мне не понятно
Прикол то в том, что именно ЖУКИ ! 02.11.01 18:20  
Автор: imho Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Прикол то в том, что именно ЖУКИ ! Это надо же, пишешь загрузчик,
а получается чуть ли не DEMO! Это как криптографические алгоритмы (некоторые) - 100 различных ключей примененных к одному файлу дают 100 различных ОСМЫСЛЕННЫХ вариантов - поди выбери, что тебе нужно было...

А прога-то работает! Спасибо огромнейшее! Очень редко нынче встречаются проги, работающие без доладки... И написано на удивление руками, а не как у некоторых уродов (где даже построчная трассировка не помогает - сам видел... )
1




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


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