Ergebnis 1 bis 10 von 13

Baum-Darstellung

  1. #5
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Dann hol dir n CONTEXT von deinem Thread, schau wo fs:[0x30] hinzeigt (Process Enviroment Block)
    Struktur (musst du selber übersetzen - wird von MS momentan nur für C++ gezeigt)
    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

    Dann ab zum LDR (Adresse davon ist im PEB)
    Struktur (auch hier ist wieder selber Übersetzen angesagt)
    http://undocumented.ntinternals.net/..._LDR_DATA.html

    Dort InLoadOrderModuleList durchlaufen und nach kernel32.dll in BaseDLLName (http://undocumented.ntinternals.net/...DR_MODULE.html) suchen.

    Ist das gefunden nimmst du die BaseAddress von dem Eintrag.
    Das ist das selbe wie ein HANDLE für GetProcAddress.

    Wenn auch GetProcAddress in den Imports deines Programms erkannt wird musst du halt genau das selber schreiben.
    Die Grundidee ist folgende:
    BaseAddress sagt dir wo kernel32.dll im Speicher geladen wurde.
    Dort liegt der IMAGE_DOS_HEADER (schau dir Microsoft's PE File Format Specification, oder ein Tutorial dazu an). Dieser Verweist auf IMAGE_NT_HEADERS.
    IMAGE_NT_HEADERS besitzen sogenannte DataDirectories.
    Das erste DataDirectory enthält die Position des Export Tables.
    Dieser gibt an WO die einzelnen Funktionen der DLL im Speicher sind.

    Diesen musst du also lokalisieren und parsen und nach Funktionen wie GetProcAddress durchsuchen.
    Hast du GetProcAddress erstmal in kernel32.dll gefunden kannst du damit weiter machen (AV's scannen hauptsächlich nach statischen Imports - wenn du GetProcAddress on-the-fly im Speicher lokalisierst kann das nur bemerkt werden, wenn die AV's GetProcAddress gleich bei Programmstart hooken - was meines Wissens nach nicht Praktiziert wird).

    Nun könntest du andere Funktionen wie GetModuleHandle laden.

    So hättest du dann beide ohne einen einzigen Import zu diesen während des Programmablaufs geladen.

    Anmerkung: du musst dennoch irgendeine Funktion von kernel32.dll importieren (sei es nur ExitProcess oder sowas), da sich kernel32.dll sonst nicht in der Modulliste (InLoadOrderModuleList) befände.

    P.S.: ich weiß das hört sich ziemlich aufwändig und komplex an, aber niemand hat behauptet, dass es einfach sei. Außerdem ist es durchaus schaffbar, wenn man sich mit der Materie wirklich beschäftigt (hab das damals gleich in ASM gemacht - C würde aber auch gehen - bei VB wirst du wohl wegen dem Mangel an gutem Pointersupport der Sprache einige Schwierigkeiten haben, aber auch da ist es über Umwege machbar)

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  2. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    100 (09.04.2010)

Stichworte

Berechtigungen

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