проблемы при использовании HookProc из advApiHook

Тема в разделе "WASM.WIN32", создана пользователем igrokj, 19 дек 2008.

  1. igrokj

    igrokj New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    2
    привет всем, подскажите пожалуйста, хочу перехватить функцию send из ws2_32 у iexplorer.exe, взять данные и вызвать оригинальную функцию, с MessageBoxA такая фишка проходит а вот с send почему то нет, там рекурсия какая то получается, в итоге у меня не получается вызвать оригинальную функцию.

    Вот код иджектируемой ДЛЛ:
    library Filter;


    uses
    Windows,
    SysUtils, advApiHook, WinSock, WinSock2, Dialogs,
    Classes;


    {$R *.res}
    var
    Truesend: function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;

    function Newsend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
    begin
    Truesend(s, Buf, len, flags);
    //ShowMessage(PChar(Buf));
    end;


    begin
    MessageBoxA(0, 'Апи перехват', 'HookProc', 0);
    HookProc('ws2_32.dll', 'send', @Newsend, @Truesend);
    end.

    Далее код проекта, который импортирует ДЛЛ в процесс:
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, advApiHook, tlHelp32;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    FProcessEntry32: TProcessEntry32;
    FSnapshotHandle: THANDLE;
    PID: Integer;
    bFind: boolean;
    hProcess: Thandle;
    begin
    bFind:=true;
    FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    FProcessEntry32.dwSize := sizeof(FProcessEntry32);
    Process32First(FSnapshotHandle, FProcessEntry32);

    while bFind do
    begin
    if (ExtractFileName(FProcessEntry32.szExeFile) = 'iexplorer.exe') then
    begin
    bFind:=false;
    Break;
    end;

    if bFind=true then
    bFind:=Process32Next(FSnapshotHandle, FProcessEntry32);
    end;
    Sleep(2000);

    InjectDll(OpenProcess(PROCESS_ALL_ACCESS, FALSE, FProcessEntry32.th32ProcessID), 'Filter.dll');
    end;

    end.
     
  2. igrokj

    igrokj New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    2
    мужики сам разобрался :))))), если кому нужно обращайтесь почтой