• XSS.stack #1 – первый литературный журнал от юзеров форума

Привязка к железу

ammok

(L1) cache
Пользователь
Регистрация
13.12.2005
Сообщения
793
Реакции
7
Столкнулся седня с проблемкой, надо привязать програмку к железу...
Хотелось бы узнать про уже готовые решения, либо уловить чью-то мысль и сделать свою привязку...

З.Ы. гугль за*бал за 2 часа ни одной норм статьи (наверно я не так ищу :)).
 
Смотря к чему привязать хочеш, можно к процу или жесткому... Вот прример получения HDD ID:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 VolumeName,
   FileSystemName: array[0..MAX_PATH - 1] of Char;
 VolumeSerialNo: DWord;
 MaxComponentLength,
   FileSystemFlags: cardinal;
 s:string;
begin
s:=Edit1.Text+':\';//Сюда вводим букву диска
GetVolumeInformation(PChar(s), VolumeName, MAX_PATH, @VolumeSerialNo,
   MaxComponentLength, FileSystemFlags,
   FileSystemName, MAX_PATH);
 Memo1.Lines.Add('VName = ' + VolumeName);
 Memo1.Lines.Add('SerialNo = $' + IntToHex(VolumeSerialNo, 8));
 Memo1.Lines.Add('CompLen = ' + IntToStr(MaxComponentLength));
 Memo1.Lines.Add('Flags = $' + IntToHex(FileSystemFlags, 4));
 Memo1.Lines.Add('FSName = ' + FileSystemName);
end;
 
Получаешь, например, HDD ID, (по примеру LEE_ROY), Процессор, Биос и т.д. (примеры есть в DelphiWorld), потом создаёшь генератор, который на основе всей этой каши генерирует какой-либо ID... (шифруешь, преобразуешь, хешируешь.... придумать можно что-угодно).... Этот ID пользователь передаёт автору проги... И уже на основе него генерируется ключ регистрации, который отсылается ему....
 
Amper
Я в общих чертах знал эту схему, и реализовать её не так сложно, но мне еще хотелось бы узнать об уже сувществующих системах защиты, к примеру какая система используется в боте Illusion?
 
ammok
к примеру какая система используется в боте Illusion?
Достаточно слабая. Это не протектор, а упаковщик скорее.

Для домашнего пользования рекомендую: Armadillo 3.75c или ACProtect 1.32
:zns5: Скачать|Download
Добавлено в [time]1158297907[/time]
:zns5: Скачать|Download
 
LEE_ROY
Смотря к чему привязать хочеш, можно к процу или жесткому... Вот прример получения HDD ID:

Это серийный номер тома винта и в нормальных защитах он никогда не используется.
 
LEE_ROY
Я знаю что это серийный номер винта, человек просил показать привязку к железу - я показал, а то что эта защита не рулит я прекрасно понимаю.

Я тебе говорю, что это не серийный номер винта ёпт, а серийный номер тома.
 
Hardware ID калькулируется взависимости от разных компонентов системы, кроме HDD еще можно получить MAC-адрес сетевой карты, ИД процессора и т.д., затем написать простенький алгоритм, который сгенерирует исходя из полученных данных номер.
Пример получения ID процессора:

Код:
const
	ID_BIT	=	$200000;  	// EFLAGS ID bit
type
	TCPUID	= array[1..4] of Longint;
	TVendor	= array [0..11] of char;

function IsCPUID_Available : Boolean; register;
asm
	PUSHFD      	{direct access to flags no possible, 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; register;
asm
  PUSH    EBX         {Save affected register}
  PUSH    EDI
  MOV     EDI,EAX     {@Resukt}
  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 : TVendor; assembler; register;
asm
  PUSH    EBX    	{Save affected register}
  PUSH    EDI
  MOV     EDI,EAX  	{@Result (TVendor)}
  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;

копирайты:
/////////////////////////////////////////////////////////////////////////////
// © NPS, 1997 - Idea, realisation, adoptation IsCPUID_Available) //
// kvk@estpak.ee //
// © Alex Abreu, 1997 - IsCPUID_Available source and idea //
// simonet@bhnet.com.br //
/////////////////////////////////////////////////////////////////////////////
 
Процедуры описаны в виде встроенного в Delphi ассемблера.
Пример вызова процедур:

Код:
procedure TForm1.GetButtonClick(Sender: TObject);
var
  CPUID : TCPUID;
  I     : Integer;
  S  	: TVendor;
begin
	for I := Low(CPUID) to High(CPUID)  do CPUID[I] := -1;
  if IsCPUID_Available then begin
   CPUID	:= GetCPUID;
   Label1.Caption := 'CPUID[1] = ' + IntToHex(CPUID[1],8);
  	Label2.Caption := 'CPUID[2] = ' + IntToHex(CPUID[2],8);
   Label3.Caption := 'CPUID[3] = ' + IntToHex(CPUID[3],8);
  	Label4.Caption := 'CPUID[4] = ' + IntToHex(CPUID[4],8);
  	PValue.Caption := IntToStr(CPUID[1] shr 12 and 3);
   FValue.Caption := IntToStr(CPUID[1] shr 8 and $f);
  	MValue.Caption := IntToStr(CPUID[1] shr 4 and $f);
   SValue.Caption := IntToStr(CPUID[1] and $f);
   S := GetCPUVendor;
  	Label5.Caption := 'Vendor: ' + S; end
  else begin
  	Label5.Caption := 'CPUID not available';
  end;
end;
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх