Kriptografiese/Kompressie Algoritmes

Reading time: 7 minutes

Kriptografiese/Kompressie Algoritmes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

Identifisering van Algoritmes

As jy eindig in 'n kode wat regte en linke skuif, xors en verskeie aritmetiese operasies gebruik, is dit hoogs waarskynlik dat dit die implementering van 'n kriptografiese algoritme is. Hier gaan daar 'n paar maniere gewys word om die algoritme wat gebruik word te identifiseer sonder om elke stap om te keer.

API funksies

CryptDeriveKey

As hierdie funksie gebruik word, kan jy vind watter algoritme gebruik word deur die waarde van die tweede parameter te kontroleer:

Kontroleer hier die tabel van moontlike algoritmes en hul toegewyde waardes: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

RtlCompressBuffer/RtlDecompressBuffer

Komprimeer en dekomprimeer 'n gegewe buffer van data.

CryptAcquireContext

Van die dokumentasie: Die CryptAcquireContext funksie word gebruik om 'n handvatsel te verkry na 'n spesifieke sleutelhouer binne 'n spesifieke kriptografiese diensverskaffer (CSP). Hierdie teruggegee handvatsel word gebruik in oproepe na CryptoAPI funksies wat die geselekteerde CSP gebruik.

CryptCreateHash

Begin die hashing van 'n datastroom. As hierdie funksie gebruik word, kan jy vind watter algoritme gebruik word deur die waarde van die tweede parameter te kontroleer:


Kontroleer hier die tabel van moontlike algoritmes en hul toegewyde waardes: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

Kode konstantes

Soms is dit regtig maklik om 'n algoritme te identifiseer danksy die feit dat dit 'n spesiale en unieke waarde moet gebruik.

As jy die eerste konstante in Google soek, is dit wat jy kry:

Daarom kan jy aanvaar dat die dekompilde funksie 'n sha256 sakrekenaar is.
Jy kan enige van die ander konstantes soek en jy sal (waarskynlik) dieselfde resultaat verkry.

data info

As die kode geen betekenisvolle konstante het nie, kan dit inligting laai vanaf die .data afdeling.
Jy kan daardie data toegang, groepeer die eerste dword en dit in Google soek soos ons in die vorige afdeling gedoen het:

In hierdie geval, as jy soek na 0xA56363C6 kan jy vind dat dit verband hou met die tabelle van die AES algoritme.

RC4 (Simmetriese Kriptografie)

Kenmerke

Dit bestaan uit 3 hoofdele:

  • Inisialisering fase/: Skep 'n tabel van waardes van 0x00 tot 0xFF (256bytes in totaal, 0x100). Hierdie tabel word algemeen die Substitusie Boks (of SBox) genoem.
  • Hussel fase: Sal deur die tabel loop wat voorheen geskep is (lus van 0x100 iterasies, weer) en elke waarde met semi-ewe bytes aanpas. Om hierdie semi-ewe bytes te skep, word die RC4 sleutel gebruik. RC4 sleutels kan tussen 1 en 256 bytes in lengte wees, maar dit word gewoonlik aanbeveel dat dit bo 5 bytes is. Gewoonlik is RC4 sleutels 16 bytes in lengte.
  • XOR fase: Laastens, die plain-text of cyphertext word XORed met die waardes wat voorheen geskep is. Die funksie om te enkripteer en te dekripteer is dieselfde. Hiervoor sal 'n lus deur die geskepte 256 bytes uitgevoer word soveel keer as wat nodig is. Dit word gewoonlik in 'n dekompilde kode erken met 'n %256 (mod 256).

note

Om 'n RC4 in 'n disassembly/dekompilde kode te identifiseer, kan jy kyk vir 2 lusse van grootte 0x100 (met die gebruik van 'n sleutel) en dan 'n XOR van die invoerdata met die 256 waardes wat voorheen in die 2 lusse geskep is, waarskynlik met 'n %256 (mod 256)

Inisialisering fase/Substitusie Boks: (Let op die nommer 256 wat as teenwoordiger gebruik word en hoe 'n 0 in elke plek van die 256 karakters geskryf word)

Hussel Fase:

XOR Fase:

AES (Simmetriese Kriptografie)

Kenmerke

  • Gebruik van substitusie bokse en opsoek tabelle
  • Dit is moontlik om AES te onderskei danksy die gebruik van spesifieke opsoek tabel waardes (konstantes). _Let daarop dat die konstante in die binêre gestoor kan word of geskep _ dynamies.
  • Die enkripsiesleutel moet deelbaar wees deur 16 (gewoonlik 32B) en gewoonlik word 'n IV van 16B gebruik.

SBox konstantes

Serpent (Simmetriese Kriptografie)

Kenmerke

  • Dit is selde om sekere malware wat dit gebruik te vind, maar daar is voorbeelde (Ursnif)
  • Eenvoudig om te bepaal of 'n algoritme Serpent is of nie gebaseer op sy lengte (uiters lang funksie)

Identifisering

In die volgende beeld let op hoe die konstante 0x9E3779B9 gebruik word (let daarop dat hierdie konstante ook deur ander kripto algoritmes soos TEA -Tiny Encryption Algorithm gebruik word).
Let ook op die grootte van die lus (132) en die aantal XOR operasies in die disassembly instruksies en in die kode voorbeeld:

Soos voorheen genoem, kan hierdie kode binne enige decompiler as 'n baie lang funksie gesien word aangesien daar nie spronge binne dit is nie. Die dekompilde kode kan soos volg lyk:

Daarom is dit moontlik om hierdie algoritme te identifiseer deur die magiese nommer en die begin XORs te kontroleer, 'n baie lang funksie te sien en instruksies van die lang funksie te vergelyk met 'n implementering (soos die skuif links deur 7 en die rotasie links deur 22).

RSA (Asimmetriese Kriptografie)

Kenmerke

  • Meer kompleks as simmetriese algoritmes
  • Daar is geen konstantes nie! (aangepaste implementasies is moeilik om te bepaal)
  • KANAL (n kripto ontleder) misluk om leidrade oor RSA te toon en dit staatmaak op konstantes.

Identifisering deur vergelykings

  • In lyn 11 (links) is daar 'n +7) >> 3 wat dieselfde is as in lyn 35 (regs): +7) / 8
  • Lyn 12 (links) kontroleer of modulus_len < 0x040 en in lyn 36 (regs) kontroleer dit of inputLen+11 > modulusLen

MD5 & SHA (hash)

Kenmerke

  • 3 funksies: Init, Update, Final
  • Soortgelyke inisialisering funksies

Identifiseer

Init

Jy kan albei identifiseer deur die konstantes te kontroleer. Let daarop dat die sha_init 'n konstante het wat MD5 nie het nie:

MD5 Transform

Let op die gebruik van meer konstantes

CRC (hash)

  • Kleiner en meer doeltreffend aangesien dit se funksie is om toevallige veranderinge in data te vind
  • Gebruik opsoek tabelle (so jy kan konstantes identifiseer)

Identifiseer

Kontroleer opsoek tabel konstantes:

'n CRC hash algoritme lyk soos:

APLib (Kompressie)

Kenmerke

  • Nie herkenbare konstantes
  • Jy kan probeer om die algoritme in python te skryf en soortgelyke dinge aanlyn te soek

Identifiseer

Die grafiek is redelik groot:

Kontroleer 3 vergelykings om dit te herken:

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks