WIN7 Hook inet_addr 无效求解决办法
unit APIHook;
interface
uses
SysUtils,
Windows, WinSock;
type
TSockProc =function (cp: PChar): DWord; stdcall;
PJmpCode = ^TJmpCode;
TJmpCode = packed record
JmpCode: BYTE;
Address: TSockProc;
MovEAX: Array [0..2] of BYTE;
end;
procedure HookAPI;
procedure UnHookAPI;
var
Oldinet_addr: TSockProc;
JmpCode: TJmpCode;
OldProc: array [0..1] of TJmpCode;
Addinet_addr: pointer; //API地址
TmpJmp: TJmpCode;
ProcessHandle: THandle;
implementation
{----------}
{函数功能:inet_addr函数的HOOK
{函数参数:同inet_addr
{函数返回值:DWord
{----------}
function Myinet_addr(cp: PChar): DWord; stdcall;
begin
if cp= '121.14.34.50' then //原验证地址
begin
cp:=pchar('127.0.0.1'); //替换ip
end;
WriteProcessMemory(ProcessHandle, Addinet_addr, @OldProc[0], 8, dwSize);
Result := Oldinet_addr(cp);
JmpCode.Address := @Myinet_addr;
WriteProcessMemory(ProcessHandle, Addinet_addr, @JmpCode, 8, dwSize);
end;
{----------}
{过程功能:HookAPI
{过程参数:无
{----------}
procedure HookAPI;
var
DLLModule: THandle;
dwSize: cardinal;
begin
ProcessHandle := GetCurrentProcess;
DLLModule := LoadLibrary('ws2_32.dll');
Addinet_addr := GetProcAddress(DLLModule, 'inet_addr'); //取得API地址
JmpCode.JmpCode := $B8;
JmpCode.MovEAX[0] := $FF;
JmpCode.MovEAX[1] := $E0;
JmpCode.MovEAX[2] := 0;
ReadProcessMemory(ProcessHandle, Addinet_addr, @OldProc[0], 8, dwSize);
JmpCode.Address := @Myinet_addr;
WriteProcessMemory(ProcessHandle, Addinet_addr, @JmpCode, 8, dwSize); //修改inet_addr入口
Oldinet_addr := Addinet_addr;
end;
{----------}
{过程功能:取消HOOKAPI
{过程参数:无
{----------}
procedure UnHookAPI;
var
dwSize: Cardinal;
begin
WriteProcessMemory(ProcessHandle, Addinet_addr, @OldProc[0], 8, dwSize);
end;
end.
这个段代码WIN7 下没有效果 那里的问题