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

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Algoritmaları Tanımlama

Eğer bir kod sağ ve sol kaydırmalar, XOR'lar ve çeşitli aritmetik işlemler kullanıyorsa, bunun bir kriptografik algoritmanın uygulanması olması oldukça olası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:

Olası algoritmalar ve atanan değerleri için buraya bakın: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

RtlCompressBuffer/RtlDecompressBuffer

Verilen bir veri tamponunu sıkıştırır ve açar.

CryptAcquireContext

Belgelerden: CryptAcquireContext fonksiyonu, belirli bir kriptografik hizmet sağlayıcısı (CSP) içindeki belirli bir anahtar konteynerine bir tanıtıcı almak için kullanılır. Bu döndürülen tanıtıcı, seçilen CSP'yi kullanan CryptoAPI fonksiyonlarına yapılan çağrılarda kullanılır.

CryptCreateHash

Bir veri akışının hash'ini başlatır. Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek hangi algoritmanın kullanıldığını bulabilirsiniz:


Olası algoritmalar ve atanan değerleri için buraya bakın: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

Kod sabitleri

Bazen, bir algoritmayı tanımlamak gerçekten kolaydır çünkü özel ve benzersiz bir değer kullanması gerekir.

Eğer ilk sabiti Google'da ararsanız, bu sonucu alırsınız:

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

veri bilgisi

Eğer kodda herhangi bir önemli sabit yoksa, bu .data bölümünden bilgi yüklüyor olabilir.
Bu veriye erişebilir, ilk dword'u gruplandırabilir ve önceki bölümde yaptığımız gibi Google'da arama yapabilirsiniz:

Bu durumda, eğer 0xA56363C6'yı ararsanız, bunun AES algoritmasının tablolarıyla ilişkili olduğunu bulabilirsiniz.

RC4 (Simetrik Kriptografi)

Özellikler

3 ana bölümden oluşur:

  • Başlatma aşaması/: 0x00'dan 0xFF'e kadar değerler içeren bir tablo oluşturur (toplam 256 bayt, 0x100). Bu tablo genellikle Yer Değiştirme Kutusu (veya SBox) olarak adlandırılır.
  • Karıştırma aşaması: Önceden oluşturulan tabloyu döngüye alır (0x100 yineleme döngüsü) ve her değeri yarı rastgele baytlarla değiştirir. Bu yarı rastgele baytları oluşturmak için RC4 anahtarı kullanılır. RC4 anahtarları 1 ile 256 bayt arasında olabilir, ancak genellikle 5 bayttan fazla olması önerilir. Genellikle, RC4 anahtarları 16 bayt uzunluğundadır.
  • XOR aşaması: Son olarak, düz metin veya şifreli metin, önceden oluşturulan değerlerle XOR'lanır. Şifreleme ve şifre çözme fonksiyonu aynıdır. Bunun için, oluşturulan 256 bayt üzerinden gerekli olduğu kadar döngü yapılacaktır. Bu genellikle decompile edilmiş kodda %256 (mod 256) ile tanınır.

tip

Bir disassembly/decompile edilmiş kodda RC4'ü tanımlamak için, 0x100 boyutunda 2 döngü kontrol edebilir ve ardından giriş verilerinin 2 döngüde oluşturulan 256 değerle XOR'lanmasını, muhtemelen bir %256 (mod 256) kullanarak kontrol edebilirsiniz.

Başlatma aşaması/Yer Değiştirme Kutusu: (Sayacın olarak kullanılan 256 sayısına ve 256 karakterin her yerinde 0 yazılmasına dikkat edin)

Karıştırma Aşaması:

XOR Aşaması:

AES (Simetrik Kriptografi)

Özellikler

  • Yer değiştirme kutuları ve arama tabloları kullanımı
  • Belirli arama tablo değerlerinin (sabitlerin) kullanımı sayesinde AES'i ayırmak mümkündür. _Not edin ki sabit ikili dosyada saklanabilir veya dinamik olarak oluşturulabilir.
  • Şifreleme anahtarı 16'ya (genellikle 32B) tam bölünebilir olmalıdır ve genellikle 16B'lik bir IV kullanılır.

SBox sabitleri

Serpent (Simetrik Kriptografi)

Özellikler

  • Bunu kullanan bazı kötü amaçlı yazılımlar bulmak nadirdir ama örnekler vardır (Ursnif)
  • Bir algoritmanın Serpent olup olmadığını belirlemek basittir, uzunluğu (son derece uzun fonksiyon)

Tanımlama

Aşağıdaki resimde 0x9E3779B9 sabitinin nasıl kullanıldığına dikkat edin (bu sabitin ayrıca TEA -Küçük Şifreleme Algoritması gibi diğer kripto algoritmalarında da kullanıldığını unutmayın).
Ayrıca döngünün boyutuna (132) ve disassembly talimatlarındaki ve kod örneğindeki XOR işlemleri sayısına dikkat edin:

Daha önce belirtildiği gibi, bu kod herhangi bir decompiler içinde çok uzun bir fonksiyon olarak görselleştirilebilir çünkü içinde atlamalar yoktur. Decompile edilmiş kod aşağıdaki gibi görünebilir:

Bu nedenle, bu algoritmayı tanımlamak, büyü numarayı ve ilk XOR'ları kontrol ederek, çok uzun bir fonksiyon görerek ve uzun fonksiyonun bazı talimatlarını (örneğin, 7'ye sola kaydırma ve 22'ye sola döndürme) bir uygulama ile karşılaştırarak mümkündür.

RSA (Asimetrik Kriptografi)

Özellikler

  • Simetrik algoritmalardan daha karmaşık
  • Sabit yok! (özel uygulamaların belirlenmesi zordur)
  • KANAL (bir kripto analizörü) RSA hakkında ipuçları gösteremiyor çünkü sabitlere dayanıyor.

Karşılaştırmalarla Tanımlama

    1. satırda (solda) +7) >> 3 var, bu sağdaki 35. satırda da aynı: +7) / 8
    1. satır (solda) modulus_len < 0x040 kontrol ediyor ve 36. satırda (sağda) inputLen+11 > modulusLen kontrol ediliyor.

MD5 & SHA (hash)

Özellikler

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

Tanımlama

Init

Her ikisini de sabitleri kontrol ederek tanımlayabilirsiniz. sha_init'in MD5'de olmayan 1 sabiti olduğunu unutmayın:

MD5 Dönüşümü

Daha fazla sabit kullanıldığına dikkat edin

CRC (hash)

  • Daha küçük ve daha verimli çünkü işlevi verilerdeki kazara değişiklikleri bulmaktır
  • Sabitleri tanımlamak için arama tabloları kullanır

Tanımlama

arama tablo sabitlerini kontrol edin:

Bir CRC hash algoritması şöyle görünür:

APLib (Sıkıştırma)

Özellikler

  • Tanınabilir sabitler yok
  • Algoritmayı Python'da yazmayı deneyebilir ve çevrimiçi benzer şeyler arayabilirsiniz

Tanımlama

Grafik oldukça büyük:

Bunu tanımak için 3 karşılaştırmaya bakın:

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin