hacktricks/reversing/cryptographic-algorithms
2024-01-09 13:00:50 +00:00
..
README.md Translated ['pentesting-web/dangling-markup-html-scriptless-injection/ss 2024-01-01 20:59:40 +00:00
unpacking-binaries.md Translated ['physical-attacks/escaping-from-gui-applications/README.md', 2024-01-09 13:00:50 +00:00

暗号化/圧縮アルゴリズム

暗号化/圧縮アルゴリズム

htARTE (HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法:

アルゴリズムの特定

もしコードがシフト右、シフト左、XOR、複数の算術演算を使用している場合、それは暗号化アルゴリズムの実装である可能性が高いです。ここでは、各ステップを逆にする必要なく使用されているアルゴリズムを特定する方法をいくつか紹介します。

API関数

CryptDeriveKey

この関数が使用されている場合、第二引数の値をチェックすることで使用されているアルゴリズムを見つけることができます:

可能なアルゴリズムとそれらに割り当てられた値の表はこちらをチェックしてください:https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

RtlCompressBuffer/RtlDecompressBuffer

データのバッファを圧縮および解凍します。

CryptAcquireContext

CryptAcquireContext関数は、特定の暗号サービスプロバイダーCSP内の特定のキーコンテナへのハンドルを取得するために使用されます。この返されたハンドルは、選択されたCSPを使用するCryptoAPI関数の呼び出しで使用されます。

CryptCreateHash

データストリームのハッシュ化を開始します。この関数が使用されている場合、第二引数の値をチェックすることで使用されているアルゴリズムを見つけることができます:


可能なアルゴリズムとそれらに割り当てられた値の表はこちらをチェックしてください:https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

コード定数

特別でユニークな値を使用する必要があるため、アルゴリズムを簡単に特定することができることがあります。

Googleで最初の定数を検索すると、これが得られます

したがって、逆コンパイルされた関数がsha256計算機であると仮定することができます。
他の定数を検索しても、おそらく同じ結果が得られます。

データ情報

コードに特定の定数がない場合、.dataセクションから情報を読み込んでいる可能性があります。
そのデータにアクセスし、最初のdwordをグループ化し、前のセクションで行ったようにGoogleで検索します

この場合、0xA56363C6を検索すると、それがAESアルゴリズムのテーブルに関連していることがわかります。

RC4 (対称暗号)

特徴

3つの主要な部分で構成されています

  • 初期化ステージ/0x00から0xFFまでの値のテーブルを作成します合計256バイト、0x100。このテーブルは一般に置換ボックスまたはSBoxと呼ばれます。
  • スクランブルステージ前に作成されたテーブルをループし再び0x100のイテレーションのループ半ランダムバイトで各値を変更します。この半ランダムバイトを作成するために、RC4のキーが使用されます。RC4のキー1バイトから256バイトの長さであることができますが、通常は5バイト以上であることが推奨されます。一般的に、RC4のキーは16バイトの長さです。
  • XORステージ:最後に、プレーンテキストまたは暗号テキストは前に作成された値とXORされます。暗号化と復号化の関数は同じです。これには、必要な回数だけ前に作成された256バイトをループします。これは通常、逆コンパイルされたコードで**%256mod 256**として認識されます。

{% hint style="info" %} 逆アセンブル/逆コンパイルされたコードでRC4を特定するためには、0x100のサイズの2つのループキーの使用をチェックし、その後、入力データを2つのループで前に作成された256の値とXORしていることを確認します。おそらく%256mod 256を使用しています。 {% endhint %}

初期化ステージ/置換ボックス: (256という数字がカウンターとして使用されていること、そして256文字の各場所に0が書かれていることに注意してください)

スクランブルステージ:

XORステージ:

AES (対称暗号)

特徴

  • 置換ボックスとルックアップテーブルの使用
  • 特定のルックアップテーブル値(定数)の使用により、AESを識別することが可能です定数はバイナリに格納されているか 動的に作成されていることに注意してください。
  • 暗号化キー16で割り切れる必要があります通常は32Bで、通常は16BのIVが使用されます。

SBox定数

Serpent (対称暗号)

特徴

  • それを使用しているマルウェアを見つけるのは珍しいですが、例Ursnifがあります
  • アルゴリズムがSerpentかどうかをその長さに基づいて簡単に判断できます非常に長い関数

特定

次の画像では、定数0x9E3779B9が使用されていることに注意してください(この定数はTEA -Tiny Encryption Algorithmなどの他の暗号アルゴリズムにも使用されます
また、ループのサイズ132と、逆アセンブリの指示とコードの例にあるXOR操作の数にも注意してください:

前に述べたように、このコードはジャンプがないため、任意の逆コンパイラ内で非常に長い関数として視覚化することができます。逆コンパイルされたコードは次のように見えるかもしれません:

したがって、マジックナンバー初期のXORをチェックし、非常に長い関数を見て、長い関数のいくつかの指示実装と比較することで7による左シフトと22による左回転のように、このアルゴリズムを特定することができます。

RSA (非対称暗号)

特徴

  • 対称アルゴリズムよりも複雑
  • 定数がありません!(カスタム実装は判断が難しい)
  • KANAL暗号アナライザーはRSAにヒントを示さず、定数に依存しています。

比較による特定

  • 11行目には+7) >> 3があり、35行目には+7) / 8があります
  • 12行目modulus_len < 0x040をチェックしており、36行目inputLen+11 > modulusLenをチェックしています

MD5 & SHA (ハッシュ)

特徴

  • 3つの関数Init、Update、Final
  • 類似の初期化関数

特定

Init

定数をチェックすることで、両方を特定できます。sha_initにはMD5にはない1つの定数があります

MD5 Transform

より多くの定数の使用に注意してください

CRC (ハッシュ)

  • データの偶発的な変更を見つける機能があるため、より小さく効率的です
  • ルックアップテーブルを使用する(したがって、定数を特定できます)

特定

ルックアップテーブル定数をチェックしてください:

CRCハッシュアルゴリズムは次のようになります

APLib (圧縮)

特徴

  • 認識可能な定数はありません
  • Pythonでアルゴリズムを書いて、オンラインで似たものを探すことができます

特定

グラフはかなり大きいです:

それを認識するための3つの比較をチェックしてください:

htARTE (HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法: