Kriptografski/kompresioni algoritmi
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Identifikacija algoritama
Ako naiđete u kodu koji koristi shift rights and lefts, xors i nekoliko aritmetičkih operacija, vrlo je verovatno da je to implementacija kriptografskog algoritma. Ovde će biti prikazani neki načini da se identifikuje koji algoritam se koristi bez potrebe da se reverzuje svaki korak.
API funkcije
CryptDeriveKey
Ako se ova funkcija koristi, možete naći koji algorithm is being used proverom vrednosti drugog parametra:
.png)
Pogledajte ovde tabelu mogućih algoritama i njihovih dodeljenih vrednosti: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
RtlCompressBuffer/RtlDecompressBuffer
Kompresuje i dekompresuje dati buffer podataka.
CryptAcquireContext
Prema the docs: Funkcija CryptAcquireContext se koristi za dobijanje handla ka određenom key container-u unutar određenog cryptographic service provider-a (CSP). Ovaj vraćeni handle se koristi u pozivima CryptoAPI funkcija koje koriste izabrani CSP.
CryptCreateHash
Pokreće hashing toka podataka. Ako se ova funkcija koristi, možete naći koji algorithm is being used proverom vrednosti drugog parametra:
.png)
Pogledajte ovde tabelu mogućih algoritama i njihovih dodeljenih vrednosti: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
Konstantne u kodu
Ponekad je zaista lako identifikovati algoritam zahvaljujući činjenici da mora da koristi neku specijalnu i jedinstvenu vrednost.
.png)
Ako pretražite prvu konstantu na Google-u, dobijate ovo:
.png)
Dakle, možete pretpostaviti da je dekompajlirana funkcija sha256 calculator.
Možete pretražiti bilo koju od ostalih konstanti i verovatno ćete dobiti isti rezultat.
Informacije iz .data
Ako kod nema značajnih konstanti, moguće je da učitava informacije iz .data sekcije.
Možete pristupiti tim podacima, grupisati prvi dword i potražiti ga na google-u kao što smo uradili u prethodnom delu:
.png)
U ovom slučaju, ako potražite 0xA56363C6 možete naći da je povezan sa tabelama AES algoritma.
RC4 (Symmetric Crypt)
Karakteristike
Sastoji se iz 3 glavna dela:
- Initialization stage/: Kreira tabelu vrednosti od 0x00 do 0xFF (ukupno 256 bajtova, 0x100). Ova tabela se obično zove Substitution Box (ili SBox).
- Scrambling stage: Prolazi kroz prethodno kreiranu tabelu (petlja od 0x100 iteracija, opet) i menja svaku vrednost pomoću polu-slučajnih bajtova. Za generisanje tih polu-slučajnih bajtova koristi se RC4 key. RC4 keys mogu biti između 1 i 256 bajtova, međutim obično se preporučuje da budu duži od 5 bajtova. Uobičajeno, RC4 keys su 16 bajtova.
- XOR stage: Konačno, plain-text ili cyphertext se XOR-uje sa vrednostima kreiranim ranije. Funkcija za enkripciju i dekripciju je ista. Za ovo će se izvršavati petlja kroz kreiranih 256 bajtova onoliko puta koliko je potrebno. Ovo se obično prepoznaje u dekompajliranom kodu pomoću %256 (mod 256).
Tip
Da biste identifikovali RC4 u disasembliranom/dekompajliranom kodu možete proveriti da li postoje 2 petlje veličine 0x100 (uz korišćenje ključa), a zatim XOR ulaznih podataka sa 256 vrednosti kreiranih u te dve petlje, verovatno koristeći %256 (mod 256)
Initialization stage/Substitution Box: (Obratite pažnju na broj 256 koji se koristi kao brojač i kako se u svako mesto od 256 piše 0)
.png)
Scrambling Stage:
.png)
XOR Stage:
.png)
AES (Symmetric Crypt)
Karakteristike
- Upotreba substitution boxes i lookup tabela
- Moguće je razlikovati AES zahvaljujući upotrebi specifičnih vrednosti u lookup tabelama (konstante). _Imajte na umu da konstanta može biti smeštena u binarnom fajlu ili kreirana dinamički.
- Encryption key mora biti deljiv sa 16 (obično 32B) i obično se koristi IV od 16B.
SBox constants
.png)
Serpent (Symmetric Crypt)
Karakteristike
- Retko se nalazi u malverima, ali postoje primeri (Ursnif)
- Jednostavno je odrediti da li je algoritam Serpent na osnovu njegove dužine (izuzetno duga funkcija)
Identifikacija
Na sledećoj slici obratite pažnju kako se koristi konstanta 0x9E3779B9 (napomena: ova konstanta se takođe koristi i u drugim kripto algoritmima kao što je TEA - Tiny Encryption Algorithm).
Takođe obratite pažnju na veličinu petlje (132) i broj XOR operacija u disasembliranim instrukcijama i u primeru koda:
.png)
Kao što je već pomenuto, ovaj kod se u bilo kom dekompajleru može prikazati kao veoma duga funkcija jer nema skokova unutar nje. Dekompajlirani kod može izgledati slično sledećem:
.png)
Dakle, moguće je identifikovati ovaj algoritam proverom magic number i početnih XOR-ova, uočavanjem veoma duge funkcije i upoređivanjem nekih instrukcija iz te duge funkcije sa implementacijom (npr. shift left za 7 i rotate left za 22).
RSA (Asymmetric Crypt)
Karakteristike
- Složeniji od simetričnih algoritama
- Nema konstanti! (prilagođene implementacije je teško odrediti)
- KANAL (a crypto analyzer) ne prikazuje indikacije za RSA jer se oslanja na konstante.
Identifikacija upoređivanjem
.png)
- U liniji 11 (levo) postoji
+7) >> 3što je isto kao u liniji 35 (desno):+7) / 8 - U liniji 12 (levo) se proverava
modulus_len < 0x040, a u liniji 36 (desno) se proveravainputLen+11 > modulusLen
MD5 & SHA (hash)
Karakteristike
- 3 funkcije: Init, Update, Final
- Slične funkcije za inicijalizaciju
Identifikacija
Init
Možete identifikovati oba proverom konstanti. Imajte na umu da sha_init ima jednu konstantu koju MD5 nema:
.png)
MD5 Transform
Obratite pažnju na upotrebu više konstanti
 (1) (1).png)
CRC (hash)
- Manji i efikasniji jer je njegova funkcija da pronađe slučajne promene u podacima
- Koristi lookup tabele (tako da možete identifikovati konstante)
Identifikacija
Proverite lookup table constants:
.png)
CRC hash algoritam izgleda ovako:
.png)
APLib (Compression)
Karakteristike
- Nema prepoznatljivih konstanti
- Možete pokušati da napišete algoritam u python-u i tražite sličnosti online
Identifikacija
Graf je prilično veliki:
 (2) (1).png)
Proverite 3 upoređenja da biste ga prepoznali:
.png)
Greške u implementacijama potpisa na eliptičkim krivama
EdDSA scalar range enforcement (HashEdDSA malleability)
- FIPS 186-5 §7.8.2 zahteva da HashEdDSA verifikatori raskomponuju potpis
sig = R || si odbace bilo koji skalar sas \geq n, gde jenred grupe.ellipticJS biblioteka je preskočila tu proveru ograničenja, pa svaki napadač koji zna važeći par(msg, R || s)može falsifikovati alternativne potpises' = s + k·ni nastaviti da re-enkodirasig' = R || s'. - Rutinе za verifikaciju koriste samo
s mod n, dakle svis'kongruentni sassu prihvaćeni iako su različiti bajt nizovi. Sistemi koji tretiraju potpise kao kanoničke tokene (blockchain consensus, replay caches, DB keys, itd.) mogu biti desinhronizovani jer strože implementacije će odbitis'. - Prilikom audita drugog HashEdDSA koda, osigurajte da parser validira i tačku
Ri dužinu skalara; pokušajte da dodate višekratnikenpoznato dobronamernomsda biste potvrdili da verifier zatvara pristup (fails closed).
ECDSA truncation vs. leading-zero hashes
- ECDSA verifikatori moraju koristiti samo levih
log2(n)bita hash-a porukeH. Uelliptic, pomoćna funkcija za truncation je izračunavaladelta = (BN(msg).byteLength()*8) - bitlen(n); konstruktorBNuklanja vodeće nul-octete, tako da je svaki hash koji počinje sa ≥4 nula bajta na krivama poput secp192r1 (192-bitni red) izgledao kao da ima samo 224 bita umesto 256. - Verifikator je right-shift-ovao za 32 bita umesto 64, proizvodeći
Ekoji se ne poklapa sa vrednošću koju koristi potpisivač. Važeći potpisi nad tim hash-evima stoga ne uspevaju sa verovatnoćom ≈2^-32za SHA-256 ulaze. - Pohranite i „sve u redu“ vektor i varijante sa vodećim nulama (npr. Wycheproof
ecdsa_secp192r1_sha256_test.jsonslučajtc296) u ciljnu implementaciju; ako verifier ne slaže sa potpisivačem, pronašli ste iskoristivu grešku u truncation-u.
Testiranje Wycheproof vektora protiv biblioteka
- Wycheproof isporučuje JSON test setove koji kodiraju malformirane tačke, malleable scalars, neuobičajene hash-eve i druge corner case-ove. Izgradnja harness-a oko
elliptic(ili bilo koje crypto biblioteke) je jednostavna: učitajte JSON, deserializujte svaki test slučaj i asertujte da implementacija odgovara očekivanomresultflag-u.
for (const tc of ecdsaVectors.testGroups) {
const curve = new EC(tc.curve);
const pub = curve.keyFromPublic(tc.key, 'hex');
const ok = curve.verify(tc.msg, tc.sig, pub, 'hex', tc.msgSize);
assert.strictEqual(ok, tc.result === 'valid');
}
- Neuspehe treba trijagovati kako bi se razlikovale povrede specifikacije od lažno pozitivnih rezultata. Za dve greške iznad, neuspešni Wycheproof testovi su odmah ukazali na nedostatak provere opsega skalarnih vrednosti (EdDSA) i pogrešno skraćivanje heša (ECDSA).
- Integrisati harness u CI tako da regresije u parsiranju skalarnih vrednosti, obradi heša ili validnosti koordinata pokreću testove čim se pojave. Ovo je posebno korisno za visokonivojske jezike (JS, Python, Go) gde je lako pogrešiti kod suptilnih bignum konverzija.
References
- Trail of Bits - We found cryptography bugs in the elliptic library using Wycheproof
- Wycheproof Test Suite
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks

