информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеСтрашный баг в WindowsСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft обещает радикально усилить... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / operating systems
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
как это не может быть меньше 512? 08.02.06 13:47  Число просмотров: 2778
Автор: fly4life <Александр Кузнецов> Статус: Elderman
Отредактировано 08.02.06 13:48  Количество правок: 2
<"чистая" ссылка>
> >
> > dd if=\\.\c: of=c:\bootsect.dat bs=512 count=1
> > 

---
>
> Но на сколько мне помниться из ман Фряхи, bs не может быть
> меньше 512 и поэтому врядли получится в DD пропустить
> параметры ФС раздела и заполнить оставшееся содержимым
> какого-нибудь файла с кодом загрузчика.

как это не может быть меньше 512?

fly4life@fly4life:~> sudo dd if=/dev/hda of=/home/fly4life/tmp/testbr.bin bs=446 count=1
1+0 входных записей
1+0 выходных записей
446 bytes (446 B) copied, 0,015511 seconds, 28,8 kB/s
fly4life@fly4life:~> ll tmp/testbr.bin
-rw-r--r--  1 root root 446 2006-02-08 13:47 tmp/testbr.bin

---
<operating systems>
[Unix] Загрузка BSD 15.01.06 11:52  
Автор: Dpak0n4ik <Тимур Гладких> Статус: Member
<"чистая" ссылка>
Как сделать загрузку Win ВСЕГДА по умолчанию при использовании загрузчика FreeBSD?
А то выбор меняется при прошлом выборе операционной системы...
В man написано только о загрузки уже после выбора BSD...
самый последний Int13 забей нопами и не будет запоминать 16.01.06 18:31  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> Как сделать загрузку Win ВСЕГДА по умолчанию при
> использовании загрузчика FreeBSD?
> А то выбор меняется при прошлом выборе операционной
> системы...
> В man написано только о загрузки уже после выбора BSD...

самый последний Int13 забей нопами и не будет запоминать

вот дизассембированный фришный MBR с моими комментариями - поможет найти

.8086

BIOS_entry_offset equ 07c00h
MBR_work_offset equ 00600h

magic_number equ 0aa55h

partition_start_head equ 001h
partition_start_sector_cylinder equ 002h
partition_type equ 004h

partition_flag_boot equ 080h

partition_type_absent equ 000h
partition_type_extended equ 005h

jmpf macro dest_selector,dest_offset
db 0eah
dw offset dest_offset
dw dest_selector
endm

MBR segment use16 byte private 'code'
assume cs:MBR
assume ds:MBR

org MBR_work_offset
;This part of programm sets used segment registers ES,DS,SS to selector 00000
;and copies all MBR to work offset. Work offset is the lowest address of
;free memory = interrupt vector table size (00400h) + BIOS communication area
;size (00100h) + (00100h).
MBR_start:
xor ax,ax
mov es,ax
mov ds,ax
mov ss,ax
mov sp,BIOS_entry_offset
cld
mov si,sp
mov di,MBR_work_offset
mov cx,00100h
repnz movsw
jmpf 00000h,MBR_real_start

MBR_continue:
mov dx,bp
pop ax
mov current_default,al
cmp al,'5' ;another disk selected
je load_MBR_from_another_disk
;this code converts letter number in al to offset of proper partition record.
;(al*10h = 310h/320h/330h/340h) + 4aeh = 7beh/7ceh/7deh/7eeh
mov ah,010h
mul ah
add ax,004aeh
mov si,ax
;another one check
cmp byte ptr [si][partition_type],partition_type_absent
je print_partition_table
cmp byte ptr [si][partition_type],partition_type_extended
je print_partition_table
mov byte ptr [si],partition_flag_boot
call save_changes
mov dh,[si][partition_start_head]
mov cx,[si][partition_start_sector_cylinder]
jmp short BIOS_read

load_MBR_from_another_disk:
call save_changes ;dh is set to 0 here
mov cx,00001h ;cylinder 0, head 0, sector 1
xor dl,cl ;080h->081h 081h->080h
BIOS_read:
mov bx,BIOS_entry_offset
mov ax,00201h
;BIOS disk call.
;ah 002h read sector(s)
;al 001h sectors number
;es:bx 00000:BIOS_entry_offset buffer address
;dh 000h/???h head
;dl 080h/081h drive
;ch 000h/???h cylinder_low
;cl 001h/???h [0-5]: sector
; [6-7]: cylinder_high
int 013h
jc print_partition_table
cmp word ptr [bx][001feh],magic_number
jne print_partition_table
jmpf 00000h,BIOS_entry_offset

MBR_real_start:
;NOTE: dh is assumed to be 0
cmp dl,081h
je BIOS_drive_ok
mov dl,080h
BIOS_drive_ok:
mov bp,dx
;this code converts BIOS drive number in dl to opposite letter number
;(assuming only 2 disks may be present): 080h->'2' 081h->'1'
inc dx
xor dl,080h or '0' or 001h or 002h
;disk_n will not be used if only one disk is present
mov disk_n,dl
print_partition_table:
mov di,offset p0_boot
mov cx,00004h ;4 partitions in the table
mov partition_n,'1'
xor dh,dh ;bootable partition number
print_partition:
mov [di],ch ;partition boot flag
mov al,[di][partition_type]
cmp al,partition_type_absent
je next_partition
cmp al,partition_type_extended
je next_partition
inc dh ;bootable partition number
mov si,offset partition_string
call print
mov si,(offset partition_index)-2
next_partition_type:
inc si
inc si
mov bx,[si]
or bh,bh
jz unknown_partition
xor bh,[di][partition_type]
jnz next_partition_type
unknown_partition:
lea si,[bx][offset partition_names]
call print
next_partition:
add di,010h
inc partition_n
loop print_partition

cmp byte ptr ds:[00475h],002h ;BIOS comarea -> HDD number
je print_for_2_disks
mov si,offset default_string
or dh,dh
jnz print_for_1_disk
int 018h
jmp short print_partition_table

print_for_2_disks:
mov si,offset partition_string
call print
print_for_1_disk:
call print
input_start:
xor ah,ah
;BIOS time
;ah 000h get time
int 01ah
mov bx,dx
add bx,060h
timeout_cycle:
mov ah,001h
;BIOS key
;ah 001h check for key pressed
int 016h
mov ah,000h
jnz key_pressed
;BIOS time
;ah 000h get time
int 01ah
cmp dx,bx
jb timeout_cycle
input_stop:
mov al,current_default
jmp short check
key_pressed:
;BIOS key
;ah 000h get key
int 016h
mov al,ah
cmp al,01ch ;ENTER
je input_stop
;this code converts F? key to partition letter number:
;F1->'1' F2->'2' F3->'3' F4->'4'
add al,0f6h
check:
cmp al,'1'
jb input_start
cmp al,'5'
ja input_start
push ax
mov si,offset empty_string
mov bx,offset MBR_continue
push bx
print:
cld ;dimension flag is already cleared
lodsb
push ax
and al,07fh
mov ah,00eh
int 010h
pop ax
test al,080h
je print
retn ;not RETN but jump near to MBR_continue

save_changes:
push si ;not needed
mov ax,00301h
mov bx,MBR_work_offset
mov cx,00001h
xor dh,dh
;BIOS disk call:
;ah 003h write sector(s)
;al 001h sectors number
;es:bx 00000:MBR_work_offset buffer address
;dh 000h head
;dl 080h/081h drive
;ch 000h cylinder_low
;cl 001h [0-5]: sector
; [6-7]: cylinder_high
int 013h <- вот сюда поставь nop-nop
pop si ;not needed
mov current_default,'?'
retn

empty_string db 00dh ,00ah or 080h
partition_string db 00dh,00ah,'F'
partition_n db '5 . . .' ,' ' or 080h
disk_n_string db 'disk '
disk_n db '2'
default_string db 00dh,00ah,00ah,'Default: F'
current_default db '1' ,' ' or 080h

partition_index label word
dw 00100h
dw 00400h
dw 00600h
dw 00703h
dw 00a07h
dw 0630ah
dw 0640eh
dw 0650eh
dw 08014h
dw 08119h
dw 08219h
dw 08319h
dw 0931eh
dw 0a524h
dw 09f2bh
dw 0752fh
dw 05233h
dw 0db33h
dw 04036h
dw 0f23bh
dw 00041h
partition_names label byte
db 'Do' ,'s' or 080h
db 'Hpf' ,'s' or 080h
db 'Os' ,'2' or 080h
db 'Uni' ,'x' or 080h
db 'Novel' ,'l' or 080h
db 'Mini' ,'x' or 080h
db 'Linu' ,'x' or 080h
db 'Amoeb' ,'a' or 080h
db 'FreeBS','D' or 080h
db 'BSD' ,'i' or 080h
db 'Pci' ,'x' or 080h
db 'Cp' ,'m' or 080h
db 'Veni' ,'x' or 080h
db 'Dosse' ,'c' or 080h
db '?' ,'?' or 080h

;here must be offset 001beh
p0_boot db 000h ;080h
p0_start_head db 000h ;001h
p0_start_sector db 000h ;001h
p0_start_cylinder db 000h ;000h
p0_type db 000h ;006h
p0_stop_head db 000h ;07fh
p0_stop_sector db 000h ;03fh
p0_stop_cylinder db 000h ;031h
p0_sector_offset dd 000000000h ;00000003fh
p0_sector_number dd 000000000h ;0000626c1h

p1_boot db 000h ;000h
p1_start_head db 000h ;000h
p1_start_sector db 000h ;001h
p1_start_cylinder db 000h ;032h
p1_type db 000h ;007h
p1_stop_head db 000h ;07fh
p1_stop_sector db 000h ;03fh
p1_stop_cylinder db 000h ;095h
p1_sector_offset dd 000000000h ;000062700h
p1_sector_number dd 000000000h ;0000c4e00h

p2_boot db 000h ;000h
p2_start_head db 000h ;000h
p2_start_sector db 000h ;001h
p2_start_cylinder db 000h ;096h
p2_type db 000h ;00bh
p2_stop_head db 000h ;07fh
p2_stop_sector db 000h ;03fh
p2_stop_cylinder db 000h ;0f9h
p2_sector_offset dd 000000000h ;000127500h
p2_sector_number dd 000000000h ;0000c4e00h

p3_boot db 000h ;000h
p3_start_head db 000h ;000h
p3_start_sector db 000h ;001h
p3_start_cylinder db 000h ;0fah
p3_type db 000h ;005h
p3_stop_head db 000h ;07fh
p3_stop_sector db 000h ;0ffh
p3_stop_cylinder db 000h ;00ah
p3_sector_offset dd 000000000h ;0001ec300h
p3_sector_number dd 000000000h ;000411780h

dw magic_number

mbr ends

end MBR_start
юзай виндовый лоадер. 16.01.06 12:44  
Автор: _йцукенг_ Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Как сделать загрузку Win ВСЕГДА по умолчанию при
> использовании загрузчика FreeBSD?
> А то выбор меняется при прошлом выборе операционной
> системы...
> В man написано только о загрузки уже после выбора BSD...

юзай виндовый лоадер.
он тем и примечателен, что по дефолту грузит то, что ты прописал.
Не нравится мне этот виндовый загрузчик. 16.01.06 15:10  
Автор: Dpak0n4ik <Тимур Гладких> Статус: Member
<"чистая" ссылка>
Не нравится мне этот виндовый загрузчик.
Хотелось бы уже проинсталлиным средством пользоваться.
Дык он по-умолчанию проинстален (виндовый загрузчик). 16.01.06 19:00  
Автор: Den <Денис Т.> Статус: The Elderman
<"чистая" ссылка>
Посмотри в корень своей винды и наверняка найдёшь там файлик NTLDR и файлик BOOT.INI, если поставил не 9x.
Делаешь так:
Скопируй Boot Sector с раздела Никса и засунь его в файлик корневого каталога диска с NTLDR'ом, например в "bootsect.nix"

В фалике BOOT.INI пропиши строчку типа:
c:\bootsect.nix="My NIX"

потом: fdisk /mbr
и будет тебе щасте.
отстал от жизни - ща юзают fixmbr 16.01.06 19:02  
Автор: _йцукенг_ Статус: Незарегистрированный пользователь
<"чистая" ссылка>
:) А в чем разница? В том, что помимо fdisk'а мне на диске нужно иметь fixmbr? 16.01.06 19:05  
Автор: Den <Денис Т.> Статус: The Elderman
<"чистая" ссылка>
В том что в NT-линейке НЕТ fdisk-а и есть fixmbr (и fixboot) 17.01.06 12:17  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Я не ставлю 2k с компакт носителей. Только с дистрибутива на винте. 19.01.06 16:10  
Автор: Den <Денис Т.> Статус: The Elderman
<"чистая" ссылка>
И что? От этого там появляется fdisk? :-) 19.01.06 18:05  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Сделал поиск по дистрибутиву win2k и не нашёл ни одного fix*.* (кроме fixmapi.ex_) 19.01.06 20:47  
Автор: Den <Денис Т.> Статус: The Elderman
<"чистая" ссылка>
Неудивительно 20.01.06 13:14  
Автор: amirul <Serge> Статус: The Elderman
Отредактировано 20.01.06 13:15  Количество правок: 1
<"чистая" ссылка>
Это ВСТРОЕННАЯ команда консоли восстановления винды. Ты же не ожидал, что mbr можно подлечить у РАБОТАЮЩЕЙ системы. Такого даже 98-я винда не умела

У меня обработчик команд консоли восстановления валяется в файле spcmdcon.sys (меня смущает префикс sp - думаю это ServicePack, у себя можешь поискатьcmdcon.sy. Внутри все команды (в том числе и парочка fixmbr/diskpart, функции которой раньше выполнял fdisk)
[offtop] есть ли какая-нибудь досовая прога, прописывающая NT загрузчик в Boot Record? (не MBR). 07.02.06 14:21  
Автор: Den <Денис Т.> Статус: The Elderman
<"чистая" ссылка>
Возможно помогут DiskEdit (dos) или dd (*nix) 07.02.06 14:45  
Автор: kstati <Евгений Борисов> Статус: Elderman
<"чистая" ссылка>
Футы-нуты... Поясню подробно. 07.02.06 14:56  
Автор: Den <Денис Т.> Статус: The Elderman
<"чистая" ссылка>
Мне нужна прога, которую я мог бы запустить из батника и которая, без моего вмешательства, заменит код загрузчика в загрузочной записи раздела не тронув при этом параметры ФС раздела, находящиеся в загрузочной записи.
diskedit не обладает режимом невмешательства пользователя.
dd - никсовый и копирует блоками не менее 512 байт.

Мне нужна досовая программа, которая позволяет менять код загрузчика на произвольный (или хотябы на тот, что ищет и грузит NTLDR) без вмешательства пользователя.
dd - гнутый и запросто копирует блоками любого размера (параметр bs с модификациями ibs/obs) 07.02.06 15:03  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> diskedit не обладает режимом невмешательства пользователя.
> dd - никсовый и копирует блоками не менее 512 байт.

Под вынь есть, одна из первых вещей которые я ставлю после установки винды - гнутые утилиты.

> Мне нужна досовая программа, которая позволяет менять код
> загрузчика на произвольный (или хотябы на тот, что ищет и
> грузит NTLDR) без вмешательства пользователя.

Почему именно DOS? Консоль восставновления не подходит? Просто не понятно, чего ты в результате получить то хочешь.
Может ссылочку дашь на эти утилиты? 07.02.06 17:17  
Автор: Den <Денис Т.> Статус: The Elderman
<"чистая" ссылка>
Да куча их 07.02.06 17:48  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Лично я пользуюсь
UnxUtils (http://sourceforge.net/projects/unxutils) и MinGW/MSYS (http://sourceforge.net/projects/mingw)

Можешь взглянуть еще на проект GnuWin32 (http://sourceforge.net/projects/gnuwin32/), Cygwin (http://www.cygwin.com/) и MS SFU (http://www.microsoft.com/windowsserversystem/sfu/default.mspx)

dd if=\\.\c: of=c:\bootsect.dat bs=512 count=1

---

преотлично дампит бутсектор диска C:, ну а
dd if=\\.\PhysicalDrive0 of=c:\mbr.dat bs=512 count=1

---

дампит MBR нулевого винта
Thnx! 07.02.06 18:46  
Автор: Den <Денис Т.> Статус: The Elderman
Отредактировано 08.02.06 20:41  Количество правок: 3
<"чистая" ссылка>
> Лично я пользуюсь
> UnxUtils (http://sourceforge.net/projects/unxutils) и
> MinGW/MSYS (http://sourceforge.net/projects/mingw)

Thnx!

> Можешь взглянуть еще на проект GnuWin32
> (http://sourceforge.net/projects/gnuwin32/), Cygwin
> (http://www.cygwin.com/) и MS SFU
> (http://www.microsoft.com/windowsserversystem/sfu/default.mspx)

Извращение...
Уж лучше юзать VMWare.

>
> dd if=\\.\c: of=c:\bootsect.dat bs=512 count=1

Но на сколько мне помниться из ман Фряхи, bs не может быть меньше 512 и поэтому врядли получится в DD пропустить параметры ФС раздела и заполнить оставшееся содержимым какого-нибудь файла с кодом загрузчика.

> преотлично дампит бутсектор диска C:, ну а
> dd if=\\.\PhysicalDrive0 of=c:\mbr.dat bs=512 count=1
>
> дампит MBR нулевого винта

Дампить-то он дампит - сам этим пользуюсь, правда не для MBR, а для копирования BR никса в файл на диск C: (FAT32) (dd if=/dev/ad0s3 of=/mnt/c/freebsd.boo count=1). Но я же говорю, что мне не нужно весь сектор менять, а только его часть - код загрузчика.
как это не может быть меньше 512? 08.02.06 13:47  
Автор: fly4life <Александр Кузнецов> Статус: Elderman
Отредактировано 08.02.06 13:48  Количество правок: 2
<"чистая" ссылка>
> >
> > dd if=\\.\c: of=c:\bootsect.dat bs=512 count=1
> > 

---
>
> Но на сколько мне помниться из ман Фряхи, bs не может быть
> меньше 512 и поэтому врядли получится в DD пропустить
> параметры ФС раздела и заполнить оставшееся содержимым
> какого-нибудь файла с кодом загрузчика.

как это не может быть меньше 512?

fly4life@fly4life:~> sudo dd if=/dev/hda of=/home/fly4life/tmp/testbr.bin bs=446 count=1
1+0 входных записей
1+0 выходных записей
446 bytes (446 B) copied, 0,015511 seconds, 28,8 kB/s
fly4life@fly4life:~> ll tmp/testbr.bin
-rw-r--r--  1 root root 446 2006-02-08 13:47 tmp/testbr.bin

---
1  |  2 >>  »  




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


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