WIN7 Hook inet_addr 无效求解决办法

meiam5 2012-08-31 10:15:19
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 下没有效果 那里的问题
...全文
175 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝色光芒 2012-08-31
  • 打赏
  • 举报
回复
1.判断WriteProcessMemory返回值
2.函数inet_addr可能压根就没调用,这个可能性最大
罗捷捷 2012-08-31
  • 打赏
  • 举报
回复
管理员权限了么
meiam5 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

1.判断WriteProcessMemory返回值
2.函数inet_addr可能压根就没调用,这个可能性最大
[/Quote]

怎么判断 。 怎么知道 inet_addr 是否调用成功
meiam5 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

管理员权限了么
[/Quote]

是原理员权限

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧