ehd Posted September 25, 2013 Report Posted September 25, 2013 (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/nP6CnMAhsi pt. Linux -Pythonhttp://pastebin.com/J9dewiGF Edited September 25, 2013 by ehd Quote
Nytro Posted September 25, 2013 Report Posted September 25, 2013 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. Quote
yoyois Posted September 25, 2013 Report Posted September 25, 2013 Sau iti creezi propriul hash:GEN: 9005eefa-dad1-53b4-baab-56ecfbf9d55caduni 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.introdusDaca 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). Quote
Nytro Posted September 25, 2013 Report Posted September 25, 2013 Versiunea mai complicata:1. Iti creezi propriul PKI2. Semnezi un certificat pentru fiecare HWID3. Verifici ca user-ul sa aiba acel certificat (semnat de CA-ul tau) pentru HWID-ul sau4. Nu stiu daca ar trebui sa iei in considerare aceasta optiuneCe face un atacator:1. Cumpara un serial valid pentru HWID-ul lui2. Serialul impreuna cu HWID-ul le face publice3. Alte persoane schimba HWID (cred ca se poate) si folosesc acelasi serial Quote
ehd Posted September 25, 2013 Author Report Posted September 25, 2013 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: 9005eefa3.il afisez criptat--------A.introduc codul criptat in programul 2B.programul il decripteaza la faza initialaC. 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. Quote
Vlachs Posted September 25, 2013 Report Posted September 25, 2013 D. Cum fac sa ramana inregistrat sa nu trebuiasca introdus de fiecare data serialul?Poti sa il salvezi intr-un fisier/registri/baza de date... Quote
sulea Posted September 26, 2013 Report Posted September 26, 2013 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 HWIDbegin 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 paroleilabel 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;beginclrscr;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 cifrae 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) Quote
Vlachs Posted September 26, 2013 Report Posted September 26, 2013 Defapt uite aici o solutie mai eleganta TIniFile Class Quote
ehd Posted September 26, 2013 Author Report Posted September 26, 2013 (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 September 26, 2013 by ehd Quote
staticwater Posted September 26, 2013 Report Posted September 26, 2013 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);beginvar 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; Quote
ehd Posted September 26, 2013 Author Report Posted September 26, 2013 (edited) uses? ce declar ca foloseste? da-mi te rog unit-ul completnu 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 7cum integrez comparatia cu label (validatorul) Edited September 26, 2013 by ehd Quote
staticwater Posted September 27, 2013 Report Posted September 27, 2013 (edited) uses? ce declar ca foloseste? da-mi te rog unit-ul completN-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 September 27, 2013 by staticwater Quote
gh551 Posted September 27, 2013 Report Posted September 27, 2013 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. Quote