AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Vista: Einige API Hooks nicht mehr möglich?
Thema durchsuchen
Ansicht
Themen-Optionen

Vista: Einige API Hooks nicht mehr möglich?

Ein Thema von Zacherl · begonnen am 22. Mär 2007 · letzter Beitrag vom 22. Mär 2007
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Vista: Einige API Hooks nicht mehr möglich?

  Alt 22. Mär 2007, 15:59
Hi,

ich habe versucht einige APIs unter Vista zu hooken. Bei NtTerminateProcess, CreateProcessA, etc funktioniert dies wunderbar. Bei einigen anderen APIs wie Module32First oder NtQuerySystemInformation wird die neue Funktion einfach gar nicht aufgerufen.

Hat jemand eine Idee, woran das liegen kann, bzw wie man das umgehen kann?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Vista: Einige API Hooks nicht mehr möglich?

  Alt 22. Mär 2007, 17:40
Hast Du UAC aktiviert bzw am laufen?
Evtl. ist aufgrund der "erhöhten Sicherheit" in Vista es einfach nicht mehr möglich mit nicht MS-Zertifizierten (oder generell gar nicht mehr) möglich bestimmte Kernel-Funktionen zu hooken). Selbst die Virenscanner-Hersteller scheinen ja mit dem neuen Vista-Sicherheitskonzept so ihre Probleme zu haben. Vermutlich haben die ähnliche Probleme.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
22. Mär 2007, 17:55
Dieses Thema wurde von "Matze" von "Internet / LAN / ASP.NET" nach "Windows API / MS.NET Framework API" verschoben.
Ist hier wohl besser aufgehoben.
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Vista: Einige API Hooks nicht mehr möglich?

  Alt 22. Mär 2007, 18:06
welche Variante der Api-Hooks (Funktionsprinzip) nutzt du denn?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: Vista: Einige API Hooks nicht mehr möglich?

  Alt 22. Mär 2007, 20:38
Also .. UAC ist aus, also sollte mein Hook mit Admin-Rechten laufen. Ich habe den Hook frei nach Luckies "ExecuteHook" Beispiel geschrieben. Die Hook Funktion ist somit folgende:

Delphi-Quellcode:
function PatchAddress(OldFunc, NewFunc: Pointer): integer;
var
  BeenDone: TList;

  function PatchAddressInModule(hModule: THandle; OldFunc, NewFunc: Pointer): integer;
  var
    Dos: PImageDosHeader;
    NT: PImageNTHeaders;
    ImportDesc: PImage_Import_Entry;
    rva: DWORD;
    Func: PPointer;
    DLL: string;
    f: Pointer;
    written: DWORD;
  begin
    Result := 0;
    Dos := Pointer(hModule);
    if BeenDone.IndexOf(Dos) >= 0 then Exit;
    BeenDone.Add(Dos);
    OldFunc := FinalFunctionAddress(OldFunc);
    if IsBadReadPtr(Dos, SizeOf(TImageDosHeader)) then Exit;
    if Dos.e_magic <> IMAGE_DOS_SIGNATURE then Exit;
    NT := Pointer(integer(Dos) + dos._lfanew);
    // if IsBadReadPtr(NT,SizeOf(TImageNtHeaders)) then exit;

    RVA := NT^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;

    if RVA = 0 then Exit;
    ImportDesc := Pointer(integer(Dos) + RVA);
    while (ImportDesc^.Name <> 0) do
    begin
      DLL := PChar(integer(Dos) + ImportDesc^.Name);
      PatchAddressInModule(GetModuleHandle(PChar(DLL)), OldFunc, NewFunc);
      Func := Pointer(integer(DOS) + ImportDesc.LookupTable);
      while Func^ <> nil do
      begin
        f := FinalFunctionAddress(Func^);
        if f = OldFunc then
        begin
          WriteProcessMemory(GetCurrentProcess, Func, @NewFunc, 4, written);
          if Written > 0 then Inc(Result);
        end;
        Inc(Func);
      end;
      Inc(ImportDesc);
    end;
  end;
begin
  BeenDone := TList.Create;
  try
    Result := PatchAddressInModule(GetModuleHandle(nil), OldFunc, NewFunc);
  finally
    BeenDone.Free;
  end;
end;
Allerdings lassen sich die genannten APIs auch nicht mit der madCodeHook, der uallHook oder der afxCodeHook Unit hooken.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz