1


0

ユーザーが自分のDLLのDependenceを通じてすべてのエクスポート関数を見たくないのですが、それを行う方法はありますか? 私のDLLはCおよびMS Visual Studioに準拠しています。

7 Answer


5


もう1つのオプションは、隠したい関数のアドレスの配列を返すエクスポートされた関数を作成することです。これらのアドレスを取得したら、それらを直接呼び出すことができます。

static void ** Funcs = {

__declspec(dllexport)void * GetFuncs(void){return

実行可能ファイルでは、次のことができます。

void ** Funcs = GetFuncs();

(* Funcs [0])(1、2、3);


4



3


これは本当に厄介ですが、あなたが他の人にその序数を見てもらいたくない場合は、あなたの関数をCOMでラップすることができます。 COM DLLは一般的なCOM関数を公開するだけなので、あなたのものは隠されます。 その後、最初に登録せずにDLLを使用する手法があるため、使用するCOMクラスに関する情報がシステムに見つかりません。 COMを使用するのは明らかに奇妙な理由ですが、その要求も非常に一般的ではありません…​


2


NONAMEを使用するIMOはこの目的には役に立ちません - 依存関係を隠すことはありません。 依存関係は依然として表示されます(序数を使用して)。 そしてあなたの_basic_ユーザーはまだGetProcAddressを通して彼らと連絡を取ることができるでしょう。

もっと洗練された方法を使う必要があると思います。 解決策はeranによって提案されました。


1


それが隠されることを考えてCOMオブジェクトの中にあなたのアクセスを隠そうとしないでください。 ATLを使用してCOMオブジェクト(IDispatch)メソッドを列挙する]を参照して、COM DLLを検証する方法を確認してください。関数名用です。

さらに、エクスポートされた関数の名前を隠すことが望ましいです。 あなたのDLLが他のコードモジュールを介してあなた自身の使用のためのものであるとき、これは望ましいです、そしてそれはあなただけがあなたの呼び出しコードにアクセスして欲しい何かをします。 このカテゴリには、アルゴリズムによる企業秘密が含まれる場合があります。

もう1つのトリックは、コードが侵害されたことをコードに知らせるために、クラッシュまたは内部状態を設定するおとり関数をエクスポートすることです。 危険にさらされた状態で、コードは意図的に間違った結果またはランダムなクラッシュを生成する可能性があります。 また、詮索好きについての情報を記載したメールをアカウントに送り返すこともできます。


0


本当に簡単な方法は、それを UPXのようなパッカーでラップすることです。 あなたがエクスポートしたものは、UPXがファイルをメモリに解凍するために使用するものです。


0


いいえ、輸出することの全体的なポイントは、それらが目に見えるようになることです。

それが短い答えです。 長い答えは、.defファイルです。 リンカに[定義ファイル](http://msdn.microsoft.com/en-us/library/d91k01sh(VS.80).aspx)を使用してC関数をインデックスに変換するように指示できます。