![]() |
|
Модераторы: bartram, Akella |
![]()
|
|
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Код драйверка, читающего серийный номер винчестера(именно тот, который длиной 256 слов !
; Программа для выдачи серийного номера жесткого диска. ; Выдает серийный номер жесткого диска в указнный буфер из 256 слов. ; Необходимо указать в autoexec.bat ее инсталляцию. ; Будучи загружена перед Windows 95/98, попадает в 0-кольцо защиты OS ; (указать в autoexec.bat) ; И потому способна корректно работать с портами ввода-вывода ЖД. ; Под DOS работает так же, как обычная программа, читающая порты ЖД. ; Поддерживает 2 функции (регистр AL): ; AL = 00h - INSTALLATION CHECK ; Если инсталлировна, то AL = FBh(Номер резерв. ф-ции), CF флаг сброшен ; AL = 01h - READ SERIAL DISK NUMBER ; В случае успешного чтения возвращает: ; - AL = FBh (Номер резерв. ф-ции), CF флаг сброшен; ; - В переданный буфер ES:DI читает серийный номер диска, буфер ; должен быть длиной 256 слов; ; Если чтение не удалось, то AL = FF и флаг CF установлен ; На другие значения в AL возвращает FF + установленный флаг CF .286 ; Команды процессора 286+ незащищенного режима HookedVector equ 13h ; Перехватываем вектор 13h - работа с диском BIOS OurFunction equ 0fbh ; Резервируем ф-цию 0fbh прерывания 13h для себя Drive equ 00h ; Видимо, номер жесткого диска (0,1,..) FuncNumber equ 2 ; Число поддерживаемых функций InstallCheck equ 0 ; Запрос на инсталляцию ReadSerial equ 1 ; Запрос на чтение серийного номера ErrorFunc equ 0ffh ; Ответ на ошибочный запрос cseg segment byte 'code' assume cs:cseg org 100h ; Обычный PSP com - программы begin: jmp Iniz ; Обойдем резидентный код messagekey proc near pushf ; Сохраним флаги вызывающей программы cmp ah,OurFunction jnz @NotOurFunction popf ; Парная команда к pushf в начале кода call Dispatcher ; Отработать возможные функции retf 2 ; Вернуться с установленными внутри флагами @NotOurFunction: popf ; Восстановим флаги вызывающей программы db 0eah ; код команды jmp far Old_13H dd ? ; На предидущий обработчик int 13h messagekey endp Dispatcher proc near push si xor si,si @FindFunc: cmp al,cs:Functions[si] jz @FuncFound inc si cmp si,FuncNumber jb @FindFunc pop si mov al,ErrorFunc stc retn @FuncFound: shl si,1 call word ptr cs:FuncOfs[si] pop si retn Dispatcher endp Functions db InstallCheck,ReadSerial FuncOfs dw offset Install, offset ReadInfo Install proc near mov al,OurFunction clc retn Install endp ReadInfo proc near pusha mov word ptr cs:Counter,0 @TryAgain: mov dx,03f6h mov al,0ah out dx,al ; outportb(0x3F6,0x0A) call Waiter @Wait1: mov dx,01f7h in al,dx call TimeOut test al,80h ; while(inportb(0x1F7)&0x80); jnz @Wait1 call Waiter mov dx,01f6h mov al,Drive shl al,4 add al,0a0h out dx,al ; outportb(0x1F6,0xA0+(drive<<4)); call Waiter @Wait2: mov dx,01f7h in al,dx call TimeOut test al,40h ; while(!(inportb(0x1F7)&0x40)); jz @Wait2 call Waiter mov dx,01f7h mov al,0ech out dx,al ; outportb(0x1F7,0xEC); call Waiter @Wait3: mov dx,01f7h in al,dx call TimeOut test al,08h ; while(!(inportb(0x1F7)&0x08)); jz @Wait3 call Waiter ; for(i=0; i<256; i++) infoArray[i] = swap(inportw(0x1F0)) (to es:[di]) mov cx,256 cld @FillBuf: call Waiter mov dx,01f0h in ax,dx xchg al,ah mov es:[di],ax ; es:[di] = ax, di:=di+2 inc di inc di loop @FillBuf mov dx,01f7h in al,dx call TimeOut test al,80h ; if(inportb(0x1F7)&0x80) continue; jz @ReadOK jmp @TryAgain @ReadOK:popa clc mov al,OurFunction retn TimeOut proc near inc word ptr cs:Counter jnz @TimeDone pop ax popa mov al,ErrorFunc stc @TimeDone: retn Counter dw 0 TimeOut endp ReadInfo endp Waiter proc near push cx xor cx,cx @Wait: loop @Wait pop cx retn Waiter endp Iniz proc assume ds:cseg push ds mov ax,(35H shl 8) + HookedVector int 21h ; Get old HookedVector to es:bx mov word ptr Old_13h,bx mov word ptr Old_13h+2,es mov dx,offset MessageKey mov ah,25h int 21H ; Set new Vector mov dx,offset Iniz int 27H ; Terminate and Stay Rezident Iniz endp cseg ends end Begin Пример вызова(из ДОС-приложения ! ; Проверить наличие драйвера: mov ax,0FB00h ; INSTALLATION CHECK ; Если инсталлировна, то AL = FBh(Номер резерв. ф-ции), CF флаг сброшен int 13h jc @@NotInstall cmp al,0FBh jnz @@NotInstall mov ax,0FB01h ; READ SERIAL DISK NUMBER les di,Buffer ; В переданный буфер ES:DI читает серийный номер диска int 13h jc @@ErrorRead ; ... -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 4 Всего: 207 |
Когда-то очень давно, в те времена когда полугигабайтный винт считался непозволительной раскошью, под ДОС занимался я изучением винта, напрямую читая дорожки и сектора (кажись 13 прерывание ДОС это было), оказалось что винт содержит на 1 дорожку больше чем написано в документации и видит Norton Disk Edit. Просто обращаясь к той дорожке нашел я много интересного - и информация о всяких серийных номерах и какая-то инфа от производителя и даже несколько чистых секторов, на которые можно чего записать (кстати в древности был неплохой русский редактор "Слово и дело" и кажись он туда ставил свою информацию о Trial)... Времена меняются, винты увеличились на 2 порядка, но может там та дорожка сохранилась и туда можно чего-нибудь написать?
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
К сожалению, никогда не слышал о таком "дополнительном" секторе винчестера ... Полагаю только, что его наличие связано с нестандартным форматированием (по крайней мере в алгоритмах защиты программ, связанных с привязкой к дискете, встречается сто пудов такое форматирование - например, в книге П.Нортона "IBM PS и PS/2: руководство пользователя" и т.п.). Попробую что-то разузнать про это ...
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 4 Всего: 207 |
Попробуй просто ввести номер дорожки на 1 больший максимального и прочитать...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Da, ia vot toje "Slovo i Delo" ispolzoval. Pontovaia bila shtuka.
A mojno li sdelat takuiu zashitu programm: ispolzovat seriyniy nomer vinta, kak kliuch v kakom-nibud shifre i zashifrovat im kakuiu nibud stroku. Potom pri starte rasshifrovivat seriynim nomerom etu stroku i esli ona rasshifrovalas pravilno, to prodoljit vipolnenie, esli net to "This is copy of Software. If you want use this program, buy it.". Ili uje takoe est? -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Chingachguk |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Так я так и познакомился с этим "серийным номером" - в конторе, где работал, исправлял ошибку у одной проги, которая именно так и "привязывалась" к нему. Только вот сам бы я так делать не стал: а если клиент винт поменяет - тогда как ?
Как я понимаю, нужно взять вторую сторону диска(вторую головку, если их считать с единицы) и прочесть на max_дорожка+1 первый сектор ? Параметры винта(число дорожек, на которое винт отформатирован) можно взять в BIOS ? -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
||||
|
|||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 4 Всего: 207 |
Именно так -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Полазил я по своему диску, много чего нового узнал, но ничего "такого" не нашел
Вот как мой диск устроен: Сначала на цилиндре(дорожке) 0, головке 0 идут свободные (63 штуки) сектора, сектор 0/0/1 - mbr; Потом с цилиндра 0, головка 1, сектор 1 начинается активный раздел(у меня он один) и заканчивается на цилиндре 583(всего их 584, если с нуля считать), головке 63(тоже с нуля), секторе 63. Потом идет один свободный цилиндр(584), но на нем сначала сектора заполнены нулями, потом (головки ~48..63) - байтами 6D B6 6D B6 ... - и так до конца. Вот и все, что доступно через интерфейс БИОС(прерывание 13h). Винда вообще дает читать только сектора активного раздела>... -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 4 Всего: 207 |
Мда! Когда я лазил 4-5 лет назад - структура была довольно сильно отличной, но это-то понятно - объем вырос на 2 порядка...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
![]()
|
| Правила форума "Windows" | |
|
|
Запрещается! 1. Обсуждать взлом и делиться кряками 2. Способствовать созданию и распространению вирусов
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS Windows | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |