Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с перехватом Api WinSock, advApiHook 
:(
    Опции темы
artfully
Дата 28.9.2009, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 15.11.2008

Репутация: нет
Всего: нет



Сталкнулся с такой проблемой. Написаный мною код перхватывает Api функции Send , recv , WSAsend и WSArecv. В oper'e и IE все перехватывается отлично но в mazilla и в google chrome вылетают с ошибкой при попытке вызова подмененной функции.

Вот код внедряемой библиотеки


Код

library nwh;
uses
  Windows,
  advApiHook,
  idWinSock2,
  Messages,
  SysUtils;

var
i, flag, ThID: dword;
len, a, b, bt: dword;
link: pChar;



Tsend: function (s: TSocket; 
        Buf: pChar;
                  len, flags:
                  Integer): Integer; stdcall;

Trecv: function (s: TSocket;
                Buf: pChar;
                len, flags:
                Integer): Integer; stdcall;

TWSARecv: function ( s : TSocket;
                    lpBuffers : LPWSABUF;
                    dwBufferCount : DWORD;
                    var lpNumberOfBytesRecvd : DWORD;
                    var lpFlags : DWORD;
                    lpOverlapped : LPWSAOVERLAPPED;
                    lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;

TWSASend: function ( s : TSocket;
                    lpBuffers : LPWSABUF;
                    dwBufferCount : DWORD;
                    var lpNumberOfBytesSent : DWORD;
                    dwFlags : DWORD;
                    lpOverlapped : LPWSAOVERLAPPED;
                    lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;



function Nrecv(s: TSocket; Buf: pChar; len, flags: Integer): Integer; stdcall;
begin
    Trecv(s, buf, len, flags);
    asm
      pushad
    end;
    
    asm
      popad
    end;
end;

function Nsend(s: TSocket; Buf: pChar; len, flags: Integer): Integer; stdcall;
begin
    asm
      pushad
    end;
    Messageboxa(0,'send','ok',mb_ok);
 
    asm
      popad
    end;
    Tsend(s, buf, len, flags);
end;

function NWSARecv( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD;
  lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;
begin
    TWSARecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine);
    asm
      pushad
    end;

    asm
      popad
    end;
end;

function NWSASend ( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesSent : DWORD; dwFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED;
  lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;
begin
    asm
      pushad
    end;
    Messageboxa(0,'WSASend','ok',Mb_Ok);
    asm
      popad
    end;
    TWSASend(s, lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpOverlapped, lpCompletionRoutine);
end;

procedure DLLEntryPoint(dwReason: DWord);
begin
  case dwReason of
    DLL_PROCESS_ATTACH: begin
    HookProc('ws2_32.dll', 'recv', @Nrecv, @Trecv);
    HookProc('ws2_32.dll', 'send', @Nsend, @Tsend);
    HookProc('ws2_32.dll', 'WSARecv', @NWSARecv, @TWSARecv);
    HookProc('ws2_32.dll', 'WSASend', @NWSASend, @TWSASend);
  end;
    DLL_PROCESS_DETACH: begin
    UnhookCode(@TWSARecv);
    UnhookCode(@Trecv);
    UnhookCode(@TWSASend);
    UnhookCode(@Tsend);
  end;
  end;
end;

begin
 DllProc := @DLLEntryPoint;
 DLLEntryPoint(DLL_PROCESS_ATTACH);
end.




Вот программа которая осуществляет инжект в выбранный процесс:


Код

unit Unit1;

interface

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

  type
  TModuleArray = array of TModuleEntry32;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure GetProcessList;
var
  I: Integer;
  hSnapshoot: THandle;
  pe32: TProcessEntry32;
begin

  form1.ListView1.Items.Clear;
  hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  if (hSnapshoot = -1) then
    Exit;
  pe32.dwSize := SizeOf(TProcessEntry32);
  if (Process32First(hSnapshoot, pe32)) then
    repeat
      with form1.ListView1.Items.Add do begin
       caption:=pe32.szExeFile;
       SubItems.Add(inttostr(pe32.th32ProcessID));
      end;

    until
      not Process32Next(hSnapshoot, pe32);

  CloseHandle (hSnapshoot);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
GetProcessList;
end;

procedure TForm1.Button2Click(Sender: TObject);
var _h:cardinal;
_dllPath:string;
begin
if ListView1.SelCount>0 then begin
_h := OpenProcess(PROCESS_ALL_ACCESS, false, strtoint(ListView1.Selected.SubItems.Strings[0]));
_dllPath := ExtractFilePath(ParamStr(0))+'wh.dll';
InjectDll(_h, pchar(_dllPath));

end;
end;



end.


Помогите ! Уже 5ый день вожусь никак понять не могу в чем же дело.. и еще , не предлогайте пожалусто использовать madcodehook от madshi . просто это модуль для комерчесокой программы и этот компонент тут использоваться не может. (

к посту на всякий случай прикреплен архив с исходниками и всеми библиотеками которые я использую.

Это сообщение отредактировал(а) artfully - 28.9.2009, 01:58

Присоединённый файл ( Кол-во скачиваний: 157 )
Присоединённый файл  test.rar 70,03 Kb
PM MAIL   Вверх
bartram
Дата 28.9.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



artfully, во время внедрения не провобовал процесс под отладчик брать? на чем падает?


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0408 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.