- 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)
|
|