2016-08-09 53 views
1

Ich versuche aufzurufen und Ladefunktionen von einem Shellcode sieht aus wie dasInvoke Funktion von DLL mit Parametern

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

In diesem Code meine Klassen und Funktionen sind

ich gefunden habe einige Methoden für die DLL-Dateien aufrufen , aber wie man die Funktionen von meinem shellcode (Shellcode von einer C# dll) lädt?

Als Beispiel:

Ich habe eine dll und erhalten shelcode von ihm über

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("}"); 
     } 

ist die Ausgabe wie diese

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

in der DLL-i eine Klasse und einige Funktionen, Beispiel eine msgbox oder etwas ähnliches.

Beispiel:

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

} 

jetzt ich versuche, mit einem invoke wie diese, diese Funktion aufzurufen, Dynamically calling a dll and method with arguments

+0

Bitte klären Sie Ihr spezifisches Problem oder fügen Sie zusätzliche Details hinzu, um genau zu markieren, was Sie brauchen. Wie es derzeit geschrieben wird, ist es schwer zu sagen, was genau Sie fragen. Informationen zur Klärung dieser Frage finden Sie auf der Seite [Wie Sie fragen] (http://stackoverflow.com/help/how-to-ask). –

+0

Hier finden Sie Informationen zur Verwendung von DllImportAttribute. – seairth

+0

Dies kann Ihnen helfen: http://StackOverflow.com/a/1228348/3537915 –

Antwort

0

Sie können eine Baugruppe aus einem byte [] laden. Laden Sie die Assembly, und verwenden Sie die Reflektion, um die Funktion zu finden, die Sie aufrufen möchten.

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

ja ist es wie hier http://www.codeproject.com/Articles/19911/Dynamic-Invoke-A-Method-Given-Strings-with-Met aber wie es mit meinem zu tun Byte []? – greenhorn

+0

@greenhorn Ich habe den Code bearbeitet, jetzt haben Sie den Typ, und können etwas ähnliches wie der Codeprojekt Artikel – AlexDev

+0

ja ich habe dies Assembly ba = Assembly.Load (uc); Geben Sie t = ba.GetType ("Ausführen") ein; MethodInfo m = t.GetMethod ("HandleRun"); object Ergebnis = (bool) m.Invoke (null, neues Objekt [] {"", string.Empty, file, true}); Aber das funktioniert nicht, es trow mich Objektreferenz nicht auf eine Objektinstanz festgelegt – greenhorn

0

Bisher

Jetzt habe ich diese tryed

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

vielleicht muss ich Pause ..... -.-

Okay, jetzt habe ich es, es war mein fold ich hatte vergessen, den namespace zu deklarieren ..... Danke Jungs für Ihre Hilfe !!!