Asprotect utilizarea practică

Dacă analizăm materialele de forumuri specializate (rusf.com, rsdn.ru, ixbt.com și colab.), În rândul clasei considerate de programe pe care le putem identifica imediat primele trei. Acesta ASProtect. Armadillo și EXECrypt. Aceste trei produse oferă suficientă protecție pentru un preț rezonabil, care le-a dat o popularitate bine-meritata în rândul dezvoltatorilor. In acest articol voi încerca să-i spun despre prima dintre ele.

Cu ASProtect știu mai mult de cinci ani. Creat de restante dezvoltator român Alekseem Solodovnikovym, o lungă perioadă de timp a fost considerat aproape singurul protector, pentru care a fost aproape imposibil de a face o fisură.
După cum știți, software-ul de protecție absolută nu se întâmplă, și nu poate fi. Singura măsură obiectivă a calității de protecție poate fi valoarea raportului produsului și valoarea lui hacking. Când distribuiți dezvoltatorii de software suferă pierderi semnificative din cauza faptului că rețeaua apar numere de serie, chei și patch-uri. Dar probleme speciale furnizarea de generatoare de chei, așa-numitele keygen. Cel mai eficient mod de a evita pierderile financiare de la apariția numărului de serie este actualizările de eliberare regulate, care adaugă funcționalitatea programului, și numărul ilegal sau cheia este introdusă în „lista neagră“. De multe ori dezvoltatorii, în scopul de a crește popularitatea produsului, se închid „stânga“ cheile de la resurse krekerskie populare (la un moment dat, și aceasta am păcătuit
:)). Cu toate acestea, în cazul în care rețeaua apare fisurii, devine mai dificil să se facă distincția legitim de chei false. În consecință, împiedicat nu numai blocarea utilizatorilor ilegale ale produsului protejat, dar, de asemenea, sprijinul juridic, dat fiind faptul că proprietarii de produse nu poate fi o listă completă de cumpărători.

Înainte de a trece la luarea în considerare a exemplelor practice, să ne explice teoria funcționării c ASProtect. Astfel, pachetul de creatorul declarației vă permite să pună în aplicare următoarele funcții:

  • ambalaje de aplicare;
  • aplicații de criptare;
  • Protecția împotriva retragerea haldei prin mijloace cum ar fi
    ProcDump;
  • aplicații de monitorizare Integritate;
  • Protecția modificării memoriei (a patch-urilor de memorie);
  • API pentru interacțiunea aplicație cu caracteristici de securitate;
  • Crearea și verificarea cheilor de înregistrare folosind algoritmi publice;
  • Menținerea bazei cheie ilegale;
  • Capacitatea de a crea versiuni de încercare, care funcționa limita aplicarea în funcție de timp sau numărul de lansări;
  • Abilitatea de a genera chei cu referire la „fier“;
  • Capacitatea de a crea on-line keygenratorov pentru astfel de servicii de înregistrare, cum ar fi Regsoft, regnow. ShareIt!,
    SWREG.

Un programator folosind ASProtect. poate defini orice număr de moduri care pot rula programul său. De exemplu, ar putea fi un modul demo în care programul este limitat în funcționalitatea și modul în care protejate funcționalitatea produsului devine complet accesibil pentru utilizator înregistrat înregistrat.

Principala diferență între a doua versiune ASProtect prima este de a utiliza API-ul actualizat. ASProtect API oferă dezvoltatorilor cu trei grupe de funcții:

  • Funcție pentru a obține informații de înregistrare a utilizatorului;
  • Funcții pentru informații despre parametrii de proces-mode;
  • Funcții pentru gestionarea fragmentelor de cod criptate care funcționează numai în modul înregistrat.

Eu folosesc „funcție“ termenul în conformitate cu documentația ASProtect. în ciuda faptului că Delphi Limba se referă la separarea procedurii și funcția concepte. Unele dintre rutine discutate mai jos sunt descrise ca o procedură.

Primul grup include CheckKey (verificați cheia pentru toate modurile acceptate), GetHardwareID (un identificator PC unic), CheckKeyAndDecrypt (verificați cheia pentru toate modurile acceptate și o stochează într-un fișier de configurare extern), GetRegistrationKeys (primește o listă de chei), GetModeInformation (primește informații un mod în care programul este în curs de desfășurare, precum și toate celelalte moduri), GetRegistrationInformation (obține informații despre modul în care programul este în curs de desfășurare).
Al doilea grup conține funcții GetTrialDays (primește informații cu privire la perioada de probă parametrii) GetTrialExecs (verifică modul curent și proces), GetKeyDate (verificați data cheie de creare), GetExpirationDate (), GetKeyExpirationDate ().

Al treilea grup include o singură funcție - SetUserKey. Această funcție decriptează secțiunea criptată.

Pe lângă toate cele de mai sus, furnizează o descriere a structurii ASProtect
TModeStatus:

TModeStatus = înregistrare ambalate
ModeID: Byte;
isRegistered,
IsKeyPresent,
IsWrongHarwareID,
IsKeyExpired,
IsModeExpired,
IsBlackListedKey,
IsModeActivated. boolean;
se încheie;

Această structură conține informații despre modul în care locul de muncă sau poate programa potențial lucra.

Să presupunem că avem o aplicație completă, și vrem să-l protejeze. Să scrie o aplicație de testare care conține un formular simplu, cu un buton, clic pe care produce un mesaj de «Bună ziua lume!». Apoi, încercați să echipeze protecție programul nostru elementar. În primul rând, vom efectua unele manipulare a codului de aplicare.
Ca un exemplu de bază, să ia Reg Trial. Prin urmare, suntem interesați lui Delphi-realizare.

Prelucrate prin OnShow () forma principală a aplicației. La începutul procedurii de apel de tratare a GetRegistrationInformation (0, UserKey, NumeUtilizator) și, astfel, știu dacă cheia și numele de utilizator pentru orice operațiune. De regulă, procesul sau modul funcțional limitat de funcționare nu necesită înregistrare. Prin urmare, vom verifica dacă a fost un (înregistrare) este produs, la toate și, dacă da, ce mod se potrivește (funcția
GetModeInformation).

Imediat observăm că imediat ce am fost, de asemenea, o provocare GetRegistrationInformation, programul nu va mai rula, dând în Event Log'e atunci când rulează ceva de genul următoarele:

Modul de încărcare: UNKNOWN_MODULE_12. Nu Info Debug. Adresa de bază: 00,350,000 $. Procesul de Project2.exe (280)

Cu toate acestea, compilarea este de succes. Desigur, pre-ar trebui să declare constante:

const
UserKey. PChar = zero;
USERNAME. PChar = zero;
MODENAME. PChar = zero;
TrialDaysTotal. DWORD = DWORD (-1);
TrialDaysLeft. DWORD = DWORD (-1);

Rulați programul pentru a executa, putem doar atunci când fișierul .exe va fi procesat ohm ASProtect“.

Procedura TForm2.Button1Click (Expeditor: TObject);
var
ModeStatus. TModeStatus;
începe
GetRegistrationInformation (0, UserKey, UserName);
ShowMessage (UserKey);
ShowMessage (UserName);
în cazul în care (UserKey <> nil) ȘI (strlen (UserKey)> 0) atunci
începe

GetModeInformation (0, modename, ModeStatus);
ShowMessage ( 'Hello World!');

capăt
ShowMessage altceva ( 'Înregistrează-te rog!');
se încheie;

Pre-compila proiectul, executați ASProtect. În fața noastră sunt patru file, care conțin toate setările de lucru necesare. Pe prima filă, setați calea către programul nostru, am pus aceste informații pe versiunea sa, nivelul de compresie stabilit și, dacă este necesar, efectuați setări suplimentare.

Mai departe la fila Moduri (modurile). În cazul nostru, există două opțiuni: fie programul este înregistrat sau nu. În consecință, vom crea două moduri, prima este numit «inregistrat», al doilea - «Trial». Face atât în ​​modul activ (împinge pasăre «Este acest mod activ»).

Pentru a «înregistrată» modul, activați «este aceasta în mod Registered stat?» Și «cheie de activare de utilizare». Semnificația acestor valori este destul de transparentă. Pentru modul primul (proces), setați numărul de zile în care le puteți utiliza software-ul nostru pentru drum liber (expirat Zile Number) și introduceți eticheta de text, notificarea cu privire la sfârșitul perioadei de probă (pentru aceasta apăsați butonul «Editare mesajul», situat lângă ea).
După aceea, doar trece la al patrulea tab (Protecție). În cazul în care domeniul statisticii, vom vedea inscripția «Gata de protecție ...», acest lucru indică faptul că am făcut totul corect. Apăsați butonul „Protect“ și a vedea statisticile operațiunilor pe fișierul sursă.

început de protecție.
Funcția 4 API (e) găsit:
- GetHardwareID
- GetModeInformation
- CheckKeyAndDecrypt
- GetRegistrationInformation
Moduri salvate cu succes.
1 pereche mark (e) pentru criptare găsită.
0 marca pereche (e) continua.
tabel de import protejat, size = 7666 octeți
Protecție făcut.

Mărime fișier: 420KB comprimat la 494KB, Raport: 117,6%

Când butonul de operare «Run» devine activ, și o putem folosi pentru a rula aplicația. Dacă totul merge bine, aplicația va rula fără probleme. Cu toate acestea, nu încercați să re-proteja fișier deja protejat, ASProtect nu permite să facă.
Rulați în mod clar demonstrează că protecția este de lucru. Valorile nule, și în loc de a scrie «Bună ziua lume!» Vei vedea «Registrul Vă rugăm» va fi afișat ca numele de utilizator și cheia. Dacă porniți ora sistemului înainte,
programul va refuza să ruleze la toate. Și chiar și „timpul se întoarce“, nu va fi capabil să-l rulați.

Acum vom încerca să organizeze înregistrarea programului. Pentru a face acest lucru, copiați dosarul în formularul nostru proiect RegForm Exemplu Reg Trial, care face parte din ASProtect. si adauga la proiect. Pe formularul principal, vom posta un alt buton și ne dăm seama provocarea formularul de înregistrare:

Mai jos este codul de înregistrare al programului.

Procedura TfrmRegKey.btnRegOkClick (Expeditor: TObject);
începe

Dacă CheckKeyAndDecrypt (PChar (eCode.Text), PChar (eName.Text), Adevărat) atunci
începe
MessageBox (mâner, 'Vă mulțumim pentru înregistrarea!', 'Înregistrare', MB_ICONINFORMATION);
Închide;
încheie altceva
MessageBox (mâner, 'Cheia nu este validă, vă rugăm să contactați producătorul!', 'Înregistrare', MB_ICONWARNING);

După cum știți, validitatea cheii este verificată funcția CheckKeyAndDecrypt.

Funcția CheckKeyAndDecrypt (cheie: PChar Nume: PChar; SaveKey: Boolean): Boolean;
stdcall;

Acesta verifică cheia pentru toate modurile de realizat și o stochează într-un fișier de configurare externă (în acest caz, în cazul în care ultimul parametru al funcției - true). În acest caz, în cazul în care cheia este numele, funcția returnează adevărat, în caz contrar -
fals.

Un alt obiect este un generator de cheie producător. Această sarcină este foarte importantă, așa cum este utilizat în mod direct ASProtect nu întotdeauna convenabil și posibil să se fabrice cheia. În mod semnificativ mai practice în acest scop au o aplicație de sine stătătoare.
Încă o dată, vom încerca să se ocupe de modul de exemple furnizate de lucru. Deschizându-l (dosar KeyGen), vom vedea o destul de complicat la prima vedere, codul.

Funcția GenerateKey (var KeyStr, NameStr String; Var Res DWORD ..): Boolean;
var
Params. TParams;
RegData. array [1..100] de Byte;

FillChar (Params, sizeof (Params), 0);
Cu Params do
începe
// Numele de înregistrare
RegName: = PChar (NameStr);
// număr Mod (1..15)
ModeID: = 2;
// Data expirării
ExpirationDate.Day: = 0;
ExpirationDate.Month: = 0;
ExpirationDate.Year: = 0;
// constanta pentru criptare
EncryptionConst: = 699935518;
// HardwareID
HardwareID: = '';
// Dimensiunea Signature în biți
SignatureBits: = 96;
// Constante din fișierul de proiect
C1: =
'AC08B45461D28EB';
C3: =
'A93A5FB8C78D04F1';
C6: =
+ '26D6BB434014649375231C68A655B81D314AEAF3CE32C6DC8BD'
+ 'CBCB9EEDC61EBA3C4A2119685E22205B782C88BFAF21FE98D4'
+ '474FBDB1AFA539B05F09EF60DDF5BA8224161942B9582D37DD'
'D624A97C373E5BB33BFC2335A674E4839D72253BA62B97F0B3' +
'6BCA5B4001353FED5D28FED31FA53C343F381BE121E106F669' +
'5B3CB';
C7: =
'1726DAE1BD153379F1FB0F4F2E00C06D39A733B7715D108EF0C' +
+ '518A11DF528394E37F744E1CEE1B4B411FEAFD7DDE0E281042'
'A728F85FEDB91C8C2ECECF31873C77D68053D550EB8549FDE2' +
+ 'C1885F40B68E1F0FF3383B747882AA517EB6F9061E23650222'
+ '85F1B1BEA91F83E2C4CD66BF0C636FC79B81A738D65D6F5BF8'
'0234D7';
Regkey: = @RegData [1]; // tampon pentru cheie de inregistrare
RegKeySize: = sizeof (RegData); // Dimensiunea unui buffer pentru reg. cheie
// Generarea.
Res: = RegistrationKeyGenerate (Params);
Rezultat: = (Res = kgERROR_SUCCESS);
Dacă Rezultat apoi SetString (KeyStr, regkey, RealKeySize);
se încheie;
se încheie;

Procedura TfrmMain.btnGenerateClick (Expeditor: TObject);
var
KeyStr. string;
NameStr. string;
Res. DWORD;
ResStr. string;
începe
NameStr: = eRegName.Text;
În cazul în care nu GenerateKey (KeyStr, NameStr, Res), atunci
începe
Res caz de
kgERROR_KG_ERROR. ResStr: 'eroare generator cheie!' =;
kgERROR_MODE_UNKNOWN. ResStr: 'Numărul de modul necunoscut!' =;
kgERROR_REGNAME_ERROR. ResStr: 'Numele de înregistrare incorect!' =;
kgERROR_SIGNATURE_ERROR. ResStr: = 'Modul necunoscut semnătură!';
kgERROR_BUFFER_TOO_SMALL. ResStr: = 'buffer Rezultat prea mic!';
kgERROR_CONSTANTS_UNDEFINED. ResStr: = 'constantele incorect!';
kgERROR_HARDWAREID_ERROR. 'Cheie nevalidă HardwareID!' =;: ResStr
altfel
ResStr: = 'Eroare necunoscută!';
se încheie;

MessageBox (mâner, PChar (ResStr), 'Eroare', 0);
încheie altceva
eRegKey.Text: = KeyStr;

Desigur, în articol, am descris doar un sistem simplu de „agățat“ cu privire la protecția produselor software folosind ASProtect. De fapt, pachetul din cauza abundenței de oportunități de a se adapta mecanismele de apărare la cele mai diverse scheme de distribuție de software.

În concluzie, vreau să dau câteva recomandări. Mai întâi de toate, protejate de versiunea fixă ​​ASProtect. Deoarece chiar modificarea mică a produsului protejat poate avea ca rezultat o durere de cap semnificativă. În consecință, nu neglijați crearea de BAK copie protejată
produs și structura bună fragmentele de cod care conțin apeluri ASProtect API, astfel încât, dacă este necesar, acestea pot fi dezactivate cu ușurință.
Aici, nu voi încerca să-și exprime opinia cu privire la fezabilitatea și caracterul practic al contraprestației de achiziție a pachetului. De asemenea, nu se va compara cu concurenții săi funcționalitate și fiabilitate. În schimb, am atașat la extrasele de articol de forumuri în care a exagerat problema.

Arată acest articol unui prieten: