首页
社区
课程
招聘
[求助]救命呀,为什么Hook Openprocess在XP正常,在2003下说内存不能为READ??
发表于: 2009-4-8 12:04 14538

[求助]救命呀,为什么Hook Openprocess在XP正常,在2003下说内存不能为READ??

2009-4-8 12:04
14538
  请教各位为什么这个DLL在XP下正常,但在2003下会提示内存不能为READ,救命啊。折腾我好几天了,郁闷。

Library NotCloseSelf;

uses
  Windows,
  SysUtils,
  NativeAPI;

type
  OldCode = packed record
    One : DWord;
    Two : Word;
  end;

  far_jmp = packed record
    PuhsOp  : Byte;
    PushArg : Pointer;
    RetOp   : Byte;
  end;

const
  HOOK_MEM_FILENAME = 'tmp.hkt';

var
  hMapObject: THandle;
  startPid: PDWORD;   //保存PID
 JmpOpenProcess : far_jmp;
 OldOpenProcess : OldCode;
 ptrOpenProcess : Pointer;
 dWpOfOpenProcess : DWORD;

function NewOpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL;
  dwProcessId: DWORD): THandle; stdcall;
begin
  if startPid^ = dwProcessId then
  begin
    Result := 0;
    Exit;
  end;
  try
    WriteProcessMemory(GetCurrentProcess, ptrOpenProcess, @OldOpenProcess, SizeOf(OldCode), dWpOfOpenProcess);
    Result := OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId);
  finally
    WriteProcessMemory(GetCurrentProcess, ptrOpenProcess, @JmpOpenProcess, SizeOf(far_jmp), dWpOfOpenProcess);
  end;
end;

procedure SetHook();
begin
  ptrOpenProcess := GetProcAddress(GetModuleHandle('kernel32.dll'), 'OpenProcess');
  ReadProcessMemory(GetCurrentProcess, ptrOpenProcess, @OldOpenProcess, SizeOf(OldCode), dWpOfOpenProcess);
  JmpOpenProcess.PuhsOp  := $68;
  JmpOpenProcess.PushArg := @NewOpenProcess;
  JmpOpenProcess.RetOp   := $C3;
  WriteProcessMemory(GetCurrentProcess, ptrOpenProcess, @JmpOpenProcess, SizeOf(far_jmp), dWpOfOpenProcess);
end;

procedure Unhook();
begin
  WriteProcessMemory(GetCurrentProcess, ptrOpenProcess, @OldOpenProcess, SizeOf(OldCode), dWpOfOpenProcess);  
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, 'Test');
  if GetLastError = 0 then
  CreateThread(nil, 0, @SetGlobalHookProc, nil, 0, TrId) else
  CloseHandle(hMutex);
end;

procedure SetGlobalHookEx(pid: DWORD); stdcall;
begin
  startPid^ := pid;
  SetGlobalHook;
end;

procedure CreateMapShare;
begin
  hMapObject := OpenFileMapping(FILE_MAP_ALL_ACCESS, True, HOOK_MEM_FILENAME);
  if hMapObject>0 then startPid := MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, 0);
end;

procedure FreeMapFile;
begin
  if startPid<>nil then UnMapViewOfFile(startPid);
  if hMapObject>0 then CloseHandle(hMapObject);
end;

procedure DLLEntryPoint(dwReason: DWord);
begin
  Case dwReason Of
    DLL_PROCESS_ATTACH:
      begin
        CreateMapShare;
        SetHook();
      end;
    DLL_PROCESS_DETACH:
      begin
        Unhook();
        FreeMapFile;
      end;
  end;
end;

exports
  SetGlobalHookEx;

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (49)
雪    币: 962
活跃值: (1681)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
内存属性问题?
2009-4-8 12:13
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
在XP、NT都正常,但2003下就出问题了,运行过程也正常,HOOK也正常,但退出程序时就报一个内存地址不能为读。请教应该如何修正?同样用这个DLL HOOK ZwQuerySystemInformation 也是正常的,唯独OPENPROCESS不行,请高手指点一下,感激不尽。这个问题困扰了我好多天了。
2009-4-8 13:02
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
4
你根本无视线程同步啊
回小学好好学学编程基础吧
2009-4-8 13:22
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
2009-4-8 13:33
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不知道楼主在哪学习的HOOK的

网上的HOOK大多没有考虑线程同步的问题

原则:hook了就别解hook
2009-4-8 13:38
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
7
不被人损几次,我看你是别想搞懂了~
2009-4-8 13:38
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
虽然听的很不舒服,但还是谢谢你,毕竟给了我的思路。3Q
2009-4-8 13:44
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
9
想要舒服我建议你去玩劲舞团
2009-4-8 14:07
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
你说话怎么那么损呢?吃什么长大的?你TM还真把自己当回事了?给你点颜色开染坊?
2009-4-8 14:18
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
11
来来来,我开染坊了,楼下的谁要染布快了啊
2009-4-8 14:21
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
搬个板凳过来看吵架
2009-4-8 14:25
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
13
是有点过了,还是很不错的了,说实话,你写的我还不怎么看懂啊 加油了
2009-4-8 14:25
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
qihoocom 你TM是不是来找茬的?老子陪你,你TM个人头不像狗 卵 子的东西,拽你M B什么东西。草 你  M  的,说话像吃 屎的一样,你父母用米田共把你养大?
2009-4-8 14:36
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
MJ帮你指出问题,又没有骂你
你就这样做
未来的路还很长。。。
2009-4-8 15:02
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
16
要是以后遇到MJ,你小子玩完了....
2009-4-8 15:07
0
雪    币: 203
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
骂的好,某人回幼儿园去学学做人
2009-4-8 15:07
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
18
哎,我开个染坊,我招谁惹谁了啊
2009-4-8 15:09
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
发帖少的人都很冲动
2009-4-8 15:09
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
楼上的正解,虽然qihoocom说话是有点让你不舒服了,但是他也指出了你的毛病,学习嘛,就这样,我以前也被qihoocom说过,但是没怎么理会,他是高手呀,你得跟他学习学习,他会来指出你毛病你该感到高兴啊,嘿嘿。现在才知道qihooocom是MJ。呵呵!!LZ加油努力!
2009-4-8 15:10
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
http://club2.cat898.com/newbbs/dispbbs.asp?boardid=1&id=2711873
2009-4-8 15:11
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
高手归高手,说话这么损有必要吗?如果我自己能查出问题,还用出来求教吗?如果他能回答自然很感激他,但有必要这么损人吗?
2009-4-8 15:13
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
我错了
我太冲动了
2009-4-8 15:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
这本生没有问题``有问题的是你的态度``哈哈,小心你的看雪ID吧``
2009-4-8 15:15
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
25
对啊,你看我现在就很和谐,我只开染坊
2009-4-8 15:17
0
游客
登录 | 注册 方可回帖
返回
//