私はいつも、C++ プロジェクトをコンパイルしてリリースを構築するという習慣を持っています。私は常に .EXE を 16 進エディタ (通常は HxD) で開き、バイナリ情報を確認します。
私が最も嫌いで解決策を見つけようとしているのは、文字列テーブルのどこかに関連する (少なくとも私の観点からは) 情報が提供されているという事実です。他の人にとっては、これは統合失調症の強迫観念のように聞こえるかもしれませんが、実行可能ファイルに、たとえば、アプリケーションで使用されるすべての Windows 関数の名前が含まれているのが好きではありません。
多くのコンパイラを試して、どのコンパイラが最も情報量が少ないかを調べました。たとえば、GCC は、生成されたすべての最終的な exe にこれらすべてを残します。
libgcj_s.dll._Jv_RegisterClasses....\Data.ald.rb.Error.Data file is corrupt!
....Data for the application not found!.€.@.ř.@.0.@.€.@.°.@.p.@.p.@.p.@.p.@.
¸.@.$.@.€.@°.@.std::bad_alloc..__gnu_cxx::__concurrence_lock_error.__gnu_cxx
::__concurrence_unlock_error...std::exception.std::bad_exception...pure virt
ual method called..../../runtime/pseudo-reloc.c....VirtualQuery (addr, &b, s
ize of(b))............................/../../../gcc-4.4.1/libgcc/../gcc/conf
ig/i386/cygming-shared-data.c...0 && "Couldn't retrieve name of GCClib share
d data atom"....ret->size == sizeof(__cygming_shared) && "GCClib shared data
size mismatch".0 && "Couldn't add GCClib shared data atom".....-GCCLIBCYGMI
NG-EH-TDM1-SJLJ-GTHR-MINGW32........
ここでは、使用したコンパイラとバージョンを確認できます。数行下に、CreateMainWindow、GetCurrentThreadId など、使用したすべての Windows 関数のリストが表示されます。
これを非表示にしたり、暗号化したり、難読化したりする方法はあるのだろうか。
Visual C++ では、この情報は公開されません。代わりに、7 と XP のような 2 つの Windows システム間でさえ、C++ ランタイム、フレームワーク、または VC++ でコンパイルされたプログラムが必要とするものを必要としない GCC ほどクロスプラットフォームではありません。さらに、VC++ 実行可能ファイルには、アプリケーションで使用される Windows 関数へのプロシージャ エントリ ポイントも含まれています。
たとえば、NASMでさえ、呼び出されたWindows関数の名前を保存することを知っているので、Windowsの問題のようです。しかし、おそらくそれらは暗号化されているか、表示されないようにするためのトリックがあります.
GCC ソース コードを調べて、実行可能ファイルに保存するように指定された文字列がどこにあるかを確認します。おそらく、その命令をスキップしたり、何かしたりすることができます。
これは私の最後のパラノイアの 1 つであり、何らかの方法で治療できる可能性があります。ご意見とご回答ありがとうございます。