Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Проблемы с hook (madCodeHook)


Автор: oslik 24.10.2005, 12:53
Всем привет, проблема такая устанавливаю hook (использую пакет madCollection) на ICQLite, чтоб считывать весь входящий и исходящий траффик, но ничего не выходит вылетает ошибка и всё

Код библиотеки такой:
Цитата

library Hook;

uses
  Windows,
  Winsock,
  SysUtils,
  madCodeHook;

var
  sendNextHook: function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
  recvNextHook: function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;

function recvHookProc(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
begin
  Result := recvNextHook(s, Buf, len, flags);
end;

function sendHookProc(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
begin
  Result := sendNextHook(s, Buf, len, flags);
end;

procedure EntryPoint(Ac: dword); stdcall;
begin
  if Ac = DLL_PROCESS_ATTACH then
  begin
      HookCode(@send, @sendHookProc, @sendNextHook);
      HookCode(@recv, @recvHookProc, @recvNextHook);
  end;
end;

begin
  DLLProc := @EntryPoint;
  EntryPoint(DLL_PROCESS_ATTACH);
end.


Запускаю, а во во время работы вылетает такая ошибка
Exception EAccessViolation in module hook.dll at FF63F5F9.
Access violation at adress FF6405F9. Read of address FF6405F9


Помогите понять ошибку, никак не доходит smile

Автор: Guest 24.10.2005, 13:23
Попробуй advApiHook, это примерно тоже самое что и MadCodeHook, но побольше возможностей и открытые исходники.
Либу с примерами я качал где-то на http://ms-rem.dot-link.net/

Автор: oslik 25.10.2005, 10:05
оо, спасибо, отлично всё работает smile

А может кто знает как определить пакет, который отправляет или принимает сообщение от другого пользователя, а остальные не трогать?

перевожу в ASCII так, может есть идее как ещё переводить

Цитата

function ConvertDataToAscii(Buffer: pointer; Length: Word): string;
var
  Iterator: integer;
  AsciiBuffer: string;
begin
  AsciiBuffer := '';
  for Iterator := 0 to Length - 1 do
  begin
    if char(pointer(integer(Buffer) + Iterator)^) in [#32..#254] then
      AsciiBuffer := AsciiBuffer + char(pointer(integer(Buffer) + Iterator)^)
    else
      AsciiBuffer := AsciiBuffer;
  end;
  Result := AsciiBuffer;
end;


А в hex так

Цитата

function ConvertDataToHex(Buffer: pointer; Length: Word): string;
var
  Iterator: integer;
  HexBuffer: string;
begin
  HexBuffer := '';
  for Iterator := 0 to Length - 1 do
  begin
    HexBuffer := HexBuffer + IntToHex(Ord(char(pointer(integer(Buffer) + Iterator)^)), 2) + ' ';
  end;
  Result := HexBuffer;
end;



и ещё аська начинает немного притормаживать это из-за этих циклов да?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)