我尝试从Shellcode中调用和加载函数,就像那样
public static byte[] uc = {
0x4D,0x5A,0x90,0x00,0x03,0x00};//example
在这段代码中是我的类和函数
我找到了一些dll文件的调用方法,但是如何从我的shellcode加载函数(来自c#dll的Shellcode)?
例如:
我有一个dll并通过
从中获取一个shelcodepublic 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
答案 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" }));
也许我需要暂停..... -.-
好的,现在我拥有它,这是我的折叠,我忘了声明命名空间..... 谢谢你们的帮助!!!