і]
АВТОМАТИКА
І
1. Использование USB флзшки по
прямому назначению - для хранения
и переноса информации
2. Один и тот же ключ можно ис-
пользовать для доступа к рабочей
машине, домашнему компьютеру и
ноутбуку
3. Имеется встроенное средство
хеширования идентификатора ключа
4. Не нужно помнить пароль от
вашей системы
5. Ваша информация в безопас-
ности, поскольку сами пароли не со-
держатся на USB накопителе
6. Автоматическая блокировка,
если вы отошли от компьютера. При
отключени USB ключа срабатывает
блокировка Windows. Вернулись,
подключили ключ к компьютеру, и вы
снова в работе
7. Контроль USB носителей. Ком-
понент может запрещать чтение -
запись с USB носителей для блоки-
рования выноса информации из ком-
пании
Разработка ПО
и средства отладки
Как известно, метод защиты
HASP основан на привязке про-
граммы к некоему или совокупно-
сти уникальных параметров ключа
и даже оборудования. Так как мы
будем использовать устройство
USB, то априори достаточно счи-
тать серийник и ID флешки**, по-
скольку они не меняются при их
форматировании.
Итак, приступим к основной за-
даче. Для работы необходимо сле-
дующее:
среда Borland Delphi 5-7
утилита Dependency Walker из
комплекта Visual C++ 6.0 [2, 5]
В средах NT/XP информацию о
устройствах.предоставляет стан-
дартная системная библиотека
SetupApi.dll. Чем и воспользуем-
ся.
.. Рассмотрим экспортируемые
ею функции с помощью Dependency
Walker, и для удобства разработчика
встроим в компонент (в дальнейшем
он будет использоваться как базис
механизма защиты) (вставка 1).
**
не все флеш-накопители име-
ют
данный номер, к примеру не-
которые ЧИПЫ ОТ 1-в
Радиолюбитель - 0 6 /2 0 0 8 ]]
Экспортируемые ф ункции
вставка 1
СМ_Get. Device, IDA:function(dnDevlnst: DWORD;
Buffer: PGh т;
BufferLen: DWORD;
ulFlags: DWORD): DWORD; stdcall;
SetupDiGetClassDevsA:function(ClassGuid: PGUID;
Enumerator: PChar;
hwndParent: HWND;
Flags: DWORD): HDEVINFO; stdcall;
SetupDiEnumDevicelnfo:function(DevicelnfoSet: HDEVINFO;
Memberlndex: DWORD;
DevicelnfoData: PSP DEVINFO. DATA): boolean; stdcall;
SetupDiDestroyDevicelnfoList:function(DevicelnfoSet: HDEVINFO): boolean; stdcall;
CM_Get_Device_ID_Size:function(pulLen: PDWORD;
dnDevInst: DWORD;
ulFlags: DWORD): DWORD; stdcall;
SetupDiCallClasslnstaller.function(lnstallFunction: DWORD;
DevicelnfoSet: DWORD;
DevicelnfoData: PSP. DEVINFO DATA): BOOL; stdcall;
SetupDiGetDeviceRegistryPropertyA:function(DevicelnfoSet: DWORD;
DevicelnfoData: PSP DEVINFO_DATA;
Propertys: DWORD;
PropertyRegDataType: PWORD;
PropertyBuffer: PByte;
PropertyBufferSize: DWORD;
RequiredSize: PWORD): BOOL; stdcall;
SetupDiSetClasslnstallParamsA:function(DevicelnfoSet: DWORD;
DevicelnfoData: PSP. DEVINFO DATA;
ClassInstallParams: PSP_CLASSINSTALL_HEADER;
ClassInstallParamsSize: DWORD): BOOL; stdcall; FLib: THandle;
для их использования - ocv:._,ocibhm динамическое их подключение
в компоненте
function LinkProc(ProcName: string) : Pointer;
begin
try
result:= GetProcAddress(FLib,PChar(ProcName));
Win32Check(Assigned(Result))
except end
end;
CM_Get__Device_IDA
SetupDiGetClassDevsA
SetupDiEnumDevicelnfo
SetupDiDestroyDevicelnfoList
CM .G et. Device_ID_Size
SetupDiCallClassInstailer
SetupDiGetDeviceRegistryPrapertyA
SetupDiSetClassInstallParamsA
при создании компонента инициализируем опрос USB:
var Info: TDevBroadcastDevicelnterface; //интерфейс-
Info.dbcc^size := SizeOf(DEV_BROADCAST. DEVICEINTERFACE);
lnfo.dbcc_devicetype := DBTDEVTYPJDEVICEINTERFACE;
lnfo.dbcc_classguid := FCIassGUID;
FNotifyHandle :- RegisterDeviceNotification(FWnd,@lnfo,DEVICE_NOTIFY_WINDOW_HANDLE)t
// таймер на CountDiskEnum
ftim er:= ttimer.Create(self);
ftim er.Enabled := false;
ftim er.interval:- FPoolInglnterval;
ftimer.ontimer := tmr;
ftimer.Enabled := true -
= LinkProc(“CM_Get_DeviceJDA");
= LinkProcfSetupDiGetClassDevsA“);
= LinkProc(“SetupDiEnumDevicelnfa”);
= LinkProc(“SetupDiDestroyDevicelnfoList”);
= LinkProc(“CM_Get. Device JD_Size”);
= LinkProc(“SetupDiCallClasslnstaller”);
= LinkProc(“SetupDiGetDeviceRegistryPropertyA”);
= LinkProcfSetupDiSetClasslnstallParamsA”);
19
предыдущая страница 19 Радиолюбитель 2008-06 читать онлайн следующая страница 21 Радиолюбитель 2008-06 читать онлайн Домой Выключить/включить текст