Binary Hell's main site

 Главная страница 
 Новости 
 Статьи 
 Продукты 
 Документация 
 Наши проекты 
 О группе 
 
 Пишите нам 
 Опыт ФИДО конференций 
 Доки по ASM-у 
 Учебники 
 Форматы файлов 
 

- NICE.SOURCES (2:5030/1334.67) -------------------------------- NICE.SOURCES -
 Msg  : 244 из 1168
 From : Alexey Kolmakov                     2:4600/63.204   Вск 27 Авг 00 22:40
 To   : Vasya Bragin                                        Пон 04 Сен 00 00:17
 Subj : Re: Защита
-------------------------------------------------------------------------------
Привет Vasya!

 ю Quoting message from Igorr V Syurtukov to Vasya Bragin
 ю [26 Aug 00 at 22:46]

VB> А нет ли у кого-нибудь куска кода на паскале или вставка кода asm
VB> для опpеделения сеpийного номеpа HDD.(пpогpаммиpую на дельфи).
VB> Заpанее спасибо.
Вот рабочий исходник нашел. Посмотри:)
----------------------------------
    ideal
    model    tiny
    codeseg
    startupcode
    p486
    mov    dx,offset msg1
    mov    ah,9
    int    21h

    macro    read_passport
    local    m1
    out    dx,al
    mov    cx,256
    mov    di,offset buffer
    mov    al,0ech
    inc    dl
    out    dx,al
    m1:
    in    al,dx
    test    al,80h
    jne    m1
    ;test    al,1
    ;jne    error
    sub    dl,7
    rep    insw
    endm

    mov    dx,1f6h
    mov    al,0
    call    getdskparm

    macro    viewmark
    local    m1
    mov    ah,9
    mov    dx,offset msg8
    int    21h
    mov    cx,38/2
    mov    si,offset buffer+36h
    m1:
    lodsw
    xchg    al,ah
    int    29h
    xchg    al,ah
    int    29h
    loop    m1
    endm

    mov    dx,offset msg2
    mov    ah,9
    int    21h
    mov    dx,1f6h
    mov    al,10h
    call    getdskparm
    mov    dx,offset msg3
    mov    ah,9
    int    21h
    mov    dx,176h
    mov    al,0
    call    getdskparm
    mov    dx,offset msg4
    mov    ah,9
    int    21h
    mov    dx,176h
    mov    al,10h
    call    getdskparm
    mov    ax,4c00h
    int    21h
    error:
    mov    ah,9
    mov    dx,offset err1
    int    21h
    mov    ah,4ch
    int    21h

    rdpsprt:
    read_passport
    ret

    view1:
    viewmark
    ret

    getcyl:
    mov    ah,9
    mov    dx,offset msg5
    int    21h
    mov    si,offset buffer
    mov    ax,[si+2]
    call    viewax
    ret

    viewax:
    mov    cx,2
    viewax1:
    push    ax
    xchg    al,ah
    shr    al,4
    and     al,0fh
    mov    ah,48
    aaa
    db    0d5h,17
    int    29h
    pop    ax
    push    ax
    xchg    al,ah
    and    al,0fh
    mov    ah,48
    aaa
    db    0d5h,17
    int    29h
    pop    ax
    xchg    al,ah
    loop      viewax1
    ret

    getdskparm:
    call    rdpsprt
    call    view1
    call    getsernum
    call    getsalename
    call    getcyl
    call    getheads
    call    getsectors
    call    getbufcap
    call    getlbasupp
    call    getlbasect
    m11:
    mov    ah,9
    mov    dx,offset msg13
    int    21h
    xor    ax,ax
    int    16h
    ret

    getlbasect:
    mov    ah,9
    mov    dx,offset msg17
    int    21h
    mov    ax,[word buffer+7ah]
    call    viewax
    mov    ax,[word buffer+78h]
    call    viewax
    mov    al,10
    int    29h
    mov    al,13
    int    29h
    ret

        getlbasupp:
    mov    ah,9
    mov    dx,offset msg14
    int    21h
    cmp    [dword buffer+78h],0
    je    glba
    mov    ah,9
    mov    dx,offset msg15
    int    21h
    ret
    glba:
    mov    ah,9
    mov    dx,offset msg16
    int    21h
    pop    ax
    push    offset m11
    ret

    getheads:
    mov    ah,9
    mov    dx,offset msg6
    int    21h
    mov    ax,[word buffer+6]
    call    viewax
    ret

    getsectors:
    mov    ah,9
    mov    dx,offset msg7
    int    21h
    mov    ax,[word buffer+0ch]
    call    viewax
    ret

    getsalename:
    mov    ah,9
    mov    dx,offset msg9
    int    21h
    mov    cx,6/2
    mov     si,offset buffer+0eh
    gsn:
    lodsw
    xchg    al,ah
    int    29h
    xchg    al,ah
    int    29h
    loop    gsn
    ret

    getsernum:
    mov    ah,9
    mov    dx,offset msg10
    int    21h
    mov    cx,9
    mov    si,offset buffer+14h
    gsn1:
    lodsw
    xchg    al,ah
    int    29h
    xchg    al,ah
    int    29h
    loop    gsn1
    ret

    getbufcap:
    mov    ah,9
    mov    dx,offset msg11
    int    21h
    mov    ax,[word buffer+2ah]
    call    viewax
    mov    ah,9
    mov    dx,offset msg12
    int    21h
    ret

err1    db    'Controller not found !',10,13,36
msg1    db    10,13,'Detecting primary   HDD on 1-st controller',10,13,36
msg2    db    10,13,'Detecting secondary HDD on 1-st controller',10,13,36
msg3    db     10,13,'Detecting primary   HDD on 2-nd controller',10,13,36
msg4    db     10,13,'Detecting secondary HDD on 2-nd controller',10,13,36
msg5    db     10,13,'Cylinders on drive: ',36
msg6    db     10,13,'Heads on drive: ',36
msg7    db    10,13,'Sectors per track: ',36
msg8    db     10,13,'Disk name: ',36
msg9    db    10,13,'Sallary name: ',36
msg10    db    10,13,'Serial number: ',36
msg11    db    10,13,'Buffer capacity: ',36
msg12    db    ' Sectors',10,13,36
msg14    db    'LBA support: ',36
msg15    db    'Yes.',10,13,36
msg16    db    'No.',10,13,36
msg17    db    'Total user addressable sectors (LBA mode): ',36
msg13    db    10,13,'To view next controller press any key.',10,13,36
buffer:
    end
-----------------------------------------
У меня работает:)
                       Алексей Kолмаков.
--- TM-Ed 1.14+
 * Origin: -> По умолчанию <- (2:4600/63.204)

- NICE.SOURCES (2:5030/1334.67) -------------------------------- NICE.SOURCES -
 Msg  : 45 из 1318
 From : Dmitry Bulgakov                     2:5025/150.27   Вск 06 Авг 00 00:26
 To   : Oleg Skvernjuk                                      Чтв 10 Авг 00 02:22
 Subj : HDD s/n detection
-------------------------------------------------------------------------------
  Доброй ночи, Oleg!

 Четверг Август 03 2000, Oleg Skvernjuk -> All:
 OS> Господа, киньте кто-нить сырцом сабжа под win32 asm или с
 OS> использованием in/out

Який скорый =) Под чего - W9x или NT? Я это к чему - за доступ к портам хдд
тебе руки оторвут по любому, но по разному. Под NT по-моему можно открыть винт
как raw файл. Под W9x, если по-хорошему, то надо писать vxd. Однако можно
просто на время вываливаться на 0-е кольцо. Пример щаз вставлю.
Эта приблуда сделает тебе (должна по крайней мере =) ) файлик с инфой о винте.
Короче идею поймешь. Hе поймешь - в мыло ходи.


ъ щ - -- ---- Starting file /Windows Clipboard/ -------------------- - -щ ъ

; Определение параметров винта для W95/W98.
; Для вывала на нулевое кольцо используем метод IDT, (C) WIN.CIH =)
; Под HТ ессно не работает.

.386p
                locals
                jumps

.model flat, stdcall

extrn           ExitProcess: proc

.data
IDTR            df      0 я я я ; для содержимого регистра IDTR
SavedGate       dq      0 я я   ; старый дескриптор
OurGate         dw      0 я я я ; собственно, наш шлюз:
я я я я я я я я я я             ; младшее cмещение
                dw      028h я я; селектор
                dw      0EE00h я; атрибуты
                dw      0 я я я ; старшее слово смещения
                                ; насчет селектора - можно быть уверенным что
                                ; 028h адресует все 4Гб

IDEdata         dw      256 dup (0)

; Для записи в файл
FileName        db      'hdd_info.dat', 0
HFILE           dd      0
FileStruct      label           ; см. структурку "OFSTRUCT"
cBytes          db      ?
fFixedDisk      db      ?
nErrCode        dw      ?
Reserved1       dw      ?
Reserved2       dw      ?
szPathName      db      256 dup (0)

;---------------------------------------------------------------------------
;
;

.code

Start:
                mov     eax, offset Ring0Proc   ; адрес функции, которую
                                                ; нужно вызвать в кольце 0
                ; строим дескриптор
                mov     [OurGate], ax я я       ; заполняем в дескрипторе
                                                ; младшее слово смещения
                shr     eax, 16
                mov     [OurGate+6], ax я я я   ; заполняем старшее слово
                                                ; смещения
                sidt    fword ptr IDTR я я я    ; загружаем регистр IDTR
                mov     ebx, dword ptr [IDTR+2] ; получаем базовый адрес IDT
                add     ebx, 8*9 я я я я я я я  ; получаем дескриптор 9
                                                ; прерывания
                mov     edi, offset SavedGate
                mov     esi, ebx
                movsd я я я я я я я я я я       ; сохраняем старый дескриптор
                movsd я я я я я я я я я я       ; в SavedGate
                mov     edi, ebx
                mov     esi, offset OurGate
                movsd я я я я я я я я я я       ; заменяем его на наш
                                                ; дескриптор
                movsd
                push    ebx
                int     9h я я я я я я я я я я  ; Вызываем исключение

                ; Возврат из исключения
                pop     edi
                mov     esi, offset SavedGate
                movsd я я я я я я я я я я       ; восстанавливаем старый
                                                ; дескриптор
                movsd

                call    OutFile
                call    ExitProcess, 0FFFFFFFFh

; --------------------------------------------------------------------------
;
;  0-е кольцо!
;
Ring0Proc       proc

                cli
                mov     dx, 01F7h       ; Primary
                ; Ждем готовность контроллера
                mov     ah, 050h
                call    WaitIDE
                jc      @@Timeouted     ; Hет ответа
                ; Выбираем винт
                dec     dx
                mov     al, 0A0h        ; Master, 0B0 для Slave
                out     dx, al
                inc     dx
                mov     al, 0ECh        ; Запрос данных о устройстве
                out     dx, al
                ; Ждем готовность данных
                mov     ah, 058h
                call    WaitIDE
                jc      @@Timeouted     ; Hет ответа
                ; Читаем "сектор"
                sub     dx, 7
                mov     edi, offset IDEdata
                mov     ecx, 256
                cld
                rep     insw
                sti

                ; Выход
@@Timeouted:
                mov     eax, CR0
                iretd я я я я я я я я я я       ; именно так, а не iret
Ring0Proc       endp
;-----------------------------------------------------------------------
WaitIDE:
                mov     ecx, 0FFFFFFFFh
                mov     dx, 01F7h        ; Primary
@@WaitNotBusy:  in      al, dx
                cmp     al, ah
                clc
                jz      @@IDEReady
                dec     ecx
                jnz     @@WaitNotBusy
                stc                      ; Timeout!
@@IDEReady:     ret

;----------------------------------------------------------------------
; вспомогательная бредятина...
;
extrn           OpenFile: proc
extrn           _lwrite:  proc
extrn           _lclose:  proc

OutFile:
                push    000001000H     ; OF_CREATE
                push    offset FileStruct
                push    offset FileName
                call    OpenFile
                add     esp, 4
                mov     HFILE, eax

                push    00000200h
                push    offset IDEdata
                mov     eax, HFILE
                push    eax
                call    _lwrite

                mov     eax, HFILE
                push    eax
                call    _lclose

                ret

end Start
ъ щ- - -------------------- File /Windows Clipboard/ stopped ----- -- - щ ъ



                              Счастливо!
                                              Дмитрий.
-------------------- - -щ ъ                                  ъ щ - -- ----
... У соседа снова праздник - вас впервые не зовут...
--- -                                   E-mail: dn@dim.comch.ru      - ---
 * Origin: ... Я их тоже не очень люблю. (2:5025/150.27)

  

Rambler's Top100 Rambler's Top100 NET's Top100