0

ConfuserEx で保護する独自の DLL があります。ConfuserEx では、「名前の変更」保護を使用しています。

<protection id="rename">
    <argument name="mode" value="unicode" />
    <argument name="renEnum" value="true" />        
</protection>    

もちろん、これにより DLL がコードを表示されないように保護されますが、私のクラス (DLL の一部として保護されています) は次を使用します。

MethodInfo mi = typeof(MyClass).GetMethod(nameof(MyStaticMethod), BindingFlags.Static | BindingFlags.NonPublic);

ここから問題が始まります。自分のコードでさえ、 (ConfuserEx で保護された)メソッドを見つけて使用できないからです。GetMethod を使用して、Delegate.CreateDelegate を呼び出します。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

リフレクションなしで必要なデリゲートを直接作成できない理由はまだわかりませんが、本当にを取得する必要MethodInfoがある場合は、次のようにしてみてください。

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        Thingy t = DoStuff;
        var mi = t.Method;
    }
    private delegate void Thingy(object sender, EventArgs e);
    private static void DoStuff(object sender, EventArgs e)
    {

    }
}

つまり、他のデリゲート定義と一致する独自のローカルで定義されたデリゲートを使用し、そのインスタンスをコード内で直接作成してMethodInfoから、そのインスタンスから を抽出します。

このコードは、名前ではなくメソッド トークンを使用して識別するためDoStuff、問題なく難読化されます。

于 2018-12-11T10:49:07.550 に答える