AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CreateToolHelp32SnapShot hooks umgehen
Thema durchsuchen
Ansicht
Themen-Optionen

CreateToolHelp32SnapShot hooks umgehen

Ein Thema von Arnulf · begonnen am 25. Jul 2005 · letzter Beitrag vom 30. Mär 2007
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    
Olli
(Gast)

n/a Beiträge
 
#21

Re: CreateToolHelp32SnapShot hooks umgehen

  Alt 8. Aug 2005, 14:48


Wie wäre es mit RtlQueryProcessDebugInformation()? Kleiner Tip: die Toolhelp-API von Windows 2000 aufwärts basiert auf den Native APIs, ergo muß es da was geben.
  Mit Zitat antworten Zitat
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#22

Re: CreateToolHelp32SnapShot hooks umgehen

  Alt 8. Aug 2005, 15:47
Man - ich bin erschlagen lol.
Wenn man mal anfangen will hinter die normalen windows funktionen zu blicken wird man erschlagen...
Jedenfalls hab ich code von nico gefunden
http://www.swissdelphicenter.ch/de/showcode.php?id=281
der mit zeigen sollte was du meinst.
Naja tut es nicht wirklich lol - muß wohl erstmal damit spielen ums zu begreifen.
In den native apis hab ich das gefunden:
Delphi-Quellcode:
function RtlQueryProcessDebugInformation(
    ProcessId : ULONG;
    DebugInfoClassMask : ULONG;
    DebugBuffer : PDEBUG_BUFFER
  ): NTSTATUS; stdcall;
Logischerweise sagt mir das nichts, vielleicht hilft mir wirklich das rumspielen mit nicos code
Arnulf

Edit:
Ach debugBuffer dürfte wohl das sein was ich suche lol - sachen gibts.

Dazu hab ich nur noch eine frage was ist der Handle eines Moduls?
Ist das die Base adresse? - also beginnt dort dann der dos header und alle weiteren?

Danke
Arnulf
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#23

Re: CreateToolHelp32SnapShot hooks umgehen

  Alt 8. Aug 2005, 16:12
Zitat von Arnulf:
Jedenfalls hab ich code von nico gefunden
Netter alter Code, keine Ahnung ob der auf aktuellen Windows-Versionen noch funktioniert (von Debug-Releases ganz zu schweigen )...

Zitat von Arnulf:
Dazu hab ich nur noch eine frage was ist der Handle eines Moduls?
Ist das die Base adresse?
Ja und nein. In 99% ist es die Basisadresse - wenn die Datei allerdings mit LoadLibraryEx(..., ..., LOAD_LIBRARY_AS_DATAFILE) geladen wurde, dann kommt zum Handle (die ja eigentlich untypisierte Zeiger sind) +1 dazu...

Zitat von Arnulf:
also beginnt dort dann der dos header und alle weiteren?
Du solltest dich von der Vorstellung trennen, dass die Header in den Adressraum des Prozesses eingeblendet/kopiert werden müssen...
  Mit Zitat antworten Zitat
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#24

Re: CreateToolHelp32SnapShot hooks umgehen

  Alt 8. Aug 2005, 16:42
Zitat:
aktuellen Windows-Versionen noch funktioniert
ja funktioniert noch - habs ausprobiert
Zitat:
Du solltest dich von der Vorstellung trennen, dass die Header in den Adressraum des Prozesses eingeblendet/kopiert werden müssen...
lol also davon bin ich jetzt wirklich ausgegangen.
ich dachte wenn ich loadlibrary verwende wird immer der header mitsamt aller funktionen geladen?
wo drifte ich denn jetzt wieder ab - jetzt wirds freaky .
Darauf basiert ja mein ganzer check.
1. nachschauen welche module geladen sind.
2. header einlesen und schauen ob opengl32.dll oder bestimmte funktionen importiert werden.

so hab ichs bisher gelernt lol....
was kommt jetzt, daß mir meine träume zerstört?

Arnulf
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#25

Re: CreateToolHelp32SnapShot hooks umgehen

  Alt 8. Aug 2005, 17:10
Zitat von NicoDE:
Du solltest dich von der Vorstellung trennen, dass die Header in den Adressraum des Prozesses eingeblendet/kopiert werden müssen...
Jetzt will ich aber mal was hören *g* ... erklär mal. Also ich habe schonmal rumgespielt um die Header zu überschreiben und das gab klägliche Probleme, weil sie eben weg waren.
  Mit Zitat antworten Zitat
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#26

Re: CreateToolHelp32SnapShot hooks umgehen

  Alt 8. Aug 2005, 17:31
@Olli
Was ist hier im zusammenhang mit native api gemeint?
Werden hier nicht auch nur die ntdll.dll functionen importiert und dann verwendet.
Vielleicht kannst du mir gerade anhand dieses beispiels erklären was bei den native apis eigentlich gemacht wird?.

Delphi-Quellcode:
// Dynamic version of RtlQueryProcessDebugInformation
function RtlQueryProcessDebugInformation(
    ProcessId : ULONG;
    DebugInfoClassMask : ULONG;
    DebugBuffer : PDEBUG_BUFFER
  ): NTSTATUS; stdcall;
begin
  GetProcedureAddress(_RtlQueryProcessDebugInformation, ntdll, 'RtlQueryProcessDebugInformation');
  Result := TFNRtlQueryProcessDebugInformation(_RtlQueryProcessDebugInformation)(
    ProcessId, DebugInfoClassMask, DebugBuffer
  );
end;
Also worauf basieren diese native apis?
Die Pricedure Adresse von der originalen ntdll verwenden? - wäre wirklich interessant den zusammenhang zu verstehen.

Arnulf
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#27

Re: CreateToolHelp32SnapShot hooks umgehen

  Alt 8. Aug 2005, 17:40
Zitat von Arnulf:
so hab ichs bisher gelernt lol....
was kommt jetzt, daß mir meine träume zerstört?
Hier ein Beispiel um den DOS-Header im Speicher zu überschreiben
Delphi-Quellcode:
program Project1;

uses
  Windows;

const
  HelloWorld = 'Hello, World!';
var
  ModuleHandle: HMODULE;
  BaseAddress: Pointer absolute ModuleHandle;
  OldProtect: DWORD;
8begin
  ModuleHandle := GetModuleHandle(nil);
  if not VirtualProtect(BaseAddress, (Length(HelloWorld) + 1) * SizeOf(Char),
    PAGE_READWRITE, OldProtect) then
    Exit;
  lstrcpy(BaseAddress, HelloWorld);
  VirtualProtect(BaseAddress, (Length(HelloWorld) + 1) * SizeOf(Char),
    OldProtect, OldProtect);
  MessageBox(HWND(nil), BaseAddress, 'foo', MB_OK or MB_ICONINFORMATION);
end.
Die Ermittlung der Module funktioniert weiterhin problemlos (zum Beispiel mit: tasklist /M /FI "WINDOWTITLE eq foo").
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#28

Re: CreateToolHelp32SnapShot hooks umgehen

  Alt 8. Aug 2005, 18:34
Puh, ich schreibe gerade zusammen mit Marcel van Brakel einen Artikel für TDM über Native APIs, da glaube ich kaum, daß man das in wenigen Sätzen abhandeln kann *g*

Ich versuche es dennoch. Die Native APIs sind erstmal aufgeteilt in einen U-Mode und einen K-Mode-Teil. Der größte Teil der Native APIs im U-Mode wird von der NTDLL.DLL exportiert, im K-Mode ist dies NTOSKRNL.EXE.
Diese APIs bilden die Grundlage für alle Subsysteme und werden teilweise auch im DDK dokumentiert - inzwischen teils sogar im PSDK. Sie haben je nach Aufgabengebiet verschiedene Präfixe (Rtl* = Runtime Library). Eine Liste der Native APIs kannst du auf unserer JEDI-Apilib-Seite finden:
http://jedi-apilib.sourceforge.net/n...ativeList.html

Du benutzt sie also bereits, auch wenn du sie nicht so nennst

Weitere Quellen zum Thema findest du in unserer ntapi-Unit.

@Nico: Komisch, bei mir gab es Probleme mit den ersten 3 Bytes, danach konnte ich eine Menge überschreiben (im DOS-Header) und dann mußte ich wieder im PE-Header aufpassen. Entweder liegt es an Unterschieden zwischen Delphi und VC, oder da ist was anderes zu beachten ... (ja, die Seitenzugriffsberechtigung habe ich angepaßt gehabt).
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#29

Re: CreateToolHelp32SnapShot hooks umgehen

  Alt 8. Aug 2005, 18:38
ihr das mit dem absolute ist ja mal hässlich gelöst ;P

Delphi-Quellcode:
program Project1;

uses windows;

const
  HelloWorld = 'Hello, World!';
var
  ModuleHandle: HMODULE;
  OldProtect: DWORD;
begin
  ModuleHandle := GetModuleHandle(nil);
  if not VirtualProtect(pointer(ModuleHandle), (Length(HelloWorld) + 1) * SizeOf(Char),
    PAGE_READWRITE, OldProtect) then
    Exit;
  lstrcpy(pointer(ModuleHandle), HelloWorld);
  VirtualProtect(pointer(ModuleHandle), (Length(HelloWorld) + 1) * SizeOf(Char),
    OldProtect, OldProtect);
  MessageBox(HWND(nil), pointer(ModuleHandle), 'foo', MB_OK or MB_ICONINFORMATION);
end.
man sollte das schon besser so durch typecasting lösen

absolut sagt aus das der gleiche sepicher benutzt wird

->
Delphi-Quellcode:
var bla: pointer;
    blub: integer absolute bla;
dann zeigen bla und blub auf gleiche adresse

Delphi-Quellcode:
var bla: pointer;

begin
  integer(bla) //<- würde das selbe sein wie blub
end;
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#30

Re: CreateToolHelp32SnapShot hooks umgehen

  Alt 8. Aug 2005, 18:47
Zitat von brechi:
ihr das mit dem absolute ist ja mal hässlich gelöst
Wes Grundes? In Delphi ist dies die einzige Form des echten Aliasing. Entspricht fast exakt dem Verhalten einer Referenz in C++.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    


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 21:12 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