.. | ||
README.md | ||
unpacking-binaries.md |
Kriptografiese/Samepressingsalgoritmes
Kriptografiese/Samepressingsalgoritmes
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling van eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.
Identifisering van Algoritmes
As jy eindig in 'n kode wat skuifregs en -links, xors 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 wat gebruik word te identifiseer sonder om elke stap omkeer.
API-funksies
CryptDeriveKey
As hierdie funksie gebruik word, kan jy vind watter algoritme gebruik word deur die waarde van die tweede parameter te kontroleer:
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
Van die dokumente: Die CryptAcquireContext-funksie word gebruik om 'n handvatsel te bekom na 'n spesifieke sleutelhouer binne 'n spesifieke kriptografiese diensverskaffer (CSP). Hierdie teruggevoerde handvatsel word gebruik in oproepe na CryptoAPI-funksies wat die gekose CSP gebruik.
CryptCreateHash
Begin die hasjing van 'n stroom data. As hierdie funksie gebruik word, kan jy vind watter algoritme gebruik word deur die waarde van die tweede parameter te kontroleer:
Kyk hier na die tabel van moontlike algoritmes en hul toegewysde waardes: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
Kodekonstantes
Dikwels is dit baie maklik om 'n algoritme te identifiseer danksy 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 konstante het nie, kan dit wees dat dit inligting laai van die .data-afdeling.
Jy kan daardie data toegang, die eerste d-woord groepeer en daarnaar soek op 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 Kript)
Kenmerke
Dit bestaan uit 3 hoofdele:
- Inisialiseringstadium/: Skep 'n tabel van waardes van 0x00 tot 0xFF (totaal 256 byte, 0x100). Hierdie tabel word gewoonlik Substitusieblok (of SBox) genoem.
- Verwarringsstadium: Sal deur die tabel loop wat voorheen geskep is (lus van 0x100 iterasies, weer) 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: Laastens, word die platte teks of siferteks XORed met die waardes wat voorheen geskep is. Die funksie om te enkripteer en dekripteer is dieselfde. Hiervoor sal 'n lus deur die geskepte 256 byte uitgevoer word soveel keer as wat nodig is. 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/Substitusieblok: (Let op die nommer 256 wat as teller gebruik word en hoe 'n 0 in elke plek van die 256 karakters geskryf word)
Verwarringsstadium:
XOR-stadium:
AES (Simmetriese Kript)
Kenmerke
- Gebruik van substitusieblokke en opsoektabelle
- Dit is moontlik om AES te onderskei danksy die gebruik van spesifieke opsoektabelwaardes (konstantes). Let daarop dat die konstante in die binêre lêer gestoor kan word of dinamies geskep kan word.
- Die enkripsiesleutel moet deelbaar wees deur 16 (gewoonlik 32B) en gewoonlik word 'n IV van 16B gebruik.
SBox-konstantes
Serpent (Simmetriese Kript)
Kenmerke
- Dit is skaars om te vind dat sommige kwaadwillige sagteware dit gebruik, maar daar is voorbeelde (Ursnif)
- Dit is maklik om te bepaal of 'n algoritme Serpent is of nie gebaseer op sy lengte (uiters lang funksie)
Identifisering
Let in die volgende beeld 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 disassemblage-instruksies en in die kodevoorbeeld:
Soos voorheen genoem is, kan hierdie kode binne enige dekompiler gesien word as 'n baie lang funksie omdat daar geen spronge binne-in is nie. Die gedekomponeerde kode kan lyk soos die volgende:
Daarom is dit moontlik om hierdie algoritme te identifiseer deur die sielkundige nommer en die aanvanklike XORs te kontroleer, 'n baie lang funksie te sien en sommige instruksies van die lang funksie te vergelyk met 'n implementering (soos die skuif links met 7 en die draai links met 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-analiseerder) misluk om wenke oor RSA te toon aangesien dit op konstantes staatmaak.
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 ofinputLen+11 > modulusLen
MD5 & SHA (hash)
Kenmerke
- 3 funksies: Init, Update, Final
- Soortgelyke inisialiseerfunksies
Identifiseer
Init
Jy kan albei identifiseer deur die konstantes te kontroleer. Let daarop dat die sha_init 1 konstante het wat MD5 nie het nie:
MD5 Transformeer
Let op die gebruik van meer konstantes
CRC (hash)
- Kleiner en meer doeltreffend aangesien dit daarop gemik is om toevallige veranderings in data te vind
- Gebruik opsoektabelle (sodat jy konstantes kan identifiseer)
Identifiseer
Kontroleer opsoektabel konstantes:
‘n CRC-hash-algoritme lyk soos:
APLib (Kompresie)
Kenmerke
- Nie-herkenbare konstantes
- Jy kan probeer om die algoritme in Python te skryf en soek na soortgelyke dinge aanlyn
Identifiseer
Die grafiek is redelik groot:
Kontroleer 3 vergelykings om dit te herken: