.. | ||
README.md | ||
unpacking-binaries.md |
暗号化/圧縮アルゴリズム
暗号化/圧縮アルゴリズム
htARTE (HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ
HackTricksをサポートする他の方法:
- HackTricksにあなたの会社を広告したい、またはHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS & HackTricksグッズを入手する
- The PEASS Familyを発見する、私たちの独占的なNFTsのコレクション
- 💬 Discordグループに参加するか、テレグラムグループに参加するか、Twitter 🐦 @carlospolopmをフォローする。
- HackTricksとHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングのコツを共有する。
アルゴリズムの特定
もしコードがシフト右、シフト左、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バイトをループします。これは通常、逆コンパイルされたコードで**%256(mod 256)**として認識されます。
{% hint style="info" %} 逆アセンブル/逆コンパイルされたコードでRC4を特定するためには、0x100のサイズの2つのループ(キーの使用)をチェックし、その後、入力データを2つのループで前に作成された256の値とXORしていることを確認します。おそらく%256(mod 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をサポートする他の方法:
- HackTricksにあなたの会社を広告したい、またはHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS & HackTricksグッズを入手する
- The PEASS Familyを発見する、私たちの独占的なNFTsのコレクション
- 💬 Discordグループに参加するか、テレグラムグループに参加するか、Twitter 🐦 @carlospolopmをフォローする。
- HackTricksとHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングのコツを共有する。