Выполнения до загрузки ОС

Тема в разделе "WASM.ASSEMBLER", создана пользователем wyfinger_, 15 сен 2006.

  1. wyfinger_

    wyfinger_ New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2006
    Сообщения:
    28
    Адрес:
    Россия
    Добрый день.

    У меня не очень большой опыт в низкоуровневом программировании, поэтому прошу не критиковать, если я в чем-то неправ.

    Итак. Есть задача написать программу блокирования загрузки ПК. На машине стоит две WinXP, т.е. при загрузке выводится диалог выбора операционной системы, мне нужно чтобы моя программа выполнилясь до этого момента.
    Как это можно сделать? Какие могут быть особенности при написании этой программы?

    Заранее спасибо за помощь.
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    написать свой загрузчик ОС на основе сорцов линуксовых загрузчиков
     
  3. wyfinger_

    wyfinger_ New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2006
    Сообщения:
    28
    Адрес:
    Россия
    Это Вы шутите?..

    зачем мне писать загрузчик?, болжен быть способ проще..
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    ты хочешь вклинится до виндового загрузчика, значит должен написать свой, IMHO
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Проще может быть только заказать такую программу в разделе COMMERCE.
     
  6. wyfinger_

    wyfinger_ New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2006
    Сообщения:
    28
    Адрес:
    Россия
    Моя цель не получить такую программу, а написать ее - ради интереса и ради опыта.

    Где можно взять исходники какого-нибудь загрузчика? попроще. И еще описание какое-нибудь..

    Е еще, это дело нормально будет работать под виртуальной машиной? или могут быть проблемы?
     
  7. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    ntldr можешь расковырять. В исходниках NT4 (не 2000) вроде есть его сорцы. Но c mbr 'a гораздо надежнее стартовать.
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    wyfinger_
    На форуме фасма, в ветке OS.
     
  9. Noble Ghost

    Noble Ghost New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    204
    Адрес:
    Russia
    http://www.codenet.ru/progr/other/mbr.php
     
  10. mzprog

    mzprog New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    3
    вот мои ссылки на всякие хороште сайты по осям и загрузчикам:

    sysbin.com
    osrc.info

    а вот, например, вариант загрузчика с rus-os.narod.ru, работает или нет - незнаю не проверял:

    [SECTION .text]
    [BITS 16]
    [ORG 7C00H]

    START:
    BOOTMAIN: ISTRUC tagBOOTMAIN
    AT tagBOOTMAIN.JUMP, DB 0E9H
    AT tagBOOTMAIN.JUMPA, DW 3EH-3
    AT tagBOOTMAIN.FSSTRING, DB "NONAME"
    AT tagBOOTMAIN.BPS, DW 512
    AT tagBOOTMAIN.SPCLUST, DB 1
    AT tagBOOTMAIN.ROOTSEC, DW 1
    AT tagBOOTMAIN.FATS, DB 2
    AT tagBOOTMAIN.ROOT16, DW 0E0H
    AT tagBOOTMAIN.SPP16, DW 0B40H
    AT tagBOOTMAIN.TDRIVE, DB 0F0H
    AT tagBOOTMAIN.FSIZ16, DW 9
    AT tagBOOTMAIN.SPCY, DW 18
    AT tagBOOTMAIN.HEADNUM, DW 2
    AT tagBOOTMAIN.HIDDENSEC, DD 0
    AT tagBOOTMAIN.SPP32, DD 0
    IEND
    BOOT16:
    .DRVNUM: DB 0
    .RES1: DB 0
    .EXTSIGN: DB 29H
    .PID: DD 0
    .PLABEL: DB "NONAME"
    TIMES 11-($-.PLABEL) DB 0
    .FSSTR: DB "FAT12",0,0,0

    MAIN:
    MOV AX,3
    INT 10H
    XOR AX,AX
    MOV DS,AX

    MOV BX,MESS
    XOR DI,DI
    MOV AX,0B800H
    MOV ES,AX
    MOV AX,0F00H
    CLD
    .CYC:
    MOV AL,[BX]
    STOSW
    INC BX
    TEST AL,AL
    JNZ .CYC

    MOV AL, 0B6H
    OUT 43H, AL
    IN AL, 61H
    OR AL, 3
    OUT 61H, AL
    MOV AX, 3000
    OUT 42H, AL
    XCHG AL, AH
    OUT 42H, AL

    MOV AX,5302H
    XOR BX,BX
    INT 15H
    MOV AX,5308H
    MOV BX,1
    MOV CX,1
    INT 15H
    MOV AX,530FH
    MOV BX,1
    MOV CX,1
    INT 15H
    MOV AX,530EH
    SUB BX,BX
    MOV CX,102H
    INT 15H
    MOV AX,5307H
    MOV BX,1
    MOV CX,3
    INT 15H

    CLI
    HLT

    MESS: DB "Vas privetstvuet Russkaya Operatsionnaya Systema",0
    TIMES 510-($-START) DB 0
    DW 0AA55H
    ************************************
    Автор: Z_Mail


    Из письма : Подача звукового сигнала
    ;*************************************************
    mov al, 0B6h
    out 43h, al
    in al, 61h получаем значение порта
    or al, 3 инициализируем динамик
    out 61h, al
    mov ax, 300 частота звучания
    out 42h, al
    xchg al, ah
    out 42h, al
    ;***********************************************
    Автор : SMaximus

    Из письма : Вот код для откл. кампа
    ;***********************************************
    mov ax,5301h
    xor bx,bx
    int 15h ; подключиться к APM BIOS
    mov ax,530fh
    mov bx,1
    mov cx,1
    int 15h ; запустить сервис BIOS
    mov ax,5307h
    mov bx,1
    mov cx,3
    int 15h ; выключить компьютер
     
  11. kyprizel

    kyprizel New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    232
    Адрес:
    TSK
    а я наоборот постоянно бутменеджер патчу, чтобы не пищал ;)
     
  12. wyfinger_

    wyfinger_ New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2006
    Сообщения:
    28
    Адрес:
    Россия
    Спасибо за ссылки, полезно.

    Как на счет виртуальной машины? что в данном случае лучше: MS Virtual PC или WMware Workstation? (других у меня нет).
     
  13. wyfinger_

    wyfinger_ New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2006
    Сообщения:
    28
    Адрес:
    Россия
    Спасибо Noble Ghost, только не понял как дернуть исходную MBR, где она расположена?
     
  14. MiraclE

    MiraclE New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2005
    Сообщения:
    38
    Адрес:
    Kazakhstan
    первый сектор на носителе
     
  15. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. MBR_SIZE        =  512
    7.  
    8.  
    9. section '.code' code readable executable
    10.  
    11. align 4
    12. start:
    13.     invoke CreateFile, DeviceName, GENERIC_READ,\
    14.                        FILE_SHARE_READ or FILE_SHARE_WRITE, 0, OPEN_EXISTING,\
    15.                        FILE_ATTRIBUTE_NORMAL, 0
    16.     cmp eax, INVALID_HANDLE_VALUE
    17.     je @exit
    18.         push eax
    19.         invoke ReadFile, eax, MBR, MBR_SIZE, NumberOfBytesRead, NULL
    20.         test eax, eax
    21.         jz @close
    22.             invoke CreateFile, FileName, GENERIC_WRITE,\
    23.                                FILE_SHARE_READ, 0, CREATE_ALWAYS,\
    24.                                FILE_ATTRIBUTE_NORMAL, 0
    25.             cmp eax, INVALID_HANDLE_VALUE
    26.             je @close
    27.                 push eax
    28.                 invoke WriteFile, eax, MBR, MBR_SIZE, NumberOfBytesRead, NULL
    29.                 call [CloseHandle]
    30. @close:
    31.         call [CloseHandle]
    32. @exit:
    33.     invoke ExitProcess, 0
    34.  
    35.  
    36. section '.data' data readable writeable
    37.  
    38. DeviceName    db  '\\.\PHYSICALDRIVE0',0
    39. FileName      db  'MBR.bin',0
    40.  
    41.  
    42. section '.udata' readable writeable
    43.  
    44. MBR                   rb  MBR_SIZE
    45. NumberOfBytesRead     dd  ?
    46.  
    47.  
    48. section '.idata' import data readable
    49.  
    50. library kernel32,'KERNEL32.DLL',\
    51.           user32,'USER32.DLL'
    52.  
    53. include '%fasminc%\APIA\KERNEL32.INC'
    54. include '%fasminc%\APIA\USER32.INC'
     
  16. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    wyfinger_
    А я пока что только qemu юзал. Доволен всем, кроме скорости.
     
  17. wyfinger_

    wyfinger_ New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2006
    Сообщения:
    28
    Адрес:
    Россия
    Спасибо Asterix, красивый код, а пропатчить MBR из под Виндов можно? (просто щас не могу проверить).
     
  18. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    можно, под админом
    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. MBR_SIZE        =  512
    7.  
    8.  
    9. section '.code' code readable executable
    10.  
    11. align 4
    12. start:
    13.     invoke CreateFile, DeviceName, GENERIC_READ or GENERIC_WRITE,\
    14.                        FILE_SHARE_READ or FILE_SHARE_WRITE, 0, OPEN_EXISTING,\
    15.                        FILE_ATTRIBUTE_NORMAL, 0
    16.     cmp eax, INVALID_HANDLE_VALUE
    17.     je @exit
    18.         mov ebx, eax
    19.         push eax
    20.             invoke CreateFile, FileName, GENERIC_READ,\
    21.                                FILE_SHARE_READ, 0, OPEN_EXISTING,\
    22.                                FILE_ATTRIBUTE_NORMAL, 0
    23.             cmp eax, INVALID_HANDLE_VALUE
    24.             je @close
    25.                 push eax
    26.                 invoke ReadFile, eax, MBR, MBR_SIZE, NumberOfBytesRead, NULL
    27.                 test eax, eax
    28.                 jz @F
    29.                 invoke WriteFile, ebx, MBR, MBR_SIZE, NumberOfBytesRead, NULL
    30.                 test eax, eax
    31.                 jz @F
    32.                 xor eax, eax
    33.                 invoke MessageBox, eax, sz, eax, eax
    34. @@:
    35.                 call [CloseHandle]
    36. @close:
    37.         call [CloseHandle]
    38. @exit:
    39.     invoke ExitProcess, 0
    40.  
    41.  
    42. section '.data' data readable writeable
    43.  
    44. DeviceName    db  '\\.\PHYSICALDRIVE0',0
    45. FileName      db  'MBR.bin',0
    46. sz            db  'Successfully !',0
    47.  
    48.  
    49. section '.udata' readable writeable
    50.  
    51. MBR                   rb  MBR_SIZE
    52. NumberOfBytesRead     dd  ?
    53.  
    54.  
    55. section '.idata' import data readable
    56.  
    57. library kernel32,'KERNEL32.DLL',\
    58.           user32,'USER32.DLL'
    59.  
    60. include '%fasminc%\APIA\KERNEL32.INC'
    61. include '%fasminc%\APIA\USER32.INC'
     
  19. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    wyfinger_
    Да.
     
  20. wyfinger_

    wyfinger_ New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2006
    Сообщения:
    28
    Адрес:
    Россия
    Всем спасибо. Щас устанавливаю Virtual PC, т.к. VMware тупанула.

    Кстати, может где-то есть дизассемблированная MBR из под WinXP, а то я сравнил с тем, что приведено в статье http://www.codenet.ru/progr/other/mbr.php - они довольно сильно отличаются.