Ergebnis 1 bis 2 von 2

Hybrid-Darstellung

  1. #1
    Anfänger Avatar von Cardano
    Registriert seit
    06.07.2010
    Beiträge
    17

    Standard [PE] Vertauschen von Sections

    Ja hi, ich bins schon wieder
    Nach dem Rückschlag heute mittag beim Erstellen von Codecaves hab ich mich nicht zurrückschlagen lassen und hab mich wieder an etwas gesetzt. Ich bin dabei gut zur Hälfte fertig, wollte es testen und bin nun nach mehreren Stunden rumtesten mit der Hilfe eines Kumpels am Ende meiner Latein.

    Folgendes mache ich:
    Ich vertausche Sections
    Mein kleines helloworld App hat 5 Sections:
    Section 0: .text
    Section 1: .rdata
    Section 2: .data
    Section 3: .rsrc
    Section 4: .reloc

    Was ich nun mache, ist Section 1 mit Section 2 zu vertauschen.
    Wenn es nötig sein sollte, werde ich diesen Vorgang auch noch genau erläutern, wie aber die unten folgenden Screenshots euch zeigen werden, scheint dieser Vorgang aber so zu funktionieren wie er soll.

    Danach vertausche ich ebenfalls die SectionHeader und setze alle Section Header so neu, dass sie wirklich wieder zu den Daten auf der Disk passen, sprich RawSize und/oder RawOffset werden verändert.

    Ich spiele hierbei noch nicht mit den RVA herum, da ich bis zu diesem Punkt erstmal nur die physische Seite ändern wollte.

    Da EBFE mich aufgeklärt hatte, dass es des öfteren vorkommt, dass short jmp's, bzw. short calls ausgeführt werden, dachte ich mir, das man zumindest die Sections im ganzen vertauschen könnte. Denn wann sollte eine .text Section in eine .reloc JMPen ?

    Nichts destotrotz scheint sich aber trotzdem ein Fehler eingeschlichen zu haben. Denn die fertig modifizierte Datei
    hello_world_modified.exe
    Erzeugt folgende Meldung bevor überhaupt nur die Konsole geöffnet wird:
    .....exe ist keine zulässige Win32-Anwendung

    Egal welche Sections ich vertausche, es kommt immer auf dasselbe hinaus.
    Hab ich meinen Test zufrüh gemacht und ich muss erst alle Relocs abarbeiten, DataDirectorys neuen RVA's zuweisen bevor das ganze überhaupt läuft. Oder ist hier wieder ein grundsetzlicher Fehler ?

    Ich hab es übrigens schon probiert, dass ich zumindest die RVA's in CFF Explorer so abänder, das alles wieder linear ist. Das hat leider auch nichts gebracht. Naja hier Screens und die orig. und modified Datei

    RapidShare: 1-CLICK Web hosting - Easy Filehosting




    Vielen Dank wieder schonmal, Cardano

    EDIT: Na okay, war wohl gestern Abend doch nicht ganz so wach, die beiden letzten Sections wurden nicht richtig kopiert. Es kommt aber auch wieder zum selben Fehler. Aber diesmal nicht in allen Fällen. Wenn ich nur die Sections 1 und 2 vertausche und anschließend die RVAs wieder in die richtige Reihenfolge bringe, sprich 1.VirtualAddress = 2000 und 2.VirtualAddress = 3000, dann startet es, zeigt kein Bild, und lädt sich mit 256kb Größe in den Speicher und macht gar nichts.

    http://rapidshare.com/files/40648559..._modified2.exe

    Edit 2: Nachdem ich nun die Addressen der DataDirs angepasst habe, kommen zumindest Fehlermeldungen das Datein nicht geladen werden konnten. Ich muss wohl noch ein paar rva's fixen.

    Kann mir einer sagen warum ich Section 1 und 2 tauschen kann aber keine der anderen ? Beim Tauschen von z.b. 3 und 4 komm ich nicht soweit
    Geändert von Cardano (12.07.2010 um 09:37 Uhr)

  2. #2
    I'm in ur VM. Avatar von l0dsb
    Registriert seit
    23.07.2007
    Beiträge
    1.038

    Standard

    Code:
    012417C0    FF15 00202401      call    near dword ptr [1242000]
    Dein Problem sind dieses Mal die Imports. Die RVA der Import Table ist inkorrekt, weshalb die IAT nicht erzeugt wird.

    Deine Import-Table liegt in .rdata, welche nun an 0x3000 liegt (die RVA 0x2234 ist also nicht mehr richtig). Richtig wäre 0x3234 und entsprechend die Anpassung der RVAs in der Tabelle selbst. Ich nehme an, dass du daran schon arbeitest.

    Des Weiteren musst du alle Referenzen im Code (siehe obigen Codeblock) auf die neue VA der IT (und somit auch der IAT, siehe IT.FirstThunk) abändern.

    Üblicherweise sind es nur folgende Pattern, die du lokalisieren und abändern musst (von der Fehleranfälligkeit her ist dieser Ansatz recht unbedenklich):

    Code:
    call dword ptr [__imp]
    jmp dword ptr [__imp]
    mov reg32, dword ptr [__imp]
    Deshalb kannst du die IT-Section nicht ohne Weiteres vertauschen.

    Schön, dass du nicht aufgegeben hast.

    edit: Was ich noch fast vergessen hätte (was einem im IRC nicht alles einfällt): Referenziert beispielsweise deine .text-Section Variablen in einer anderen Section (.data/.bss/...), musst du diese Verweise natürlich auch noch anpassen, was wiederum auf eine hundertprozentig korrekte Disassembly hinausläuft.

    Damit (Imports und Daten) sollten aber so ziemlich alle üblicheren Zugriffe in eine andere Section abgedeckt sein.
    Geändert von l0dsb (12.07.2010 um 17:03 Uhr) Grund: Data-Nachtrag
    I can haz RCE?

Ähnliche Themen

  1. Sections Fixer Bischen hilfe
    Von Inj3ct im Forum VisualBasic
    Antworten: 2
    Letzter Beitrag: 29.06.2009, 09:46

Stichworte

Berechtigungen

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