-
Notifications
You must be signed in to change notification settings - Fork 0
radu-catrangiu/stegano
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Tema 2 IOCLA Task 1: Functia "bruteforce_singlebyte_xor" are o variabila locala de un BYTE in care tin cheia. Aceasta variabila este incrementanta intr-un loop. In acest loop apelez functia "xor_matrix" (care face XOR cu toate valorile din imagine), apoi apelez "find_revient" daca aceasta functie intoarce o valoare mai mica decat [img_height] inseamna ca am gasit linia cu mesajul. Altfel se trece mai departe, se apeleaza iar "xor_matrix" pentru a aduce imaginea la starea initiala si se incrementeaza variabila locala. Când este găsită cheia și linia la care se afla mesajul, acestea sunt intoarse folosind EBX respectiv EAX. Functia "find_revient" are ca variabila locala string-ul "revient\0". Aceasta functie are un loop principal in care este parcurs vectorul [img], iar pentru fiecare valoare este apelată funcția "check_revient". Când este gasit string-ul "revient" este apelata funcția "get_line_number" care imparte byte_id-ul curent la numarul de linii pentru a obtine linia pe care se afla string-ul. Functia "check_revient" primește doi vectori, img (vector DWORD) și string-ul "revient" (vector BYTE). Aceasta functie parcurge folosind acelasi index ambii vectori și compară valorile. Daca o valoare diferă acesta întoarce 0, iar daca nicio valoare nu diferă înseamnă că a fost găsit string-ul "revient" și întoarce valoarea 0. Task 2: Este apelată funcția de la task-ul 1 pentru a obtine cheia si linia la care se afla mesajul, apoi folosind rezultatele intoarse de functia "bruteforce_singlebyte_xor" este apelata functia "compute_new_key" care aplică formula descrisă în enunț. Dupa obtinerea noii chei, este apelata functia "write_msg_and_encode". Dupa executia acestei functii se apeleaza functia "print_image" din scheletul temei. Functia "write_msg_and_encode" primeste ca parametri o cheie de criptare si linia la care să fie scris mesajul. Aceasta are ca variabila locala string-ul ce urmeaza sa fie scris. Este calculat byte_id-ul de unde se va incepe scrierea. Intr-un loop sunt parcurse simultan raspunsul si imaginea, având loc scrierea răspunsului. După terminarea buclei este apelată functia "xor_matrix" care aplică noua cheie pe întreaga imagine. Task 3: Se obtin întâi text-ul si byte_id-ul din argv[3] si argv[4]. Se apeleaza atoi pentru a converti byte_id-ul intr-un intreg. Apoi se apeleaza functia "morse_encrypt" (cu acelasi prototip ca in enunt). La final se apeleaza functia "print_image" din scheletul temei. Functia "morse_encrypt" parcurge text-ul primit ca argument până cand este intalnit '\0', iar pentru fiecare caracter din string este apelata functia "write_morse" și este actualizat byte_id-ul adaugând offset-ul intors de functia "write_morse". Functia "write_morse" primeste un caracter, vectorul img și un byte_id de la care se dorește începerea scrierii. Funcția întoarce numărul de caractere scrise. Aceasta functie are rolul unui dictionar care traduce fiecare caracter in codul morse, rezultatul fiind scris in vectorul [img] incepand de la byte_id-ul primit ca parametru. Task 4: Se obtin întâi text-ul si byte_id-ul din argv[3] si argv[4]. Se apeleaza atoi pentru a converti byte_id-ul intr-un intreg. Apoi se apeleaza functia "lsb_encode" (cu acelasi prototip ca in enunt). La final se apeleaza functia "print_image" din scheletul temei. Functia "lsb_encode" parcurge text-ul și pentru fiecare caracter, INCLUSIV caracterul '\0', se apeleaza functia "break_to_bits_and_write" si se incrementanta byte_id-ul cu numarul de valori modificate (intotdeauna 8). Functia "break_to_bits_and_write" foloseste o mască pentru a obtine biții. Intr-o bucla se face AND cu masca pe caracter si se verifica flag-ul de zero (se face jnz). Daca bit-ul este 0, pe valoarea din imagine se face AND cu masca 0xFFFFFFFE, altfel se face OR cu masca 0x00000001. Pentru a avansa si a obtine restul biților se face SHIFT RIGHT. Functia returneaza numarul de scrieri, adica intotdeauna 8. Task 5: Se obtine byte_id-ul din argv[3] si se converteste la int prin apelul functiei atoi, apoi se apeleaza functia "lsb_decode" (cu acelasi prototip ca in enunt). Functia "lsb_decode" itereaza prin vectorul primit ca parametru, din 8 in 8, pornind de la byte_id. Aceasta apeleaza functia "build_char" care intoarce un BYTE ce este stocat pe stivă intr-o variabila locala. Functia "build_char" foloseste masca 0x00000001 pentru a obtine LSB-ul din valoarea curenta. Se verifica daca rezultatul operatiei AND este zero, caz in care se trece mai departe deoarece in EAX deja bitii au fost initializati cu 0, altfel se realizeaza operatia OR cu masca stocata in BL. Pentru a avansa se face SHIFT RIGHT pe aceasta masca. La final, valoarea din EAX reprezinta un caracter din mesajul criptat. Task 6: TODO:
About
No description or website provided.
Topics
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published