実行可能バイナリ内に埋め込まれた文字列の難読化は、暗号化キーなどの機密情報を不正アクセスから保護するのに役立ちます。ただし、文字列を文字配列に格納するような単純な方法では、分析中にその内容が簡単に明らかになります。
コンパイルされたバイナリ内の文字列を効果的に隠すには、より洗練されたアプローチを使用できます。次の例を考えてみましょう:
#include "HideString.h" DEFINE_HIDDEN_STRING(EncryptionKey, 0x7f, ('M')('y')(' ')('s')('t')('r')('o')('n')('g')(' ')('e')('n')('c')('r')('y')('p')('t')('i')('o')('n')(' ')('k')('e')('y')) DEFINE_HIDDEN_STRING(EncryptionKey2, 0x27, ('T')('e')('s')('t')) int main() { std::coutこのコードには、指定された文字列を暗号化するカスタム マクロ「DEFINE_HIDDEN_STRING」が組み込まれています。マクロは、提供されたシード値から派生した一意のキーを使用して各文字をエンコードします (例: 「私の強力な暗号化キー」 -> 0x7f)。シードに基づく暗号化アルゴリズムが文字シーケンスに適用されるため、結果のデータはランダムに見え、コンパイルされたバイナリ内で識別することが困難になります。
#define CRYPT_MACRO(r, d, i, elem) (elem ^ (d - i))#define DEFINE_HIDDEN_STRING(NAME, SEED, SEQ) \ static const char* BOOST_PP_CAT(Get, NAME)() \ { \ static char data[] = { \ BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_FOR_EACH_I(CRYPT_MACRO, SEED, SEQ)), \ '\0' \ }; \ static bool isEncrypted = true; \ if (isEncrypted) \ { \ for (unsigned i = 0; iこのアプローチでは、バイナリ コード内の埋め込み文字列が効果的に難読化され、暗号化キーとアルゴリズムの知識がなければ文字列を抽出することが困難になります。セキュリティと使いやすさのバランスが取れており、機密情報を保護する便利な方法を提供します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3