.. | ||
README.md | ||
unpacking-binaries.md |
暗号化/圧縮アルゴリズム
暗号化/圧縮アルゴリズム
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricks をサポートする他の方法:
- HackTricks で企業を宣伝したいまたはHackTricks をPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS&HackTricksグッズを入手
- The PEASS Familyを発見し、独占的なNFTコレクションを見つける
- **💬 Discordグループ**に参加するか、telegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローする。
- ハッキングテクニックを共有するには、HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出してください。
アルゴリズムの特定
コードがシフト右と左、XOR、およびいくつかの算術演算を使用している場合、それが暗号化アルゴリズムの実装である可能性が非常に高いです。ここでは、各ステップを逆にする必要なしに使用されているアルゴリズムを特定する方法をいくつか紹介します。
API 関数
CryptDeriveKey
この関数が使用されている場合、第2パラメータの値をチェックして、使用されているアルゴリズムを特定できます:
可能なアルゴリズムとそれに割り当てられた値の表はこちらを参照: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
RtlCompressBuffer/RtlDecompressBuffer
指定されたデータバッファを圧縮および解凍します。
CryptAcquireContext
ドキュメントによると、CryptAcquireContext 関数は、特定の暗号化サービスプロバイダ(CSP)内の特定のキーコンテナへのハンドルを取得するために使用されます。この返されたハンドルは、選択したCSPを使用する CryptoAPI 関数の呼び出しで使用されます。
CryptCreateHash
データストリームのハッシングを開始します。この関数が使用されている場合、第2パラメータの値をチェックして、使用されているアルゴリズムを特定できます:
可能なアルゴリズムとそれに割り当てられた値の表はこちらを参照: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
コード定数
アルゴリズムを特定するのが非常に簡単な場合があります。それは特別でユニークな値を使用する必要があるためです。
最初の定数をGoogleで検索すると、次のようになります:
したがって、逆コンパイルされた関数がsha256 計算機であると仮定できます。
他の定数のいずれかを検索すると(おそらく)同じ結果が得られます。
データ情報
コードに有意義な定数がない場合、.data セクションから情報を読み込んでいる可能性があります。
そのデータにアクセスし、最初の dword をグループ化して、前述のセクションで行ったように Google で検索できます:
この場合、0xA56363C6 を検索すると、AES アルゴリズムのテーブルに関連していることがわかります。
RC4 (対称暗号)
特徴
- 初期化ステージ/: 0x00 から 0xFF(合計 256 バイト、0x100)までの値のテーブルを作成します。このテーブルは一般的に置換ボックス(または SBox と呼ばれる)と呼ばれます。
- スクランブルステージ: 以前に作成されたテーブルをループして(再び 0x100 回のループ)、各値を半ランダムバイトで変更します。この半ランダムバイトを作成するために、RC4 キーが使用されます。RC4 キーは1〜256 バイトの長さにすることができますが、通常は 5 バイト以上であることが推奨されています。一般的に、RC4 キーは 16 バイトの長さです。
- XOR ステージ: 最後に、平文または暗号文が以前に作成された値とXORされます。暗号化および復号化のための関数は同じです。これにより、作成された 256 バイトを必要な回数だけループします。これは通常、逆コンパイルされたコードで**%256(mod 256)**と認識されます。
{% hint style="info" %} 逆アセンブリ/逆コンパイルされたコードで RC4 を特定するには、2 つのサイズ 0x100 のループ(キーを使用)をチェックし、おそらく %256(mod 256)を使用して 2 つのループで作成された 256 値との入力データの XOR を行うことを確認します。 {% 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
両方を特定するには、定数をチェックしてください。sha_init には MD5 にはない 1 つの定数があることに注意してください:
MD5 変換
より多くの定数の使用に注意してください
CRC(ハッシュ)
- データの偶発的な変更を見つけるための機能として、より小さく、効率的です
- ルックアップテーブルを使用します(定数を特定できます)
特定
ルックアップテーブルの定数をチェックしてください:
CRC ハッシュアルゴリズムは次のようになります:
APLib(圧縮)
特徴
- 識別可能な定数はありません
- Python でアルゴリズムを書いて、オンラインで類似したものを検索できます
特定
グラフはかなり大きいです:
認識するために3 つの比較をチェックしてください:
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricks をサポートする他の方法:
- HackTricks で企業を宣伝したいまたはHackTricks をPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS&HackTricksグッズを入手
- The PEASS Familyを発見し、独占的なNFTコレクションを見つける
- **💬 Discordグループ**に参加するか、telegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローする。
- ハッキングテクニックを共有するには、HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出してください。