Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Get Serial Number HDD / C++ -> Delphi

Привет всем.

Хочу поблагодарить всех, кто откликнулся на мой призыв о помощи
Определения серийных номеров Биоса и Винта, и тех, кто присылал мне
различные варианты исходников. Всю информацию я взял на вооружение.
;-)
Я предлагаю следующее, я напишу маленькую программу, которая будет
защищена этим большим алгоритмом с криптографией (ну на сколько мне
хватит духу и мозгов), и выложу ее всем желающим принять участие в ее
тестировании на надежность защиты алгоритма и программы в целом.
Если найдутся желающие попробовать свои силы во взломе алгоритма, т.е.
программы, пишите мне на личный ящик.

Но для начала...
Мне тут сегодня прислали исходник на С++ программульки, которая
вытягивает заводские и физические данные из винтов под любой Виндой и
правами пользователей (сам лично проверил, работает на 99,999%).
Так как я плохо еще владею С++/Билдер, я взываю о помощи:
помогите кто-нибудь, переведите исходник на Делфи рабочий вариант, что
бы такая же прога была и на Делфи. Результат исходников обещаю
выложить на все общее обозрение. Перевод с С++ на Делфи надо выполнить
в ближайшие 2-3 дня, то бишь за выходные.
Помогите, пожалуйстааа.

С Ув. Feniks mailto: feni***@b*****.ua
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Feniks Fri, 16 Jan 2004 15:15:23 +0200 (#56420)

 

Ответы:

Привет!
Я так понял, что ты решил меня не тревожить...
Или ты просто забыл отправить С++ сорцы?
Я просто так, чтоб мессага не затерялась.

Ответить   Sun, 18 Jan 2004 14:06:16 +0200 (#57539)

 

Прошу простить, меня не было в городе с 18 числа тока вернулся.
напомни, что выслать?

С уважением monah
janal***@n*****.ru

Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Sat, 31 Jan 2004 17:11:24 +0600 (#67911)

 

(Конфе наверное тоже небезынтересно будет)

Feniks - приветствую! Не поделишься исходниками на С++ по определению
серийного номера винта? Если еще актуально, могу попробовать помочь
с переводом на Delphi

P.S. Ты не научился читать BIOS ID? У меня пока только следующие варианты:

1а. Win95 - чтение памяти напрямую, чтоб без Violation'ов лучше так:
if ReadProcessMemory(GetCurrentProcess, Pointer($FFFF5), @s[1], 8, n) then
...
1б. в Win2000 - если запустить DOS-приложение, оно может читать память BIOS
... var BiosDate: array[1..8] of Char absolute $F000:$FFF5 ...
WriteLn(BiosDate);
2а. Win95 - реестр: HKEY_LOCAL_MACHINE\Enum\Root\*PNP0C01\0000\BIOSDate
2б. WinNT - реестр:
HKEY_LOCAL_MACHINE\Hardware\Description\System\SystemBiosDate
2в. через WMI - но тоже читает из реестра...
3. можно еще писать драйвер, который сможет читать физическую память - но не
хочется..
http://www.compress.ru/Temp/1125/index.htm
4. остается читать из аппаратуры - как?
HardInfo 1.1 By Wang Jianhua на http://www.torry.net/systeminfo.htm умеет

P.P.S. Еще интересная инфа - как привязывается к компу Microsoft:
- серийный номер системного тома,
- MAC-адрес сетевой платы,
- идентификатор устройства чтения CD-ROM дисков,
- серийный номер процессор,
- идентификаторы графического адаптера,
- жесткого диска,
- адаптера SCSI,
- контроллера IDE,
- а также модели процессора
- и объема оперативной памяти.
- Кроме того, для переносных компьютеров проверятся возможность стыковки с
доком
http://www.itunion.ru/news/index.phtml?act=show&tid=4&fid=639

P.P.P.S. Возможно, будут интересны исходники для определения идентификатора
и
(с PIII) СЕРИЙНОГО номера процессора, тактовой частоты процессора
[вызывать CPUIdInfo и GetCPUSpeed]

{Флаг доступности процессора, идентификатор процессора, имя поставщика и
тип, семейство, модель, шаговость процессора, серийный номер, взятые
из идентификатора}
type
TCPUId = array[1..4] of DWORD;
TCPUVendor = array[0..11] of Char;
TCPUSerial = array[1..2] of DWORD;
TCPUSerialNumber = array[1..3] of DWORD;
TCPUIdInfo = record
IsAvailable: Boolean;
CPUId: TCPUId;
CPUVendor: TCPUVendor;
CPUType: Byte;
CPUFamily: Byte;
CPUModel: Byte;
CPUStepping: Byte;
IsSerialAvailable: Boolean;
CPUSerial: TCPUSerial;
CPUSerialNumber: TCPUSerialNumber;
end;

{Возвращает информацию об идентификаторе процессора, если CPUId, CPUSerial,
CPUSerialNumber недоступны, заполняет их числами $FF, остальные параметры
заполняет нулями}
function GetCPUIdInfo: TCPUIdInfo;

{Возвращает строку с информацией о процессоре вида:
Vendor:CPUVendor-CPUID-CPUSerial, например,
GenuineIntel-0000068A-00000002-00000000-0387F9FF-0000C30C-9C8895C0,
если информация недоступна, возвращает пустую строку}
function CPUIdInfoToStr(const Info: TCPUIdInfo): string;

{Возвращает CPUIdInfoToStr(GetCPUIdInfo)}
function CPUIdInfo: string;

{Возвращает примерную частоту процессора}
function GetCPUSpeed: Double;

function GetCPUIdInfo: TCPUIdInfo;
var
i: Integer;
{}
function IsCPUIdAvailable: Boolean; assembler;
const
ID_BIT = $200000; {EFLAGS ID bit}
asm
PUSHFD {access to flags - only via stack}
POP EAX {flags to EAX}
MOV EDX,EAX {save current flags}
XOR EAX,ID_BIT {not ID bit}
PUSH EAX {onto stack}
POPFD {from stack to flags, with not ID bit}
PUSHFD {back to stack}
POP EAX {get back to EAX}
XOR EAX,EDX {check if ID bit affected}
JZ @@exit {no, CPUID not availavle}
MOV AL,True {Result=True}
@@exit:
end;
{}
function GetCPUId: TCPUId; assembler;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result}
MOV EAX,1
DW $A20F {CPUID Command}
STOSD {CPUID[1]}
MOV EAX,EBX
STOSD {CPUID[2]}
MOV EAX,ECX
STOSD {CPUID[3]}
MOV EAX,EDX
STOSD {CPUID[4]}
POP EDI {Restore registers}
POP EBX
end;
{}
function GetCPUVendor: TCPUVendor; assembler;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result (TCPUVendor)}
MOV EAX,0
DW $A20F {CPUID Command}
MOV EAX,EBX
XCHG EBX,ECX {save ECX result}
MOV ECX,4
@@1: STOSB
SHR EAX,8
LOOP @@1
MOV EAX,EDX
MOV ECX,4
@@2: STOSB
SHR EAX,8
LOOP @@2
MOV EAX,EBX
MOV ECX,4
@@3: STOSB
SHR EAX,8
LOOP @@3
POP EDI {Restore registers}
POP EBX
end;
{}
function GetSerial: TCPUSerial; assembler;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result}
MOV EAX,3
DW $A20F {CPUID Command}
MOV EAX,EDX
STOSD
MOV EAX,ECX
STOSD
POP EDI {Restore registers}
POP EBX
end;
{}
begin
FillChar(Result, 0, SizeOf(Result));
for i := Low(Result.CPUId) to High(Result.CPUId) do
Result.CPUId[i] := DWORD(-1);
for i := Low(Result.CPUSerial) to High(Result.CPUSerial) do
Result.CPUSerial[i] := DWORD(-1);
for i := Low(Result.CPUSerialNumber) to High(Result.CPUSerialNumber) do
Result.CPUSerialNumber[i] := DWORD(-1);
Result.IsAvailable := IsCPUIdAvailable;
if Result.IsAvailable then
begin
Result.CPUId := GetCPUId;
Result.CPUType := (Result.CPUId[1] shr 12) and $03;
Result.CPUFamily := (Result.CPUId[1] shr 8) and $0F;
Result.CPUModel := (Result.CPUId[1] shr 4) and $0F;
Result.CPUStepping := Result.CPUId[1] and $0F;
Result.CPUVendor := GetCPUVendor;
Result.IsSerialAvailable := (Result.CPUId[4] and $20000 <> 0);
if Result.IsSerialAvailable then
Result.CPUSerial := GetSerial;
Result.CPUSerialNumber[1] := Result.CPUId[1];
Result.CPUSerialNumber[2] := Result.CPUSerial[1];
Result.CPUSerialNumber[3] := Result.CPUSerial[2];
end;
end;

function CPUIdInfoToStr(const Info: TCPUIdInfo): string;
begin
if not Info.IsAvailable then
Result := ''
else
Result := Info.CPUVendor + '-' +
IntToHex(Info.CPUId[1], 8) + '-' +
IntToHex(Info.CPUId[2], 8) + '-' +
IntToHex(Info.CPUId[3], 8) + '-' +
IntToHex(Info.CPUId[4], 8) + '-' +
IntToHex(Info.CPUSerial[1], 8) + '-' +
IntToHex(Info.CPUSerial[2], 8);
end;

function CPUIdInfo: string;
begin
Result := CPUIdInfoToStr(GetCPUIdInfo);
end;

function GetCPUSpeed: Double;
const
DelayTime = 500;
var
timer_hi, timer_lo, prev_priority_class, prev_priority: DWORD;
begin
prev_priority_class := GetPriorityClass(GetCurrentProcess);
prev_priority := GetThreadPriority(GetCurrentThread);
try
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10);
asm
DW 310Fh {RDTSC}
MOV timer_lo,EAX
MOV timer_hi,EDX
end;
Sleep(DelayTime);
asm
DW 310Fh {RDTSC}
SUB EAX,timer_lo
SBB EDX,timer_hi
MOV timer_lo,EAX
MOV timer_hi,EDX
end;
finally
SetThreadPriority(GetCurrentThread, prev_priority);
SetPriorityClass(GetCurrentProcess, prev_priority_class);
end;
Result := timer_lo / (1000 * DelayTime);
end;
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   "VladS" Sat, 31 Jan 2004 15:19:37 +0300 (#67946)

 

Хороший сайт http://www.delphibbs.com ! Если бы не язык... ;)

Все (почти :) ) возможные способы чтения HDD Serial на Delphi, включая
ScsiPassThrough, выход на 0 кольцо в Win9x, чтение серийника USB [правда у
себя их не использую :) ; кстати - так и не понял, когда нужен
ScsiPassThrough (когда не будут работать другие способы?), какой способ
работает в Win2003?]
http://www.delphibbs.com/keylife/iblog_show.asp?xid=3048

Чтение памяти BIOS в WinNT/2000 (я был прав - ZwOpenSection работает не
только из драйверов, но и из приложений, причем даже без админских прав)
http://www.delphibbs.com/keylife/iblog_show.asp?xid=3080

За сим раскопки инфы по теме привязки ПО к компьютеру можно считать, в
целом, законченными (хотя... и если кто-то еще чего добавит из опыта - будет
здорово;
например, интересно - какой HDD Serial определится при работе ПО в системе с
зеркальными дисками, т.е. если одному логическому диску соответствуют два
физических, копии друг друга?; а если один диск погибнет? (штатная вроде для
такой системы ситуация))
Номер выпуска : 1777
Возраст листа : 138
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/73343
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   "VladS" Fri, 6 Feb 2004 17:00:50 +0300 (#73343)

 

Здравствуйте, VladS.

Вы писали 6 февраля 2004 г., 16:00:50:

у

будет

с

два

Большое спасибо за инфу и за все доки и исходники которые ты мне прислал.
На следующей недели начинаю работать над этим проектом: создания
алгоритма по привязки ПО к компу и генерации ключа для регистрации ПО.
Желающие присоединиться могут подключатся.
Уже есть несколько человек. ;-)

С уважением,
Feniks mailto: feni***@b*****.ua
Номер выпуска : 1779
Возраст листа : 138
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/73376
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Feniks Fri, 6 Feb 2004 16:35:17 +0200 (#73376)