![]() |
getaddrinfo hooken
Hallo,
ich arbeite gerade an einem ganz simplen Internetfilter, aber irgendwie komme ich hier nicht vorran. Es geht um die ws2_32 Funktion "getaddrinfo". Meine Definition der Funktion sieht folgendermaßen aus:
Code:
Da ich keine Defintion von PAddrInfo finden konnte, benutze ich diese:
var orig_getaddrinfo, new_getaddrinfo: function(nodename: PAnsiChar; servname : PAnsiChar; hints: PAddrInfo; var res: PAddrInfo): Integer; stdcall;
Code:
type
PAddrInfo = ^TAddrInfo; TAddrInfo = packed record ai_flags: Integer; ai_family: Integer; ai_socktype: Integer; ai_protocol: Integer; ai_addrlen: LongWord; ai_canonname: Array of AnsiChar; ai_addr: PSOCKADDR; ai_next: PAddrInfo; end; Wenn ich meine Hook-DLL zum Beispiel in Firefox "einfüge", stürzt Firefox direkt beim Start ab. Am Hooken selbst kann es eigentlich nicht liegen, da alle anderen Hooks gut funktionieren. Ich nehme daher an, dass an meiner gebastelten Funktionsdefinition irgendwas faul ist, also hab ich ein bisschen mit PAnsiChar und PWideChar rumgespielt, aber am Fehler ändert sich nichts. Ich hoffe ihr könnt mir - trotz weniger Informationen - helfen. [EDIT] Betriebssystem: Windows 7 - 64bit [/EDIT] |
AW: getaddrinfo hooken
Ich glaube mittlerweile, es liegt doch am Hooken.
Ich hab es zur Abwechselung jetzt mit "connect" versucht, aber ich denke mal ich mache was falsch mit den var-Parametern. Zum Hooken benutzte ich die uall-Collection. Hook setzen:
Delphi-Quellcode:
@orig_connect := GetProcAddress(LoadLibrary('ws2_32.dll'),'connect');
uallHook.HookCode(@orig_connect,@callback_connect,@new_connect);
Delphi-Quellcode:
var orig_connect, new_connect: function(s: Integer; var name: sockaddr_in; namelen: Integer): Integer; stdcall;
Delphi-Quellcode:
Sobald ich anfange die Paramter zu benutzen, verabschiedet sich Firefox...
function callback_connect(s: Integer; var name: sockaddr_in; namelen: Integer): Integer; stdcall;
begin Result:=orig_connect(s, name, namelen); //Ohne diese Zeile läuft es, aber das nutzt mir ja nichts... end; |
AW: getaddrinfo hooken
Ich bin mir schonmal ganz sicher, daß die WinAPI keine Delphi-Arrays (Array of ...) kennt.
Delphi-Quellcode:
type
PAddrInfo = ^TAddrInfo; TAddrInfo = packed record ai_flags: Integer; ai_family: Integer; ai_socktype: Integer; ai_protocol: Integer; ai_addrlen: LongWord; ai_canonname: PAnsiChar; // Pointer auf "Array[0..0] of AnsiChar" ai_addr: PSOCKADDR; ai_next: PAddrInfo; end;
Delphi-Quellcode:
oder eventuell auch so
var orig_getaddrinfo, new_getaddrinfo: function(nodename: PAnsiChar;
servname: PAnsiChar; hints: PAddrInfo; res: PAddrInfo): Integer; stdcall; // nodename, servname und hints = nur Lesezugriff // res = Schreibzugriff
Delphi-Quellcode:
var orig_getaddrinfo, new_getaddrinfo: function(nodename, servname: PAnsiChar;
const hints: TAddrInfo; var res: TAddrInfo): Integer; stdcall; |
AW: getaddrinfo hooken
Das ist mir nach dem Posten auch komisch vorgekommen.
Ich hab den Typ von ai_canonnam auch bereits geändert, aber das scheint überhaupt nicht das Problem zu sein... Selbst wenn ich alle Typen durch Pointer ersetze - meine Definitionen also irrelevant sind. Geht das Hooken schief :-/ Sobald ich die Parameter in der Callback-Function anrühre, ists vorbei... |
AW: getaddrinfo hooken
Ganz vergessen meinen eigenen Fehler zu korrigieren:
Delphi-Quellcode:
Manchmal sieht man vor lauter Bäumen den Wald kaum... :-)
function callback_connect(s: Integer; var name: sockaddr_in; namelen: Integer): Integer; stdcall;
begin Result:=[B]new[/B]_connect(s, name, namelen); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz