AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

getaddrinfo hooken

Ein Thema von diabox · begonnen am 25. Aug 2010 · letzter Beitrag vom 1. Sep 2010
Antwort Antwort
Benutzerbild von diabox
diabox

Registriert seit: 13. Sep 2006
61 Beiträge
 
Delphi 2010 Professional
 
#1

getaddrinfo hooken

  Alt 25. Aug 2010, 16:10
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:
var orig_getaddrinfo, new_getaddrinfo: function(nodename: PAnsiChar; servname : PAnsiChar; hints: PAddrInfo; var res: PAddrInfo): Integer; stdcall;
Da ich keine Defintion von PAddrInfo finden konnte, benutze ich diese:
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]
Wer zweifelt, detoniert nicht!'
Dieter Nuhr

Geändert von diabox (25. Aug 2010 um 16:38 Uhr) Grund: Betriebssystem angefügt
  Mit Zitat antworten Zitat
Benutzerbild von diabox
diabox

Registriert seit: 13. Sep 2006
61 Beiträge
 
Delphi 2010 Professional
 
#2

AW: getaddrinfo hooken

  Alt 26. Aug 2010, 12:51
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);
var orig_connect, new_connect: function(s: Integer; var name: sockaddr_in; namelen: Integer): Integer; stdcall;
Delphi-Quellcode:
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;
Sobald ich anfange die Paramter zu benutzen, verabschiedet sich Firefox...
Wer zweifelt, detoniert nicht!'
Dieter Nuhr
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.052 Beiträge
 
Delphi 12 Athens
 
#3

AW: getaddrinfo hooken

  Alt 26. Aug 2010, 13:22
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:
var orig_getaddrinfo, new_getaddrinfo: function(nodename: PAnsiChar;
  servname: PAnsiChar; hints: PAddrInfo; res: PAddrInfo): Integer; stdcall;
// nodename, servname und hints = nur Lesezugriff
// res = Schreibzugriff
oder eventuell auch so
Delphi-Quellcode:
var orig_getaddrinfo, new_getaddrinfo: function(nodename, servname: PAnsiChar;
  const hints: TAddrInfo; var res: TAddrInfo): Integer; stdcall;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Aug 2010 um 13:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von diabox
diabox

Registriert seit: 13. Sep 2006
61 Beiträge
 
Delphi 2010 Professional
 
#4

AW: getaddrinfo hooken

  Alt 26. Aug 2010, 13:28
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...
Wer zweifelt, detoniert nicht!'
Dieter Nuhr
  Mit Zitat antworten Zitat
Benutzerbild von diabox
diabox

Registriert seit: 13. Sep 2006
61 Beiträge
 
Delphi 2010 Professional
 
#5

AW: getaddrinfo hooken

  Alt 1. Sep 2010, 17:02
Ganz vergessen meinen eigenen Fehler zu korrigieren:

Delphi-Quellcode:
function callback_connect(s: Integer; var name: sockaddr_in; namelen: Integer): Integer; stdcall;
begin
 Result:=[B]new[/B]_connect(s, name, namelen);
end;
Manchmal sieht man vor lauter Bäumen den Wald kaum...
Wer zweifelt, detoniert nicht!'
Dieter Nuhr

Geändert von mkinzler ( 1. Sep 2010 um 17:06 Uhr) Grund: Delphi-Tag eingefügt
  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 16:32 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