Cryptographic/Compression Algorithms

Kriptografski/Kompresioni Algoritmi

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Identifikacija Algoritama

Ako završite u kodu koristeći pomeranja udesno i ulevo, ekskluzivno ili i nekoliko aritmetičkih operacija vrlo je moguće da je to implementacija kriptografskog algoritma. Ovde će biti prikazani neki načini za identifikaciju algoritma koji se koristi bez potrebe za vraćanjem svakog koraka.

API funkcije

CryptDeriveKey

Ako se koristi ova funkcija, možete pronaći koji algoritam se koristi proverom vrednosti drugog parametra:

Proverite ovde tabelu mogućih algoritama i njihove dodeljene vrednosti: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

RtlCompressBuffer/RtlDecompressBuffer

Kompresuje i dekompresuje dati bafer podataka.

CryptAcquireContext

Iz dokumenata: Funkcija CryptAcquireContext se koristi za dobijanje ručke ka određenom kontejneru ključeva unutar određenog provajdera kriptografskih usluga (CSP). Ova vraćena ručka se koristi u pozivima funkcija CryptoAPI koje koriste izabrani CSP.

CryptCreateHash

Pokreće heširanje toka podataka. Ako se koristi ova funkcija, možete pronaći koji algoritam se koristi proverom vrednosti drugog parametra:

Proverite ovde tabelu mogućih algoritama i njihove dodeljene vrednosti: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

Konstante koda

Ponekad je zaista lako identifikovati algoritam zahvaljujući činjenici da mora koristiti posebnu i jedinstvenu vrednost.

Ako pretražite prvu konstantu na Google-u, dobićete ovo:

Stoga, možete pretpostaviti da je dekompilirana funkcija kalkulator sha256. Možete pretražiti bilo koju drugu konstantu i verovatno ćete dobiti isti rezultat.

informacije o podacima

Ako kod nema značajne konstante, možda učitava informacije iz .data sekcije. Možete pristupiti tim podacima, grupisati prvi dvojni reč i pretražiti ga na Google-u kao što smo uradili u prethodnom odeljku:

U ovom slučaju, ako potražite 0xA56363C6 možete saznati da je povezano sa tabelama algoritma AES.

RC4 (Simetrična Kriptografija)

Karakteristike

Sastoji se od 3 glavna dela:

  • Faza inicijalizacije/: Kreira tabelu vrednosti od 0x00 do 0xFF (ukupno 256 bajtova, 0x100). Ova tabela se obično naziva Substitution Box (ili SBox).

  • Faza mešanja: Će proći kroz prethodno kreiranu tabelu (petlja od 0x100 iteracija, ponovo) modifikujući svaku vrednost sa polu-slučajnim bajtovima. Da bi se kreirali ovi polu-slučajni bajtovi, koristi se RC4 ključ. RC4 ključevi mogu biti između 1 i 256 bajtova u dužini, međutim obično se preporučuje da bude iznad 5 bajtova. Obično, RC4 ključevi su dužine 16 bajtova.

  • XOR faza: Na kraju, plain-text ili cipertekst je XOR-ovan sa vrednostima kreiranim pre. Funkcija za šifrovanje i dešifrovanje je ista. Za ovo, petlja kroz kreiranih 256 bajtova će se izvršiti onoliko puta koliko je potrebno. Ovo se obično prepoznaje u dekompiliranom kodu sa %256 (mod 256).

Da biste identifikovali RC4 u disasembliranom/dekompiliranom kodu, možete proveriti 2 petlje veličine 0x100 (sa korišćenjem ključa) i zatim XOR ulaznih podataka sa 256 vrednosti kreiranih pre u 2 petlje verovatno koristeći %256 (mod 256)

Faza inicijalizacije/Substitution Box: (Obratite pažnju na broj 256 korišćen kao brojač i kako je 0 upisan na svako mesto od 256 karaktera)

Faza mešanja:

XOR faza:

AES (Simetrična Kriptografija)

Karakteristike

  • Korišćenje substitution box-ova i lookup tabela

  • Moguće je razlikovati AES zahvaljujući korišćenju specifičnih vrednosti lookup tabela (konstanti). Imajte na umu da se konstanta može skladištiti u binarnom obliku ili kreirati dinamički.

  • Ključ za šifrovanje mora biti deljiv sa 16 (obično 32B) i obično se koristi IV od 16B.

SBox konstante

Serpent (Simetrična Kriptografija)

Karakteristike

  • Retko je pronaći malver koji ga koristi ali postoje primeri (Ursnif)

  • Jednostavno je odrediti da li je algoritam Serpent ili ne na osnovu njegove dužine (izuzetno duga funkcija)

Identifikacija

U sledećoj slici primetite kako se koristi konstanta 0x9E3779B9 (imajte na umu da se ova konstanta takođe koristi i u drugim kripto algoritmima poput TEA -Tiny Encryption Algorithm). Takođe obratite pažnju na veličinu petlje (132) i broj XOR operacija u instrukcijama disasemblera i u primeru koda:

Kao što je pomenuto ranije, ovaj kod može biti vizualizovan unutar bilo kog dekompajlera kao vrlo duga funkcija jer unutar nje nema skokova. Dekompilirani kod može izgledati ovako:

Stoga je moguće identifikovati ovaj algoritam proverom magičnog broja i početnih XOR-ova, videći vrlo dugu funkciju i upoređujući neke instrukcije iz duge funkcije sa implementacijom (kao što je pomeranje ulevo za 7 i rotacija ulevo za 22).

RSA (Asimetrična kriptografija)

Karakteristike

  • Složenija od simetričnih algoritama

  • Nema konstanti! (prilagođene implementacije su teške za odrediti)

  • KANAL (kripto analizator) ne uspeva da pokaže naznake o RSA jer se oslanja na konstante.

Identifikacija pomoću poređenja

  • U liniji 11 (levo) postoji +7) >> 3 što je isto kao u liniji 35 (desno): +7) / 8

  • Linija 12 (levo) proverava da li je modulus_len < 0x040 i u liniji 36 (desno) proverava da li je inputLen+11 > modulusLen

MD5 & SHA (heš)

Karakteristike

  • 3 funkcije: Init, Update, Final

  • Slične inicijalizacijske funkcije

Identifikacija

Init

Možete ih identifikovati proverom konstanti. Imajte na umu da sha_init ima 1 konstantu koju MD5 nema:

MD5 Transform

Primetite korišćenje više konstanti

CRC (heš)

  • Manji i efikasniji jer je njegova funkcija da pronađe slučajne promene u podacima

  • Koristi tabele za pretragu (tako da možete identifikovati konstante)

Identifikacija

Proverite konstante u tabeli za pretragu:

Algoritam heširanja CRC izgleda ovako:

APLib (Kompresija)

Karakteristike

  • Nerecognoscibilne konstante

  • Možete pokušati da napišete algoritam u Pythonu i tražite slične stvari na mreži

Identifikacija

Grafikon je prilično velik:

Proverite 3 poređenja da biste ga prepoznali:

Last updated