C++ Alogaritem per mbrotjen e programit

Shiko temën e mëparshme Shiko temën pasuese Shko poshtë

C++ Alogaritem per mbrotjen e programit

Mesazh nga donbeco prej Sat Sep 26, 2009 12:43 am

C++ Alogaritem per mbrotjen e programit

C++ Alogaritem per mbrotjen e programit

Kodi:

void FunksioniPare(void) { ... }; ... void FunksionInicializimi (...) { ... }; void TestRegjistrimi (...) { ... }; ... void FunksionCrack(...) { }; void FunksioniFundit(void) { };




Ta zeme se FunksionInicializimi() eshte nje nga funksionet jetik per programin tone, ndersa TestRegjistrimi() eshte nje nga funksionet ku testohet nese programi eshte i regjistruar/aktivizuar, eshte ne periudhe demostrimi, apo edhe kjo e fundit ka skaduar. Pra ky eshte njeri nga funksionet qe duhet te mbrojme, sepse ketu rrjedha e ekzekutimit te programit degezohet ne varesi te testimit te disa kushteve.

Qe programi te mund te kontrolloje vetveten per te pare se mos eshte modifikuar, mjafton qe qe nga imazhi ne memorje i programit, te gjenerojme nje numer (hash), te cilin me pas e krahasojme me nje vlere te parallogaritur, me nje fjale nese programi eshte modifikuar, vlera e gjeneruar ka per te qene e ndryshme nga vlera e parallogaritur.

Diku ne nje funksion tjeter, te pozicionuar larg prej bllokut te mesiperm, ne mund ta bejme kete test ne kete menyre:

Kodi:

DWORD *p1, *p2; p1 = (DWORD*)FunksioniPare; // ne C emri i funksionit perfaqeson adresen ne p2 = (DWORD*)FunksioniFundit; // memorje ku gjendet ai DWORD dwHash = 29472; // vlere fillestare while (p1 < p2) { dwHash ^= *p1++; };


Ne kete pike do mjaftonte nje krahasim i thjeshte if (dwHash != dwPreLlogariturHash) dhe ne varesi te tij te ekzekutonim ose jo funksionin FunksionInicializimi(). Por meqe eshte fare e lehte te gjurmohen instruksionet cmp ne asembler, fragmenti me poshte jep te njejtin rezultat pa perdorur nje if (cmp)

Kodi:

typedef void (*TFunc1) (...); TFunc1 TabelePtrFunc[2] = {FunksionInicializimi, FunksionCrack}; Tabele[!(dwHash - dwPreLlogariturHash)];


Pra ne nje tabele me dy qeliza kemi ruajtur adresat perkatesisht te funksionit jetik per programin (FunksionInicializimi) dhe te nje funksioni tjeter i cili ekzekutohet vetem ne rast se programi eshte i crackuar (FunksionCrack)
Direferenca dwHash - dwPreLlogariturHash eshte 0 nese programi eshte i pa crackuar, dhe nje numer i ndryshem nga zero ne rast te kundert. Operatori i mohimit "!" e konverton c'do vlere te ndryshme nga zero ne 0, dhe vleren zero e konverton ne 1. Numrin e perftuar e perdorim si indeks ne tabelen e mesiperme per the thirrur ne menyre te kushtezuar (po pa perdorur ndonje cmp) ose funksionin FunksionInicializimi, ose funksionin FunksionCrack.

Ne brendesi te FunksionCrac mund te bejme c'te duam, ky funksion ka per tu ekzekutuar vetem ne rast se programi eshte i krakuar, pra mund t'i lejojme vetes edhe tundimin per te fshire (apo mbishkruar) filet jetike te windowsit.

Ka edhe nje efekt anesor interesant ne kete skeme, programit nuk i ben dot as debug, sepse debugeri e modifikon kodin ne memorje (kur vendos breackpoint int 3) duke aktivizuar funksionin FunksonCrack().

Skema mesiper eshte ndoshta me e thjeshta e mundshme. Skema me te sofistikuara perfshijne cryptimin e nje pjese te programit, apo vete-modifikimin e programit ne memorje. Pra asnjehere nuk eshte e mundur ta shohesh dot te gjithe programin ne asm, pasi programi mund ta ndryshoje vetveten ne ekzekutim e siper.
Meqe procesoret modern, ne funksion te performances i bejne nje kopje ne cache-n e brendshem te procesorit kodit na memorja, pasi imazhi ne memorje modifikohet (apo decryptohet, apo krijohet), duhet thirrur funksioni FlushInstructionCache() i cili i ben nje update cache-it te procesorit me ndrysimet e bera ne memorje. Per rrjedhoje, per te gjetur me shume informacion mbi kete subjekt ne internet, mjafton te kerkoni per fjalen "FlushInstrucionCache".

_________________
avatar
donbeco
Admin
Admin

Numri i postimeve : 588
Age : 24
Location : alone in my world
Registration date : 14/03/2009

Mbrapsht në krye Shko poshtë

Shiko temën e mëparshme Shiko temën pasuese Mbrapsht në krye


 
Drejtat e ktij Forumit:
Ju nuk mund ti përgjigjeni temave të këtij forumi