hacktricks/reversing/cryptographic-algorithms/README.md
2024-02-11 02:07:06 +00:00

9.2 KiB
Raw Blame History

Kriptografiese/Samepersingsalgoritmes

Kriptografiese/Samepersingsalgoritmes

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Identifisering van Algoritmes

As jy in 'n kode eindig wat skuifregs en -links, XOR's en verskeie rekenkundige bewerkings gebruik, is dit baie moontlik dat dit die implementering van 'n kriptografiese algoritme is. Hier sal 'n paar maniere getoon word om die algoritme 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 ondersoek:

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

RtlCompressBuffer/RtlDecompressBuffer

Kompresseer en dekompresseer 'n gegewe databuffer.

CryptAcquireContext

Vanaf die dokumentasie: Die CryptAcquireContext-funksie word gebruik om 'n handvatsel te bekom na 'n spesifieke sleutelhouer binne 'n spesifieke kriptografiese diensverskaffer (CSP). Hierdie teruggekeerde handvatsel word gebruik in oproepe na CryptoAPI-funksies wat die gekose CSP gebruik.

CryptCreateHash

Begin die hasing van 'n stroom data. As hierdie funksie gebruik word, kan jy vind watter algoritme gebruik word deur die waarde van die tweede parameter te ondersoek:

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

Kodekonstantes

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

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

Daarom kan jy aanneem dat die gedekomponeerde funksie 'n sha256-kalkulator is.
Jy kan enige van die ander konstantes soek en jy sal waarskynlik dieselfde resultaat kry.

data-inligting

As die kode nie enige beduidende konstantes het nie, laai dit dalk inligting van die .data-afdeling.
Jy kan daardie data toegang, die eerste dword groepeer en soek daarna in Google 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:

  • Inisialiseringstadium/: Skep 'n tabel van waardes van 0x00 tot 0xFF (totaal 256 byte, 0x100). Hierdie tabel word gewoonlik die Vervangingstabel (of SBox) genoem.
  • Verwarringstadium: Sal deur die vooraf geskepte tabel loop (weer 'n lus van 0x100 iterasies) en elke waarde wysig met semi-willekeurige byte. Om hierdie semi-willekeurige byte te skep, word die RC4 sleutel gebruik. RC4-sleutels kan tussen 1 en 256 byte lank wees, maar dit word gewoonlik aanbeveel dat dit meer as 5 byte is. Gewoonlik is RC4-sleutels 16 byte lank.
  • XOR-stadium: Uiteindelik word die oorspronklike teks of siferteks XOR met die vooraf geskepte waardes. Die funksie om te enkripteer en dekripteer is dieselfde. Hiervoor sal 'n lus deur die geskepte 256 byte uitgevoer word soveel keer as nodig. Dit word gewoonlik herken in 'n gedekomponeerde kode met 'n %256 (mod 256).

{% hint style="info" %} Om 'n RC4 in 'n disassemblage/gedekomponeerde kode te identifiseer, kan jy kyk vir 2 lusse van grootte 0x100 (met die gebruik van 'n sleutel) en dan 'n XOR van die insetdata met die 256 waardes wat voorheen in die 2 lusse geskep is, waarskynlik met behulp van 'n %256 (mod 256) {% endhint %}

Inisialiseringstadium/Vervangingstabel: (Let op die getal 256 wat as teller gebruik word en hoe 'n 0 in elke plek van die 256 karakters geskryf word)

Verwarringstadium:

XOR-stadium:

AES (Simmetriese Kriptografie)

Kenmerke

  • Gebruik van vervangingstabelle en opsoektabelle
  • Dit is moontlik om AES te onderskei deur die gebruik van spesifieke opsoektabelwaardes (konstantes). Let daarop dat die konstante in die binêre geberg of dinamies geskep kan word.
  • Die enkripsiesleutel moet deur 16 deelbaar wees (gewoonlik 32B) en gewoonlik word 'n IV van 16B gebruik.

SBox-konstantes

Serpent (Simmetriese Kriptografie)

Kenmerke

  • Dit is selde om kwaadwillige sagteware te vind wat dit gebruik, maar daar is voorbeelde (Ursnif)
  • Dit is maklik om te bepaal of 'n algoritme Serpent is of nie op grond van sy lengte (uiters lang funksie)

Identifisering

Let in die volgende prentjie daarop 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 l

RSA (Asimmetriese Kriptografie)

Kenmerke

  • Meer kompleks as simmetriese algoritmes
  • Daar is geen konstantes nie! (aangepaste implementasies is moeilik om te bepaal)
  • KANAL (n kripto-analiseerder) kan nie RSA aanwysings gee nie, omdat dit afhang van 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) kyk of modulus_len < 0x040 en in lyn 36 (regs) kyk dit of inputLen+11 > modulusLen

MD5 & SHA (hash)

Kenmerke

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

Identifiseer

Init

Jy kan albei identifiseer deur die konstantes te kyk. Let daarop dat sha_init een konstante het wat MD5 nie het nie:

MD5 Transformeer

Let op die gebruik van meer konstantes

CRC (hash)

  • Kleiner en meer doeltreffend omdat dit ontwerp is om toevallige veranderinge in data te vind
  • Gebruik soektabelle (sodat jy konstantes kan identifiseer)

Identifiseer

Kyk na soektabelkonstantes:

n CRC-hash-algoritme lyk soos:

APLib (Kompresie)

Kenmerke

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

Identifiseer

Die grafiek is baie groot:

Kyk na 3 vergelykings om dit te herken:

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: