hacktricks/crypto-and-stego/cryptographic-algorithms
2024-05-05 22:43:52 +00:00
..
README.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-05-05 22:43:52 +00:00
unpacking-binaries.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/REA 2024-04-07 03:13:19 +00:00

Kriptografik/Sıkıştırma Algoritmaları

Kriptografik/Sıkıştırma Algoritmaları

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'ı desteklemenin diğer yolları:

Algoritmaları Tanımlama

Eğer bir kod kaydırma işlemleri, XOR'lar ve çeşitli aritmetik işlemler içeriyorsa, büyük ihtimalle bir kriptografik algoritmanın uygulanmasıdır. Burada, her adımı tersine çevirmeye gerek kalmadan kullanılan algoritmayı tanımlamanın bazı yolları gösterilecektir.

API fonksiyonları

CryptDeriveKey

Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek hangi algoritmanın kullanıldığını bulabilirsiniz:

Mümkün algoritmaların ve atanan değerlerin tablosu için buraya bakabilirsiniz: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

RtlCompressBuffer/RtlDecompressBuffer

Veri tamponunu sıkıştırır ve açar.

CryptAcquireContext

Belgelerden: CryptAcquireContext fonksiyonu, belirli bir kriptografik hizmet sağlayıcısı (CSP) içinde belirli bir anahtar konteynerine bir tutamaç almak için kullanılır. Bu döndürülen tutamaç, seçilen CSP'yi kullanan CryptoAPI fonksiyonlarında kullanılır.

CryptCreateHash

Veri akışının karma işlemini başlatır. Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek hangi algoritmanın kullanıldığını bulabilirsiniz:

Mümkün algoritmaların ve atanan değerlerin tablosu için buraya bakabilirsiniz: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

Kod sabitleri

Bazen bir algoritmayı tanımlamak gerçekten kolay olabilir çünkü özel ve benzersiz bir değeri kullanması gerekir.

Google'da ilk sabit arandığında elde edilen sonuç:

Bu nedenle, dekompilasyon işlevinin bir sha256 hesaplayıcısı olduğunu varsayabilirsiniz. Diğer sabitlerden herhangi birini arayabilir ve (muhtemelen) aynı sonucu elde edersiniz.

Veri bilgisi

Kodda anlamlı bir sabit yoksa, muhtemelen .veri bölümünden bilgi yükleniyor demektir.
Bu veriye erişebilir, ilk dört byt'ı gruplayabilir ve yukarıda yaptığımız gibi Google'da arayabilirsiniz:

Bu durumda, 0xA56363C6'ya baktığınızda, bunun AES algoritmasının tablolarıyla ilişkili olduğunu bulabilirsiniz.

RC4 (Simetrik Şifreleme)

Özellikler

  • Başlatma aşaması/: 0x00 ile 0xFF arasındaki değerlerin bir tablosunu oluşturur (toplamda 256 byte, 0x100). Bu tablo genellikle Yerine Koyma Kutusu (veya SBox) olarak adlandırılır.
  • Karıştırma aşaması: Önceki oluşturulan tablo üzerinden döngü yapacak ve her değeri yarı rastgele byte'larla değiştirerek (tekrar 0x100 iterasyon döngüsü) karıştıracaktır. Bu yarı rastgele byte'ları oluşturmak için RC4 anahtarı kullanılır. RC4 anahtarları genellikle 1 ile 256 byte arasında olabilir, ancak genellikle 5 bytedan fazla olması önerilir. Genellikle, RC4 anahtarları 16 byte uzunluğundadır.
  • XOR aşaması: Son olarak, düz metin veya şifreli metin, önceki oluşturulan değerlerle XOR edilir. Şifrelemek ve şifre çözmek için aynı işlev kullanılır. Bunun için, oluşturulan 256 byte üzerinde bir döngü gerektiği kadar çok kez yapılır. Bu genellikle bir dekompilasyon kodunda %256 (mod 256) ile tanınır.

{% hint style="info" %} RC4'ü bir dekompilasyon/derlenmiş kodda tanımlamak için anahtar kullanarak 0x100 boyutunda 2 döngü ve muhtemelen %256 (mod 256) kullanarak 2 döngüde oluşturulan 256 değerle giriş verisinin XOR'landığını kontrol edebilirsiniz. {% endhint %}

Başlatma aşaması/Yerine Koyma Kutusu: (256 sayısı kullanılan sayacı ve 256 karakterin her bir yerine 0 yazıldığına dikkat edin)

Karıştırma Aşaması:

XOR Aşaması:

AES (Simetrik Şifreleme)

Özellikler

  • Yerine koyma kutuları ve arama tabloları kullanımı
  • Belirli arama tablosu değerlerinin (sabitlerin) kullanımı sayesinde AES'i ayırt etmek mümkündür. Sabit'in ikili dosyada saklanabileceğine veya dinamik olarak oluşturulabileceğine dikkat edin.
  • Şifreleme anahtarı, 16'ya bölünebilmelidir (genellikle 32B) ve genellikle 16B'lik bir IV kullanılır.

SBox sabitleri

Yılan (Simetrik Şifreleme)

Özellikler

  • Kullanan bazı kötü amaçlı yazılımların nadir olduğu ancak örneklerin bulunduğu (Ursnif gibi)
  • Bir algoritmanın Serpent olup olmadığını belirlemek oldukça basittir, uzunluğuna (son derece uzun işlev) dayanarak.

Tanımlama

Aşağıdaki resimde 0x9E3779B9 sabitinin kullanıldığına dikkat edin (bu sabitin TEA -Tiny Encryption Algorithm gibi diğer kripto algoritmalarında da kullanıldığını unutmayın).
Ayrıca döngü boyutunu (132) ve XOR işlemlerinin sayısını derleme talimatlarında ve örnek kodda fark edin:

Daha önce belirtildiği gibi, bu kod, içinde atlamalar olmadığı için bir dekompiler içinde çok uzun bir işlev olarak görülebilir. Dekompilasyon kodu aşağıdaki gibi görünebilir:

RSA (Asimetrik Şifreleme)

Özellikler

  • Simetrik algoritmalardan daha karmaşıktır
  • Sabitler yoktur! (özel uygulamaları belirlemek zordur)
  • KANAL (bir şifre analizörü) RSA hakkında ipuçları veremez çünkü sabitlere dayanır.

Karşılaştırma Yoluyla Tanımlama

  • Sol tarafta 11. satırda +7) >> 3 sağ tarafta 35. satırda aynıdır: +7) / 8
  • Sol tarafta 12. satır modulus_len < 0x040'ı kontrol ederken sağ tarafta 36. satır inputLen+11 > modulusLen'i kontrol eder.

MD5 & SHA (hash)

Özellikler

  • 3 fonksiyon: Init, Update, Final
  • Benzer başlatma fonksiyonları

Tanımlama

Init

Her ikisini de sabitlere bakarak tanımlayabilirsiniz. SHA_init'in MD5'te olmayan 1 sabiti olduğunu unutmayın:

MD5 Dönüşümü

Daha fazla sabit kullanımına dikkat edin

CRC (hash)

  • Verideki kazara değişiklikleri bulma işlevi nedeniyle daha küçük ve daha verimlidir
  • Sabitleri tanımlamak için arama tabloları kullanır

Tanımlama

Arama tablosu sabitlerini kontrol edin:

Bir CRC hash algoritması şuna benzer:

APLib (Sıkıştırma)

Özellikler

  • Tanınabilir sabitler yoktur
  • Algoritmayı python'da yazmayı deneyebilir ve benzer şeyleri çevrimiçi arayabilirsiniz

Tanımlama

Grafik oldukça büyüktür:

Tanımak için 3 karşılaştırmayı kontrol edin: