使用参数

时间:2016-08-09 12:50:33

标签: c# dll invoke shellcode

我尝试从Shellcode中调用和加载函数,就像那样

public static byte[] uc = { 
0x4D,0x5A,0x90,0x00,0x03,0x00};//example

在这段代码中是我的类和函数

我找到了一些dll文件的调用方法,但是如何从我的shellcode加载函数(来自c#dll的Shellcode)?

例如:

我有一个dll并通过

从中获取一个shelcode
public static void WriteShell()
    {
        using (StreamWriter fs = new StreamWriter("shellcode.cs"))
        {
           byte[] Data = ReadFile("now.dll", GetSize("now.dll"));
              int  Size = GetSize("now.dll");
            fs.Write("public static class ShellCode\n{\n\t");

            fs.Write("public static byte[] ucShell = {\t");
            for (int i = 0; i < Size; ++i)
            {
                if (i != 0)
                {
                    fs.Write(',');
                }

                if ((i % 15) == 0)
                    fs.Write("\n\t");

                fs.Write("0x" + Data[i].ToString("X2"));
            }
            fs.Write("};");
            fs.Write("\n\n\tpublic const int ulSize = {0};\n", Size);
            fs.Write("}");
        }

输出就像这样

  public static byte[] uc = { 
0x4D,0x5A,0x90,0x00,0x03,0x00};

在dll中我有一个类和一些函数,例如msgbox或类似的东西。

示例:

public static class now
{
static void run()
        {
            Messagebox.Show("test");
        }

}

现在我尝试用这样的调用来调用这个函数, Dynamically calling a dll and method with arguments

2 个答案:

答案 0 :(得分:0)

您可以从byte []加载程序集。加载程序集,然后使用反射查找要调用的函数。

    var assembly = System.Reflection.Assembly.Load(uc);
    var nowType = assembly.GetType("now");
    nowType.InvokeMember("run", ...)

答案 1 :(得分:0)

到目前为止

现在我尝试了这个

 RuntimeHelpers.GetObjectValue(Assembly.Load(uc).GetType("Classname").GetMethod("Functionname").Invoke(null, new object[] { "some ", "params", true, "blabla" }));

也许我需要暂停..... -.-

好的,现在我拥有它,这是我的折叠,我忘了声明命名空间..... 谢谢你们的帮助!!!