反射可以帮助我在注入的DLL中调用函数吗?

时间:2010-12-15 08:56:09

标签: c# dll-injection

我已将一个托管的.NET DLL注入到.NET进程中 我在StackOverflow上看到一些人说你可以通过使用Reflection来调用注入的DLL的函数。这显然是Snoop使用的技术 它是否正确?如果是这样,究竟该怎么办呢? 先感谢您。

4 个答案:

答案 0 :(得分:2)

你可以使用反射。这是一个例子:

class Program
{
    static void Main()
    {
        var assembly = Assembly.Load("System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
        var serverType = assembly.GetType("System.Web.HttpUtility", true);
        var method = serverType.GetMethod("HtmlEncode", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(string) }, null);
        var result = method.Invoke(null, new[] { "<some value>" });
        Console.WriteLine(result);
    }
}

答案 1 :(得分:0)

答案 2 :(得分:0)

以下是一些示例代码:

        // Get all loaded assemblies in current application domain
        Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();

        // Get type of int
        Type intType = assemblies.Select(a => a.GetType("System.Int32")).First();

        // Create object of int using its type
        Object intObj = Activator.CreateInstance(intType);

        // Call int.ToString() method which returns '0'
        String result = intObj.GetType().GetMethod("ToString", new Type[] { }).Invoke(intObj, null).ToString();

答案 3 :(得分:0)

Eric Gunnerson撰写的精彩文章,唯一需要注意的是安全策略,因为这些可能会阻止动态加载程序集。

http://blogs.msdn.com/b/ericgu/archive/2007/06/05/app-domains-and-dynamic-loading-the-lost-columns.aspx