.. | ||
README.md | ||
unpacking-binaries.md |
暗号化/圧縮アルゴリズム
暗号化/圧縮アルゴリズム
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
アルゴリズムの特定
もし、コードがシフト演算、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 (対称暗号)
特徴
RC4は3つの主要な部分で構成されています:
- 初期化ステージ:0x00から0xFFまでの値のテーブル(合計256バイト、0x100)を作成します。このテーブルは一般的に置換ボックス(またはSBox)と呼ばれます。
- スクランブルステージ:以前に作成したテーブルをループします(再び0x100回のループ)。このループでは、RC4のキーを使用して各値を半ランダムバイトで変更します。この半ランダムバイトを作成するためには、通常、RC4のキーは1バイトから256バイトの長さであることが推奨されます。一般的に、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 (非対称暗号)
特徴
- 対称アルゴリズムよりも複雑です
- 定数はありません!(カスタム実装は判断が難しいです)
- RSAに関するヒントを表示するためには、KANAL(暗号解析ツール)は失敗します。
比較による識別
- 左側の11行目には
+7) >> 3
があり、右側の35行目には+7) / 8
があります。 - 左側の12行目では
modulus_len < 0x040
をチェックし、右側の36行目ではinputLen+11 > modulusLen
をチェックしています。
MD5&SHA(ハッシュ)
特徴
- 初期化、更新、最終の3つの関数があります
- 類似した初期化関数
識別
初期化
両方を識別するには、定数をチェックします。MD5には存在しないsha_initに1つの定数があることに注意してください。
MD5変換
さらに多くの定数の使用に注意してください。
CRC(ハッシュ)
- データの偶発的な変更を検出するための機能として、より小さく効率的です
- ルックアップテーブルを使用します(定数を識別できます)
識別
ルックアップテーブルの定数をチェックします。
CRCハッシュアルゴリズムは次のようになります。
APLib(圧縮)
特徴
- 識別可能な定数はありません
- Pythonでアルゴリズムを書いて、オンラインで類似のものを検索することができます
識別
グラフは非常に大きいです。
3つの比較をチェックしてそれを認識します。
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- **サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですか?または、PEASSの最新バージョンやHackTricksのPDFをダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyをご覧ください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 DiscordグループまたはTelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。