2016-10-15 7 views
0

RTTIシンボルを簡単にスクランブルする方法はありますか?C++ RTTIシンボルを非表示にするにはどうすればいいですか?

すでに行われているいくつかのもの:

  • 静的ビルド - 物事がライブラリと動的ライブラリを持つようにはクリーンなインターフェイスが存在しない間にインライン化を受けると明らかにこれは多くのことができます。ライブラリはクロスプラットフォームで動作するため、これを行う必要があります(これは、1つの太いライブラリファイル)

  • "strip"を使用しています - 少なくともLinuxではこれは浮動小数点記号の良い部分を取り除きます

しかし、私はまだ人間が読める記号を見ることができます "文字列"を実行する場合!いくつか調査した後、これはRTTIによるものだと思われます。既存のコンパイラはすべて、関数/クラス/ etcを使用しているようです。シグネチャを使用してコード内のRTTI比較値を生成します。これはバイナリにソースを漏らし、奇妙なユーザに私たちの秘密のソースとその作り方を知らせます。

注:

  • 私たちは、B/C私たちが使用する静的にリンクされたライブラリが内部でRTTIを使用している-fno-RTTIを構築することはできません。私が探しているものは、ビルドプロセスの一部ではなく、コンパイルされた実行可能ファイルで動作するものだと思います。

  • これを行う商用製品を見つけようとしましたが、それらの特徴リストに含まれる。製品の多くは疑わしい品質を持っているか、または半放棄状態にあります。ほとんどはコードをスクランブルすることに焦点を当て、パフォーマンスを傷つけ、私たちのために非常に重要ではないあらゆる種類の複雑な変換を行います。

  • は手動で私たちが使用するすべてのライブラリ内のすべてのシンボルは、トリックを行うだろうスクランブル..しかし、それは保守の悪夢のように思える...

答えて

1

一つの簡単な解決策は、の全体の束を構築することです隠すことを望むすべての名前に対して定義します。 -DCFoo=a_1 -DCBar=a_2でコンパイルし、クラスCfooCBarはRTTIと他のシンボルテーブルからは削除されました。

+0

提案していただきありがとうございます。残ったシンボルのために自動化された方法でこれを行うことは、ちょっとした挑戦のようです。誰かがより簡単な解決策を持つだろう:) – geokon

0

C++ obfuscatorを試すことができます。あなたがGoogleの場合、かなりポップアップします。

+0

私は質問で言う通り: 私はこれを行う商用製品を見つけようとしましたが、機能リストには何も載っていません。製品の多くは疑わしい品質を持っているか、または半放棄状態にあります。ほとんどはコードをスクランブルすることに焦点を当て、パフォーマンスを傷つけ、私たちのために非常に重要ではないあらゆる種類の複雑な変換を行います。 – geokon

関連する問題