バイナリ コード内の隠された文字列のマスクを解除する
ソフトウェア開発では、暗号化キーなどの機密データを隠す必要がある場合に発生することがあります。コンパイルされたバイナリ内。この方法だけでは、断固たる敵対者に対してデータを無敵にするわけではありませんが、追加のセキュリティ層として機能します。
文字列を非表示にする基本的なアプローチの 1 つは、文字列を個々の文字に分割し、個別に保存することです。提供されるコード:
char encryptionKey[30]; int n = 0; encryptionKey[n++] = 'M'; // Continuing with the rest of the characters...
ただし、この方法は洗練さに欠けており、複雑な処理が必要ですロジック。
強化されたソリューション
より望ましいアプローチは、Boost C プリプロセッサ マクロ メカニズムを利用して文字列を暗号化し、非表示にします。この方法では、次の 2 つのプロセスが採用されています。
以下のコードは実装を示しています。
#include <boost/preprocessor/cat.hpp> #include <boost/preprocessor/seq/for_each_i.hpp> #include <boost/preprocessor/seq/enum.hpp> #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)),\ '<pre class="brush:php;toolbar:false">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'))'\ };\ \ static bool isEncrypted = true;\ if ( isEncrypted )\ {\ for (unsigned i = 0; i < ( sizeof(data) / sizeof(data[0]) ) - 1; ++i)\ {\ data[i] = CRYPT_MACRO(_, SEED, i, data[i]);\ }\ \ isEncrypted = false;\ }\ \ return data;\ }
このマクロを利用すると、隠し文字列を定義できます。次のように:
このアプローチは、文字列を非表示にするための、より安全で見た目にも美しいソリューションを提供します。下位互換性を維持しながら、非対称暗号化を必要とせずにバイナリ コードで暗号化できます。
以上がC の前処理を使用してバイナリ コード内の文字列を安全に隠すにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。