Новичок
Профиль
Группа: Участник
Сообщений: 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
|