Jump to content
ehd

Ajutor idee HUID Delphi

Recommended Posts

Posted (edited)

Salut am de facut un activator pe baza de hardware id, am facut deja extractorul de id de la hard disk, dar departe nu stiu ce sa fac.

Ar trebui sa am un alt program unde bag id-ul hardware imi genereaza un serial pe care il bag inapoi in program pentru al activa. Imi poate spune cineva arhitectura, cum functioneaza, sau ceva exemple.

este cumva encode/decode bazat pe HID ca si cheie?

Pun aici si metodele pentru extragere HID - Delphi Hardware Indentificator sa le aiba cine mai are nevoie de asa ceva...

http://pastebin.com/nP6CnMAh

si pt. Linux -Python

http://pastebin.com/J9dewiGF

Edited by ehd
Posted

Faci un algoritm prin care sa creezi din HWID un "serial".

De exemplu sa zicem ca ai HWID "9005eefa-dad1-53b4-baab-56ecfbf9d55c".

Poti face asa:

1. Faci md5 de prima parte (9005eefa)

2. Faci sha1 de ultima parte (56ecfbf9d55c)

3. Faci base64 pentru "dad1"

4. Faci rot13 pentru "53b4"

5. Faci hex pentru fiecare caracter pentru "baab"

6. Iei primii 3 octeti de la fiecare si ii concatenezi si poc, ai un serial (in hex de exemplu)

Mai sus sunt doar cateva idei stupide, poti alege ce modalitati vrei.

Sigur, se poate crack-ui daca cineva face reverse engineering la program, dar practic aceasta e o problema fara rezolvare: ORICE ar face cineva, tot se poate crack-ui. :)

Posted

Sau iti creezi propriul hash:

GEN: 9005eefa-dad1-53b4-baab-56ecfbf9d55c

aduni toate cifrele concatenezi cu "suma valorilor literelor" (eventual cu ceva transformati hex sa apara si carcatere) la care concatenezi diferenta primelor 2 litere :-??

Te joci putin cu valorile. Ideea e ca: sa fie coliziunea cat mai mica, diversitatea cat mai mare (si eventual o lungime fixa).

Asa iti creezi propriul "hash".

Dupa poti verifica daca hash(HWID) == cod.introdus

Daca e adevarat => ca stie secretul hash-ului (adica esti tu, ca doar tu ai creat hash-ul)

Daca vrei, poti face o verificare, zic eu mai simpla cu o lista intr-o pagina web.

Daca HWID se regaseste pe pagina web => ca a fost activat, altfel se inchide.

Desigur, metodele astea pot fi combatute destul de usor.

Ma gandesc ca ar exista metode mai sigure... cum ar fi o cheie de cod (niste variabile/fragmente de cod) necunoscute de program(dar absolut necesare), care pot fi obtinute in timpul rularii de la o autoritate(care verifica intai licenta ta).

Posted

Versiunea mai complicata:

1. Iti creezi propriul PKI

2. Semnezi un certificat pentru fiecare HWID

3. Verifici ca user-ul sa aiba acel certificat (semnat de CA-ul tau) pentru HWID-ul sau

4. Nu stiu daca ar trebui sa iei in considerare aceasta optiune

Ce face un atacator:

1. Cumpara un serial valid pentru HWID-ul lui

2. Serialul impreuna cu HWID-ul le face publice

3. Alte persoane schimba HWID (cred ca se poate) si folosesc acelasi serial

Posted

Sunt incepator in programare delphi si in creeare sisteme de inregistrare/activare pe baza de HID, sper ca am inteles bine:

1.programul principal imi genereaza HWID "9005eefa-dad1-53b4-baab-56ecfbf9d55c"

2.il criptez cumva sa zicem md5 partial tot in programul principal ce trebuie activat: 9005eefa

3.il afisez criptat

--------

A.introduc codul criptat in programul 2

B.programul il decripteaza la faza initiala

C. introduc HID in forma initiala in programul principal si fac o comparatie cu HID-ul necriptat ce are ca rezultat activarea?

D. Cum fac sa ramana inregistrat sa nu trebuiasca introdus de fiecare data serialul?

Nota: Tema mea este sa fac orice tip de program sa fie activat o data si nelimitat, dar sa nu poata fi instalat si pe alt PC cu acest serial, trebuie neaparat sa folosesc HID, este o tema de vacanta pe care trebuia sa o fac deci nu ma intereseaza securitatea.

Posted

program exemplu;

{$mode objfpc}
{$GOTO ON}

uses windows, crt, sysutils;


var nume_partitie:string;
serial,parola:DWORD;
f:text;


procedure main_menu;
begin
writeln('asta e programul actual. programul e inregistrat.');
readln;
end;

procedure screen_cere_parola;
begin
GetVolumeInformation(nil,@nume_partitie,20,@serial,nil,nil,nil,0);
writeln('cod utilizator:',serial);
write('parola:');
try
readln(parola);
except;
end;
assign(f,'reg.txt');
rewrite(f);
writeln(f,parola);
close(f);
writeln('parogramul trebuie restartat pt a fi activat. apasati [ENTER]');
readln;
end;


function hash:DWORD; //functia care calculeaza hashul din HWID
begin
GetVolumeInformation(nil,@nume_partitie,20,@serial,nil,nil,nil,0);
hash:=serial+(serial mod 10);
end;

procedure inceput; //programul incepe cu procedura de verificare a parolei
label cerem_parola;
begin
if not(FileExists('reg.txt')) then goto cerem_parola;
assign(f,'reg.txt');
reset(f);
try
readln(f,parola);
except;
end;
close(f);
if parola=hash then main_menu
else
cerem_parola:
screen_cere_parola;
end;

begin
clrscr;
inceput;
end.

am folosit apiul getvolumeinformation pt exemplu scurt. nu este hwid, ci un serial pe care windowsul il da oricarei partitii formatate.

hasul format pe baza hwid(hash care trebuie sa corespunda cu parola introdusa de utilizator) este hwid+ultima sa cifra

e scris pt free pascal, asa ca poti adapta f usor la ce-ti trebuie tie

*ca o paranteza: daca vrei intr-adevar sa poti lua cat de cat firul celui care a crakuit programul, e mai simplu in a-l compila diferit pt fiecare user in parte. cand apare o versiune piratata, vei sti de la cine a iesit, pt ca compilarea e unica(nu e nimic nou, e mai mult de munca, dar e mai sigur decat hwid)

Posted (edited)

mai am o intrebare pentru a scrie si citi registri win xp, win7 32 biti (nu 64 sau vista) se poate implementa ceva in codul de mai jos sau trebuie modificat?


procedure TForm1.Button3Click(Sender: TObject);
begin

if (Edit2.Text = (Label1.Caption)) then
Button1.Visible := True
else
ShowMessage('Cod Invalid');
if (Edit2.Text = (Label1.Caption)) then
//// HERE WRITE SOME REGISTRY HKEY_USER\WINDOWS\WXSDZ\ ////

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//// //// HERE READ REGISTRY WRITTEN AND CHECK IF EXIST IF NOT SHOW MESSAGE ////
end;

Ma poate ajuta asta?

http://delphi.about.com/od/windowsshellapi/a/tregistry.htm

Edited by ehd
Posted

function ReadSerialFromRegistry: String;
var
Registry: TRegistry;
begin
Result := '';
Registry := TRegistry.Create;
try
with Registry do
begin
RootKey := HKEY_CURRENT_USER;
Access := KEY_READ;
if OpenKey('\Software\EHDSoftware', False) then
begin
Result := ReadString('Serial');
CloseKey;
end;
end;
finally
Registry.free;
end;
end;

function WriteSerialToRegistry(Serial: String): Boolean;
var
Registry: TRegistry;
begin
Result := False;
Registry := TRegistry.Create;
try
with Registry do
begin
RootKey := HKEY_CURRENT_USER;
Access := KEY_ALL_ACCESS;
if OpenKey('\Software\EHDSoftware', True) then
begin
try
WriteString('Serial', Serial);
Result := True;
except
end;
CloseKey;
end;
end;
finally
Registry.free;
end;
end;

Usage:


procedure TForm1.FormCreate(Sender: TObject);
begin
var
Serial: String;
begin
Serial := ReadSerialFromRegistry;
if Serial <> '' then
MessageDlg('The serial number is: ' + Serial , mtInformation, [mbOk], 0)
else
MessageDlg('Cannot read serial number from regitry!', mtError, [mbOk], 0)
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Serial: String;
begin
//...
Serial := '9005eefa-dad1-53b4-baab-56ecfbf9d55c';
if WriteSerialToRegistry(Serial) then
MessageDlg('Successfully completed!', mtInformation, [mbOk], 0)
else
MessageDlg('Cannot write serial number to regitry!', mtError, [mbOk], 0)
end;

Posted (edited)

uses? ce declar ca foloseste? da-mi te rog unit-ul complet

nu ar fi mai usor sa pastrez codul preluat din label caption intr-un fisier pe undeva in root decat sa ma complic cu registri? Folosesc Delphi 7

cum integrez comparatia cu label (validatorul)

Edited by ehd
Posted (edited)
uses? ce declar ca foloseste? da-mi te rog unit-ul complet

N-am unit complet. Am scris o functie si o procedura care citeste/scrie din registry!


uses Registry;

function ReadSerialFromRegistry: String;
var
Registry: TRegistry;
begin
Result := '';
Registry := TRegistry.Create;
try
with Registry do
begin
RootKey := HKEY_CURRENT_USER;
Access := KEY_READ;
if OpenKey('\Software\EHDSoftware', False) then
begin
Result := ReadString('Serial');
CloseKey;
end;
end;
finally
Registry.free;
end;
end;

function WriteSerialToRegistry(Serial: String): Boolean;
var
Registry: TRegistry;
begin
Result := False;
Registry := TRegistry.Create;
try
with Registry do
begin
RootKey := HKEY_CURRENT_USER;
Access := KEY_ALL_ACCESS;
if OpenKey('\Software\EHDSoftware', True) then
begin
try
WriteString('Serial', Serial);
Result := True;
except
end;
CloseKey;
end;
end;
finally
Registry.free;
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if (Edit2.Text = (Label1.Caption)) then
begin
Button1.Visible := True
WriteSerialToRegistry(Label1.Caption);
end
else
ShowMessage('Cod Invalid');
//.....
end;

procedure TForm1.FormCreate(Sender: TObject);
var
Serial: String;
begin
Serial := ReadSerialFromRegistry;
//...
end;

Prima data ar trebui sa faci programe mai simple. Eu te ajut cu cea mai mare placere, dar nu cred ca ai cunostinitele necesare(deocamdata).

Edited by staticwater
Posted

Are dreptate staticwater. La nivelul la care esti acum, nu poti face un program decent. Cu siguranta nu va incerca nimeni sa sparga sau sa activeze programul tau, asa ca nu e nevoie de nicio functie de activare. Mai intai si intai tre' sa inveti sa programezi si doar dupa ce ai un program decent are sens sa te ocupi de activare cu HWID etc.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...