首页
社区
课程
招聘
[原创]Hook Api lib 0.5 - 2008.04.16更新
发表于: 2008-4-16 11:15 96038

[原创]Hook Api lib 0.5 - 2008.04.16更新

2008-4-16 11:15
96038
收藏
免费 7
支持
分享
最新回复 (99)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
51
谢谢大牛

不支持SYSENTER的长度解释
2008-7-25 14:59
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
52
这个库不支持hook sysenter
这个LDE不支持 sysenter指令
要想支持sysenter,换个反汇编引擎吧
2008-7-25 18:34
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
53
再次谢谢大牛解答
2008-7-25 19:13
0
雪    币: 201
活跃值: (10)
能力值: ( 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)
2008-8-11 16:26
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
55
能不能放个编译好的上来看看
2008-8-11 20:58
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
56
好的!
楼主的技术确实是不错,不知道楼主有没有兴趣接手一个项目,是关于操作控制的,主要是对于Windows剪切板操作进行控制 + 防截屏 + 防打印,具体需求已在上传的Doc文档中说明,开发费用优厚。
当然如果有其他高手有兴趣的话可以和我联系,我们公司的网址是www.515cn.com,我的QQ是405114427
上传的附件:
2008-8-11 22:16
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
57
哦,忘了告诉楼主,编译环境是:VS2005 SP1 + WinXP SP3
测试环境为:Vmware6.0 + WinXP SP3 + VC2005 SP1运行时库
不知道这样会不会有什么问题?
2008-8-11 22:20
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
58
VS2005编译的优化方式不一样,用下面的文件重新编译一下
上传的附件:
2008-8-12 09:54
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
59
这次我使用VS2008进行编译的,结果就Hook成功了,不知道楼主改动了哪些地方呢?
2008-8-12 11:07
0
雪    币: 201
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
60
请问,假如我要同时Hook两个以上的API 时,我要如何改程序代码
2008-10-24 16:07
0
雪    币: 250
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
61
看看 海风月影已经强悍到什么程度了...
2008-12-25 17:52
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
能否问一下,这个lib和微软的 Detours的优缺点比较,感谢
2009-2-7 12:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
63
楼主能不能发一个工程出来看看是怎么调用的啊?
我用vc6新建的一个MFC工程在debug模式下报了一堆错
请各大虾帮帮!
2009-2-8 13:00
0
雪    币: 164
活跃值: (10)
能力值: ( 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;
2009-2-10 21:01
0
雪    币: 404
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
支持大侠!
2009-2-11 13:52
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
66
膜拜计算函数长度的代码
2009-3-6 18:15
0
雪    币: 252
活跃值: (13)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
67
海风大侠,我这句怎么报错啊,要怎么改

//写入变量
        *(DWORD*)((DWORD)NewStub + delta + 3) = (DWORD)HookProc - ((DWORD)NewStub + delta + 3 + 4);
2009-3-8 11:21
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
68
这样的Hook有实际用途吗?源码都弄出来了,还怕人家防不住你吗?
2009-3-24 01:20
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
69
warning C4715: 'UnInstallHookApi' : not all control paths return a value

大虾呀,这是什么意思哟
2009-5-28 11:48
0
雪    币: 362
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
70
论稳定,我觉得还是用微软的Detours比较放心.单纯支持下.
2009-5-28 17:52
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
71
我也不想顶旧帖
可是呢。。。突然发现有些API。。。

push xx
call xx

类似这种相对跳转的。。。全部会出问题。。。

例如GetMessageTime
2009-6-15 23:37
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
72
笨笨熊就自己改改吧
这段代码我不想改了,要改也是重写了。hook越多越浪费内存
2009-6-15 23:55
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
73
改了。。。要保证支持各种变态的代码头,得换一个反汇编的库才方便。。。
2009-6-16 00:02
0
雪    币: 558
活跃值: (43)
能力值: ( 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(考虑了内存对齐)。
2009-8-12 00:43
0
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
75
等待delphi版的~~
2009-8-12 16:47
0
游客
登录 | 注册 方可回帖
返回
//