Мдя....
| Код | library AdvBox32;
uses Windows;
type OldCode = packed record One: dword; two: word; end;
far_jmp = packed record PuhsOp: byte; PushArg: pointer; RetOp: byte; end;
var JmpMbw, JmpMba: far_jmp; OldMbw, OldMba: OldCode; MbwAdr, MbaAdr: pointer;
function TrueCreateFile(lpFileName: PWideChar; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; stdcall; var Written: dword; begin
WriteProcessMemory(INVALID_HANDLE_VALUE, MbwAdr, @OldMbw, SizeOf(OldCode), Written);
Result:=0;//CreateFileW(lpFileName,dwDesiredAccess,dwShareMode,lpSecurityAttributes,dwCreationDisposition,dwFlagsAndAttributes,hTemplateFile);
WriteProcessMemory(INVALID_HANDLE_VALUE, MbwAdr, @JmpMbw, SizeOf(far_jmp), Written); end;
function MyCreateFileW(lpFileName: PWideChar; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; stdcall; begin Result := TrueCreateFile(lpFileName,dwDesiredAccess,dwShareMode,lpSecurityAttributes,dwCreationDisposition,dwFlagsAndAttributes,hTemplateFile); end;
function MyCreateFileA(lpFileName: PAnsiChar; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; stdcall; var cLen: dword; FileName:PWideChar; begin cLen := lstrlen(lpFileName) * SizeOf(WideChar) + 2; GetMem(FileName, cLen); StringToWideChar(lpFileName, FileName, cLen); Result := MyCreateFileW(FileName,dwDesiredAccess,dwShareMode,lpSecurityAttributes,dwCreationDisposition,dwFlagsAndAttributes,hTemplateFile); FreeMem(FileName); end;
Procedure SetHook(); var hkernel32: dword; Bytes: dword; begin hkernel32 := GetModuleHandle('kernel32.dll');
MbwAdr := GetProcAddress(hkernel32, 'CreateFileW'); MbaAdr := GetProcAddress(hkernel32, 'CreateFileA');
ReadProcessMemory(INVALID_HANDLE_VALUE, MbwAdr, @OldMbw, SizeOf(OldCode), Bytes); ReadProcessMemory(INVALID_HANDLE_VALUE, MbaAdr, @OldMba, SizeOf(OldCode), Bytes);
JmpMbw.PuhsOp := $68; JmpMbw.PushArg := @MyCreateFileW; JmpMbw.RetOp := $C3;
JmpMba.PuhsOp := $68; JmpMba.PushArg := @MyCreateFileA; JmpMba.RetOp := $C3;
WriteProcessMemory(INVALID_HANDLE_VALUE, MbwAdr, @JmpMbw, SizeOf(far_jmp), Bytes); WriteProcessMemory(INVALID_HANDLE_VALUE, MbaAdr, @JmpMba, SizeOf(far_jmp), Bytes);
end;
Procedure Unhook(); var Bytes: dword; begin WriteProcessMemory(INVALID_HANDLE_VALUE, MbaAdr, @OldMba, SizeOf(OldCode), Bytes); WriteProcessMemory(INVALID_HANDLE_VALUE, MbwAdr, @OldMbw, SizeOf(OldCode), Bytes); end;
// залепа Function MessageProc(code : integer; wParam : word; lParam : longint) : longint; stdcall; begin CallNextHookEx(0, Code, wParam, lparam); Result := 0; end;
Procedure SetGlobalHookProc(); begin SetWindowsHookEx(WH_GETMESSAGE, @MessageProc, HInstance, 0); Sleep(INFINITE); end; //
Procedure SetGlobalHook(); var hMutex: dword; TrId: dword; begin hMutex := CreateMutex(nil, false, 'AdvareHook'); if GetLastError = 0 then CreateThread(nil, 0, @SetGlobalHookProc, nil, 0, TrId) else CloseHandle(hMutex); end;
//входная точка dll procedure DLLEntryPoint(dwReason: DWord); begin case dwReason of DLL_PROCESS_ATTACH: begin //установка глобальной ловушки SetGlobalHook(); SetHook() end; DLL_PROCESS_DETACH: UnHook(); end; end;
begin DllProc := @DLLEntryPoint; DLLEntryPoint(DLL_PROCESS_ATTACH); end.
|
Так где ты собственно перехватываешь? Я не вижу например имени файла Из кода я понял что ты просто пропускаешь эту функцию через свою dll, при этом ничего не изменяя. из-за этого и ошибки И вообще ты взял плохой пример для понимания ИМХО  Вот держи модули, и примеры перехвата, которые реализованы более "просто" для понимания. Если что то будут непонятно, то спрашивай  |