能力值:
(RANK:570 )
|
-
-
51 楼
谢谢大牛
不支持SYSENTER的长度解释
|
能力值:
(RANK:1130 )
|
-
-
52 楼
这个库不支持hook sysenter
这个LDE不支持 sysenter指令
要想支持sysenter,换个反汇编引擎吧
|
能力值:
(RANK:570 )
|
-
-
53 楼
再次谢谢大牛解答
|
能力值:
( LV2,RANK:10 )
|
-
-
54 楼
今天看了楼主的代码,试用了一下,结果问题就来了,代码如下:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include "OCM.h"
#pragma comment(lib, "HookApi.lib")
using namespace std;
typedef HMODULE(WINAPI *__pfnLoadLibrary)(LPCTSTR lpFileName);
HMODULE WINAPI My_LoadLibrary(DWORD RetAddr, __pfnLoadLibrary pfnLoadLibrary, LPCTSTR lpFileName)
{
MessageBoxA(NULL, "Hook", "Test", MB_OK);
return pfnLoadLibrary(lpFileName);
}
int _tmain(int argc, _TCHAR* argv[])
{
PHOOKENVIRONMENT pHook;
pHook = InstallHookApi("Kernel32.dll", "LoadLibraryA", My_LoadLibrary);
LoadLibraryA("HookApi.dll");
UnInstallHookApi(pHook);
MessageBoxA(NULL, "UnHook", "test", MB_OK);
return 0;
}
运行便提示错误:“0x78147440”指令引用的“0x00000000”内存不能被“Written”
请楼主和各位高手赐教,(HookApi编译为Dll)
|
能力值:
(RANK:1130 )
|
-
-
55 楼
能不能放个编译好的上来看看
|
能力值:
( LV2,RANK:10 )
|
-
-
56 楼
好的!
楼主的技术确实是不错,不知道楼主有没有兴趣接手一个项目,是关于操作控制的,主要是对于Windows剪切板操作进行控制 + 防截屏 + 防打印,具体需求已在上传的Doc文档中说明,开发费用优厚。
当然如果有其他高手有兴趣的话可以和我联系,我们公司的网址是www.515cn.com,我的QQ是405114427
|
能力值:
( LV2,RANK:10 )
|
-
-
57 楼
哦,忘了告诉楼主,编译环境是:VS2005 SP1 + WinXP SP3
测试环境为:Vmware6.0 + WinXP SP3 + VC2005 SP1运行时库
不知道这样会不会有什么问题?
|
能力值:
(RANK:1130 )
|
-
-
58 楼
VS2005编译的优化方式不一样,用下面的文件重新编译一下
|
能力值:
( LV2,RANK:10 )
|
-
-
59 楼
这次我使用VS2008进行编译的,结果就Hook成功了,不知道楼主改动了哪些地方呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
60 楼
请问,假如我要同时Hook两个以上的API 时,我要如何改程序代码
|
能力值:
( LV6,RANK:90 )
|
-
-
61 楼
看看 海风月影已经强悍到什么程度了...
|
能力值:
( LV2,RANK:10 )
|
-
-
62 楼
能否问一下,这个lib和微软的 Detours的优缺点比较,感谢
|
能力值:
( LV2,RANK:10 )
|
-
-
63 楼
楼主能不能发一个工程出来看看是怎么调用的啊?
我用vc6新建的一个MFC工程在debug模式下报了一堆错
请各大虾帮帮!
|
能力值:
( LV2,RANK:10 )
|
-
-
64 楼
vs2005编译,直接使用代码,生成动态库,xp下测试正常,win2003server下错误。
修改下面两处后,xp,2k3下Debug/Release均通过.
1.
pHookEnv = (PHOOKENVIRONMENT)VirtualAlloc(NULL,SizeOfStub,MEM_COMMIT,PAGE_READWRITE);
替换为:
pHookEnv = (PHOOKENVIRONMENT)VirtualAlloc(NULL,SizeOfStub,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
2.
SizeOfStub = GetEndAddr()-(DWORD)&pEnv;
替换为:
SizeOfStub = (DWORD)GetEndAddr-(DWORD)&pEnv;
|
能力值:
( LV2,RANK:10 )
|
-
-
65 楼
支持大侠!
|
能力值:
(RANK:570 )
|
-
-
66 楼
|
能力值:
( LV3,RANK:20 )
|
-
-
67 楼
海风大侠,我这句怎么报错啊,要怎么改
//写入变量
*(DWORD*)((DWORD)NewStub + delta + 3) = (DWORD)HookProc - ((DWORD)NewStub + delta + 3 + 4);
|
能力值:
( LV2,RANK:10 )
|
-
-
68 楼
这样的Hook有实际用途吗?源码都弄出来了,还怕人家防不住你吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
69 楼
warning C4715: 'UnInstallHookApi' : not all control paths return a value
大虾呀,这是什么意思哟
|
能力值:
( LV7,RANK:100 )
|
-
-
70 楼
论稳定,我觉得还是用微软的Detours比较放心.单纯支持下.
|
能力值:
(RANK:570 )
|
-
-
71 楼
我也不想顶旧帖
可是呢。。。突然发现有些API。。。
push xx
call xx
类似这种相对跳转的。。。全部会出问题。。。
例如GetMessageTime
|
能力值:
(RANK:1130 )
|
-
-
72 楼
笨笨熊就自己改改吧
这段代码我不想改了,要改也是重写了。hook越多越浪费内存
|
能力值:
(RANK:570 )
|
-
-
73 楼
改了。。。要保证支持各种变态的代码头,得换一个反汇编的库才方便。。。
|
能力值:
( LV12,RANK:220 )
|
-
-
74 楼
[QUOTE=海风月影;441836]
while (ReplaceCodeSize < 5)
ReplaceCodeSize += GetOpCodeSize((BYTE*)((DWORD)ApiEntry + (DWORD)ReplaceCodeSize));
if (ReplaceCodeSize > 16) return NULL;
[/QUOTE]
不错的代码!
有个小问题:
if (ReplaceCodeSize > 16) return NULL; //这里有点想当然了,指令的最大长度为15字节,所以这里并不特别保险,while执行后,ReplaceCodeSize 的最大值为4+15=19,所以HOOKENVIRONMENT.savebytes的长度最好是定为20(考虑了内存对齐)。
|
能力值:
( LV2,RANK:10 )
|
-
-
75 楼
等待delphi版的~~
|
|
|