Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Вниз

Защита программы   Найти похожие ветки 

 
Митяй   (2003-11-14 16:51) [0]

Господа! Кто знает как, занести в переменную номер жёсткого диска, мобуть какая функция есть?
В общем как мне выдрать этот номер в мою программу?
С уважением, Митяй.


 
DVM   (2003-11-14 18:34) [1]

Ищи в форуме, ссылка была не очень давно. Кажется, автор - Коншин.


 
TUser   (2003-11-14 19:05) [2]

Не так давно, в "Основной" обсуждали способы защиты. Короче, привязывать к номеру винта - не самое оптимальное решение.


 
Митяй   (2003-11-14 19:21) [3]


>
> TUser © (14.11.03 19:05) [2]
> Не так давно, в "Основной" обсуждали способы защиты. Короче,
> привязывать к номеру винта - не самое оптимальное решение.

А к чему тогда привязать, к ID компа жестоко, если юзер переустановит винду(насколько мне известно) ID поменяется, и тогда ой...


 
Kotka   (2003-11-14 19:30) [4]

Ты думаешь номер жесткого диска не меняется?


 
Митяй   (2003-11-14 19:36) [5]


> Kotka © (14.11.03 19:30) [4]
> Ты думаешь номер жесткого диска не меняется?

Меняется, но по моим посчётам, гораздо реже ID.


 
esVer   (2003-11-14 22:13) [6]

Привязка к железу вообще неоптимальное решение.
Лично я даже покупать бы такую программу не стал бы...
Если программа бесплатная, то не зачем придумывать проблем на свою голову. Ежели планируете "срубить бабло", то AsPack и Execryptor вам в помощь...


 
DeadMeat   (2003-11-14 22:34) [7]

> Ежели планируете "срубить бабло", то AsPack и Execryptor вам в помощь...
Не есть оптимальное решение... Не знаю как насчёт Execryptor, но по AsPack-у и схожих с ним, в NET-е куча статей по кряку... ИМХО Лучше чего нибудь своё... Дольше может продержаться...


 
esVer   (2003-11-14 23:46) [8]

Важно не только чем защищаешь программу, но и как защищаешь программу. Одним и тем же инструментом можно пользоваться по разному. Зашифрованный кусок кода можно "отломать", но заставить его выполнятся...? В результате будете иметь работоспособный exe, но вот будет ли он делать то, на что вы рассчитываете?...
В общем, проблема не для этой конференции, и явно не для Митяя, поскольку, человек, хотя бы минимально знакомый с проблемой защиты программы не стал бы задавать таких вопросов.


 
DeadMeat   (2003-11-14 23:49) [9]

Кстати я уже поднимал подобный вопрос..., но правда давно....
> Митяй ©
поищи где-то в архивах...


 
Talla2k   (2003-11-15 00:22) [10]

Ну вот получай (на D5,если на другие платформы измени Dword)

var VolumeName,
FileSystemName : array [0..MAX_PATH-1] of Char;
VolumeSerialNo : DWord;
MaxComponentLength,
FileSystemFlags : DWord;
begin
GetVolumeInformation("c:\",VolumeName,MAX_PATH,@VolumeSerialNo,
MaxComponentLength,FileSystemFlags,
FileSystemName,MAX_PATH);
bsskinedit1.text:=inttostr(VolumeSerialNo);
...


 
DeadMeat   (2003-11-15 00:30) [11]

Прикольно конечно..., но после первого же Format Ы: этот номерочек поменяется... Если уж решили брать серийник винта, так берите его реальный, "зашитый" (или производственный, или какой-то там ещё...), который не меняется...


 
Kotka   (2003-11-15 15:55) [12]

>DeadMeat © (15.11.03 00:30) [11]
А как, не подскажешь?


 
DeadMeat   (2003-11-15 18:53) [13]

Выдержка из одной старой веточки:

XAli (29.04.03 18:39)
Лови, Удачи!
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Поличение серийного номера IDE диска.
Функция получает серийный номер первого физического диска IDE (не серийный номер тома!).
Используется S.M.A.R.T. API, а под Windows NT/2K/XP запрос производится не напрямую к диску, а через miniport драйвер контроллера, что позволяет читать серийный номер не имея прав администратора.
Функция может не работать, если первый контролер в системе не ATA или если первое устройство не является винчестером, который поддерживает SMART (современные винчестеры поддерживают).
Если Вы хотите получить другие параметры диска/других дисков, то смотрите пример IdeInfo2 с моего сайта.
На Windows 9x требует наличия драйвера smartvsd.vxd (должен быть в стандартной поставке), просто скопируйте его в \windows\system\iosubsys и перезагрузите компьютер.

Зависимости: Windows, SysUtils
Автор: Alex Konshin, akonshin@earthlink.net, Boston, USA
Copyright: http://home.earthlink.net/~akonshin/index.htm
Дата: 30 декабря 2002 г.

пример
var s : String;
rc : DWORD;
begin
s := GetIdeDiskSerialNumber;
if s="" then
begin
rc := GetLastError;
if rc=0 then WriteLn("IDE drive is not support SMART feature")
else WriteLn(SysErrorMessage(rc));
end
else WriteLn("Disk serial number: """, s,"""");
end.

***************************************************** }

function GetIdeDiskSerialNumber : String;
type
TSrbIoControl = packed record
HeaderLength : ULONG;
Signature : Array[0..7] of Char;
Timeout : ULONG;
ControlCode : ULONG;
ReturnCode : ULONG;
Length : ULONG;
end;
SRB_IO_CONTROL = TSrbIoControl;
PSrbIoControl = ^TSrbIoControl;

TIDERegs = packed record
bFeaturesReg : Byte; // Used for specifying SMART "commands".
bSectorCountReg : Byte; // IDE sector count register
bSectorNumberReg : Byte; // IDE sector number register
bCylLowReg : Byte; // IDE low order cylinder value
bCylHighReg : Byte; // IDE high order cylinder value
bDriveHeadReg : Byte; // IDE drive/head register
bCommandReg : Byte; // Actual IDE command.
bReserved : Byte; // reserved for future use. Must be zero.
end;
IDEREGS = TIDERegs;
PIDERegs = ^TIDERegs;

TSendCmdInParams = packed record
cBufferSize : DWORD; // Buffer size in bytes
irDriveRegs : TIDERegs; // Structure with drive register values.
bDriveNumber : Byte; // Physical drive number to send command to (0,1,2,3).
bReserved : Array[0..2] of Byte; // Reserved for future expansion.
dwReserved : Array[0..3] of DWORD; // For future use.
bBuffer : Array[0..0] of Byte; // Input buffer.
end;
SENDCMDINPARAMS = TSendCmdInParams;
PSendCmdInParams = ^TSendCmdInParams;

TIdSector = packed record
wGenConfig : Word;
wNumCyls : Word;
wReserved : Word;
wNumHeads : Word;
wBytesPerTrack : Word;
wBytesPerSector : Word;
wSectorsPerTrack : Word;
wVendorUnique : Array[0..2] of Word;
sSerialNumber : Array[0..19] of Char;
wBufferType : Word;
wBufferSize : Word;
wECCSize : Word;
sFirmwareRev : Array[0..7] of Char;
sModelNumber : Array[0..39] of Char;
wMoreVendorUnique : Word;
wDoubleWordIO : Word;
wCapabilities : Word;
wReserved1 : Word;
wPIOTiming : Word;
wDMATiming : Word;
wBS : Word;
wNumCurrentCyls : Word;
wNumCurrentHeads : Word;
wNumCurrentSectorsPerTrack : Word;
ulCurrentSectorCapacity : ULONG;
wMultSectorStuff : Word;
ulTotalAddressableSectors : ULONG;
wSingleWordDMA : Word;
wMultiWordDMA : Word;
bReserved : Array[0..127] of Byte;
end;
PIdSector = ^TIdSector;

const
IDE_ID_FUNCTION = $EC;
IDENTIFY_BUFFER_SIZE = 512;
DFP_RECEIVE_DRIVE_DATA = $0007c088;
IOCTL_SCSI_MINIPORT = $0004d008;
IOCTL_SCSI_MINIPORT_IDENTIFY = $001b0501;
DataSize = sizeof(TSendCmdInParams)-1+IDENTIFY_BUFFER_SIZE;
BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize;
W9xBufferSize = IDENTIFY_BUFFER_SIZE+16;
var
hDevice : THandle;
cbBytesReturned : DWORD;
pInData : PSendCmdInParams;
pOutData : Pointer; // PSendCmdInParams;
Buffer : Array[0..BufferSize-1] of Byte;
srbControl : TSrbIoControl absolute Buffer;//


 
DeadMeat   (2003-11-15 18:54) [14]

XAli (29.04.03 18:40)
// продолжение...
procedure ChangeByteOrder( var Data; Size : Integer );
var ptr : PChar;
i : Integer;
c : Char;
begin
ptr := @Data;
for i := 0 to (Size shr 1)-1 do
begin
c := ptr^;
ptr^ := (ptr+1)^;
(ptr+1)^ := c;
Inc(ptr,2);
end;
end;

begin
Result := "";
FillChar(Buffer,BufferSize,#0);
if Win32Platform=VER_PLATFORM_WIN32_NT then
begin // Windows NT, Windows 2000
// Get SCSI port handle
hDevice := CreateFile( "\\.\Scsi0:", GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL);
System.Move("SCSIDISK",srbControl.Signature,8);
srbControl.Timeout := 2;
srbControl.Length := DataSize;
srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY;
pInData := PSendCmdInParams(PChar(@Buffer)+SizeOf(SRB_IO_CONTROL));
pOutData := pInData;
with pInData^ do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bFeaturesReg := 0;
bSectorCountReg := 1;
bSectorNumberReg := 1;
bCylLowReg := 0;
bCylHighReg := 0;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT, @Buffer,
BufferSize, @Buffer, BufferSize, cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
end
else
begin // Windows 95 OSR2, Windows 98
hDevice := CreateFile( "\\.\SMARTVSD", 0, 0, nil, CREATE_NEW, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
pInData := PSendCmdInParams(@Buffer);
pOutData := PChar(@pInData^.bBuffer);
with pInData^ do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bFeaturesReg := 0;
bSectorCountReg := 1;
bSectorNumberReg := 1;
bCylLowReg := 0;
bCylHighReg := 0;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA, pInData,
SizeOf(TSendCmdInParams)-1, pOutData, W9xBufferSize,
cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
end;
with PIdSector(PChar(pOutData)+16)^ do
begin
ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber));
SetString(Result,sSerialNumber,SizeOf(sSerialNumber));
end;
end;


 
DeadMeat   (2003-11-15 18:56) [15]

Но для полноты лучше посетить указанный выше сайт, и поискать среди архивов на 29.04.03
Удачи...



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.169 c
1-2196
Сережа
2004-01-20 21:38
2004.02.02
Таймер


1-2226
лошок
2004-01-20 15:21
2004.02.02
Как ограничить размер текстового файла


14-2275
Petr V. Abramov
2004-01-09 16:46
2004.02.02
Фоторепортаж с MMP


3-2027
user
2004-01-05 17:17
2004.02.02
что то не получается c sql запросом


1-2163
Sirakuz
2004-01-21 16:04
2004.02.02
Floating point IEEE format (80 bit) Как?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский