Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2010, 00:49   #1
exetor
Новичок
Джуниор
 
Регистрация: 14.09.2010
Сообщений: 2
По умолчанию ЗАЩИТА ПО с привязкой к железу

Паскаль с большего изучен, курсовую сам сделал, все хорошо и тут резко задание на дэлфи. Довольно резкий переход, нужна помощь!

Разработать и реализовать алгоритм защиты произвольной программы на уровне аппаратных средств, т.е. алгоритм защиты должен использовать произвольный элемент аппаратной базы (номер или размер жесткого диска, аппаратные hasp- или flash-ключи и многое другое).
Есть что то похожее, программа работающая только при вставленной ключ-дискете, вот пример ее:

Код:
unit UnitHardwareProtect;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls;

type
  TMainForm = class(TForm)
    Memo: TMemo;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

//Как проверить готовность диска A:
function DiskInDrive(const Drive: char): Boolean;
var
  DrvNum: byte;
  EMode: Word;
begin
  result := true;
  DrvNum := ord(Drive);
  if DrvNum >= ord('a') then dec(DrvNum,$20);
  EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    while DiskSize(DrvNum-$40) = -1 do begin // ПРи неудаче выводим диалог
      if (Application.MessageBox('Диск не готов...'+chr(13)+chr(10)+
          'Повторить?',PChar('Диск '+UpperCase(Drive)),mb_OKCANCEL+
           mb_iconexclamation{IconQuestion})=idcancel) 
      then begin         
        Result:=false;
        Break;
      end;
    end;
  finally
    SetErrorMode(EMode);
  end;
end;

// проверка защиты при отображении окна формы
procedure TMainForm.FormShow(Sender: TObject);
begin
   if  DiskInDrive('a') then                   // дискета в дисководе
   begin
       if not FileExists('a:\hardware.key') then   // файл-ключ на дискете
       begin
         MessageDlg('Внимание! Файл-ключ на дискете отсутствует.',            
                     mtError,[mbOk],0);
         Close;
       end;
   end
   else                                       // дискеты нет в дисководе
   begin
       MessageDlg('Внимание! Вставьте ключ-дискету в дисковод.'+#10#13+
       'Вы являетесь незарегистрированным пользователем.'+#10#13+
       'Программа будет закрыта. ЗАРЕГИСТРИРУЙТЕСЬ.',mtError,[mbOk],0);
       Close;
   end;
end;

end.
Задачу за меня делать не требуется, нужно лишь помочь подсказать какие модули могут вытаскивать ID железяки и как заветный модуль применить в этом листе.

Последний раз редактировалось Stilet; 18.09.2010 в 12:04.
exetor вне форума Ответить с цитированием
Старый 18.09.2010, 01:13   #2
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

Серийный номер и тип винчестера:
Цитата:
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure EnumHDDSerials(List:TStrings);
type
TSendCmdInParams=packed record
cBufferSize:DWORD;
irDriveRegsacked record
bFeaturesReg:Byte;
bSectorCountReg:Byte;
bSectorNumberReg:Byte;
bCylLowReg:Byte;
bCylHighReg:Byte;
bDriveHeadReg:Byte;
bCommandReg:Byte;
bReserved:Byte;
end;
bDriveNumber:DWORD;
end;
var
Drive,A:Integer;
Handle:THandle;
Readed:Cardinal;
Bufferacked record
InData:TSendCmdInParams;
Res1:array[0..4] of DWORD;
Serial:array[0..19] of AnsiChar;
Res2:array[0..471] of Byte;
end;
begin
for Drive:=0 to 15 do begin//тут по хорошему должно быть SysInfo.DiskCount-1 полученное через NtQuerySystemInformation(SystemConf igurationInformation,SysInfo,...)
Handle:=CreateFile(PChar(Format('\\ .\PhysicalDrive%d', [Drive])),GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,nil,OPEN_EXISTING ,0,0);
if Handle<>INVALID_HANDLE_VALUE then begin
FillChar(Buffer,SizeOf(Buffer),0);
Buffer.InData.irDriveRegs.bCommandR eg:=$EC{IDE_ATA_IDENTIFY};
if DeviceIoControl(Handle,$7C088{SMART _RCV_DRIVE_DATA},@Buffer,SizeOf(Buf fer),
@Buffer,SizeOf(Buffer),Readed,nil) then begin
for A:=0 to 9 do
PWordArray(@Buffer.Serial)[A]:=Swap(PWordArray(@Buffer.Serial)[A]);
List.Add(Trim(Buffer.Serial));
end;
CloseHandle(Handle);
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
EnumHDDSerials(memo1.Lines);
end;
Компоненты для вытаскивания данных о винчестере:
http://home.earthlink.net/~akonshin/delphi_ru.htm
SELECT BEST FROM LIFE
Dimasw вне форума Ответить с цитированием
Старый 18.09.2010, 01:19   #3
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

Еще есть исходники проги по вытаскиванию номера биоса и параметров процессора. Доп. компонент не требует.
Где-то видел прогу по вытаскиванию MAC адреса сетевой карты. Если надо - покопаюсь в своих архивах.
SELECT BEST FROM LIFE

Последний раз редактировалось Dimasw; 18.09.2010 в 01:23.
Dimasw вне форума Ответить с цитированием
Старый 18.09.2010, 01:46   #4
exetor
Новичок
Джуниор
 
Регистрация: 14.09.2010
Сообщений: 2
По умолчанию

Думаю данных винчестера будут достаточно, спасибо, теперь надо все это логически соединить.
exetor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Защита программы по железу BarakudaX777 Работа с сетью в Delphi 8 05.09.2010 16:31
как сгенерировать 25 -значный ключ с привязкой по ip? PROjunior Свободное общение 5 03.11.2009 18:56
Срочно требуется помощь с привязкой горячих клавиш..... Jinxers Операционные системы общие вопросы 4 08.02.2009 20:09
проблема с привязкой antn Microsoft Office Excel 2 14.01.2009 01:09
Помогите с привязкой Nesta1384 Microsoft Office Excel 2 26.09.2008 07:50