Ergebnis 1 bis 7 von 7

Baum-Darstellung

  1. #1
    Transpinguin Avatar von IRET
    Registriert seit
    02.09.2008
    Beiträge
    1.295

    Standard [C#] Code-Injection

    Hab mich jetzt einmal aus Faulheit(wollte die Windows-Maschine nciht starten hehe) mehr mit Mono-Apis auseinander gesetzt und die Cecil-Api gefunden.

    Mit der ist eine Code-Injizierung möglich.
    Die Cecil-Api gibt es hier:
    http://www.mono-project.com/Cecil

    Wr nicht weiß wozu es ist:
    zB um Schadcode in eine andere Datei injizieren oder einen Crack zu schreiben).

    Und hier ein Beispiel wie ihr Code in eine bestehende Datei injizieren könnt.

    Code:
    using System;
    using Mono.Cecil;
    using Mono.Cecil.Cil;
    
    namespace codeinjection
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Assembly laden
                AssemblyDefinition asm= AssemblyFactory.GetAssembly("explorer.exe");
    
            //Definiere Methode "Test()" mit Rückgabewert void
    
                //Rückgabewert festlegen
                TypeReference returntype = asm.MainModule.Import(typeof(void));
    
                //Gerüst machen(static void Test())
                MethodDefinition testmethod = new MethodDefinition("Test", MethodAttributes.Private|MethodAttributes.Static, returntype);
    
                //Code in der Methode Test
    
                //Definiert eine CIL-Instruktion die einen String mit unserer Meldung auf den Stack legt...
                Instruction msg = testmethod.Body.CilWorker.Create(OpCodes.Ldstr, "Hello from Test()");
    
                //und importiert eine Methoden-Referenz auf Console.WriteLine(string), dazu wird
                //der im .NET Framework eingebaute System.Type verwendet
                MethodReference writeline = asm.MainModule.Import(typeof(Console).GetMethod("WriteLine",new Type[]{typeof(string)}));
    
                //Generiert CIL-Code in der Methode Test()
    
                //Message-String auf den Stack legen
                testmethod.Body.CilWorker.Append(msg);
                //Console.WriteLine aufruf generieren
                testmethod.Body.CilWorker.InsertAfter (msg,testmethod.Body.CilWorker.Create (OpCodes.Call,writeline));
    
                //Return generieren
                testmethod.Body.CilWorker.Append (testmethod.Body.CilWorker.Create (OpCodes.Ret));
    
                //Injiziert die Methode "Test()" in die Klasse Victim.Program, welche sich im Hauptmodul befindet.
                asm.MainModule.Inject(testmethod, asm.MainModule.Types["Victim.Program"]);
    
    
                //Main-Methode modifizieren ,dass die injizierte Code auch ausgeführt wird
    
                MethodReference testmethod_ref = null;
                foreach (MethodDefinition mdef in asm.MainModule.Types["Victim.Program"].Methods)
                {
                    if (mdef.Name == "Test")
                    {
                        testmethod_ref=asm.MainModule.Import(mdef);
                    }
    
                }
    
                Instruction call_test = testmethod.Body.CilWorker.Create(OpCodes.Call, testmethod_ref);
    
                asm.EntryPoint.Body.CilWorker.InsertBefore (asm.EntryPoint.Body.Instructions[0],call_test);
    
                //Schreibt Datei auf die Festplatte
                AssemblyFactory.SaveAssembly(asm, "patched.exe");
                Console.ReadLine();
    
            }
        }
    }
    Die patched.exe ist dann die Datei mit den injizierten Code.
    In diesen Fall injizieren wir folgenden Code in die explorer.exe
    Code:
            private static void Test()
            {
                Console.WriteLine("Hello from Test()");
    
    
            }
    Und in die Main-Methode wird eine Zeile injiziert womit die Methofde Test aufgerufn wird.
    Das ganze ist zwar etwas komplziert ,aber mit dr Zeit versteht man das schon

    Ich hoffe es bringt euch was.
    Und wer nicht weiß was CIL ist hier:
    http://en.wikipedia.org/wiki/MSIL

    mfg
    Geändert von IRET (22.06.2009 um 10:32 Uhr)

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •