Dll与Hook
来源:互联网 发布:淘宝美工工作内容 编辑:程序博客网 时间:2024/04/29 10:25
最近看了孙鑫的视频,学习了一下DLL和HOOK的一些知识,故此做下笔记。下面以add,sub两函数和Point类为例。
一,Dll的简单使用
使用 一个DLL,一般需要另外两个文件.H和.LIB。.H文件或.LIB文件。.H文件可用于使用.DLL的客户或是.DLL文件本身,其作用编译时期。.LIB文件是一个引入苦,用于客户程序,作用在链接时期。.DLL文件当然作用于运行时期了。
打开VS2008,选择Win32,DLL空项目。新建一个DLL.CPP和DLL.H文件。
在C++中对函数名字的解析和C语言中方式不一样,因为C++支持重载的缘故,为了不同的语言都可以使用同一个DLL,我可以这样:
在.H文件里更改为:#define DLL_API extern "C" _declspec(dllimport)
在.CPP文件里更正为:#define DLL_API extern "C" _declspec(dllexport)
注意:C一定要大写,这样导出函数名是以C命名的方式。
在不同的不同的语言中,函数的调用规则是不一样的,在C语言中式C调用规则,在Dephi中是PASCAL(标准调用)调用规则中,为了不同的语言可以使用同一个DLL,我们需要更改函数的调用规则,例如:
.H文件中:DLL1_API int _stdcall add(int a,int b);
.CPP文件中实现add实现时也应加入_stdcall。
但这样会更改导出的函数名,这又与extern "C"向冲突。
解决上述文件的方式是是用.DEF文件,在vs2008中,可以新建一个,格式如下:
LIBRARY “Dll”
EXPORTS
add
subtract
使用动态DLL,有两种方式,隐式调用和显示调用。
#pragma comment(lib,"Dll.lib")
这是隐式的,程序启动时,把所有的函数都映射进去,但有时我们只需要一个,不必要这么多,这是使用显示调用。
使用显示调用,要使用以下两个函数:
1.HMODULE WINAPI LoadLibrary(LPCTSTR lpFileName);
2.FARPROC WINAPI GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
二,Hook的简单使用
先看一个函数:
HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod, DWORD dwThreadId);
参数意义:
idHook参数可以取如下常量:
WH_CALLWNDPROC //窗口钩子,当系统向目标窗口发送消息时将触发此钩子
WH_CALLWNDPROCRET //窗口钩子,当窗口处理完消息后将触发此钩子
WH_CBT //当Windows激活、产生、释放(关闭)、最小化、最大化或改变窗口时都将触发此事件
WH_DEBUG //调试钩子
WH_GETMESSAGE //当往消息队列中增加一个消息时将触发此钩子
WH_JOURNALPLAYBACK //回放钩子,可以用于播放已记录的鼠标和键盘的操作
WH_JOURNALRECORD //记录钩子,可以用于记录鼠标和键盘的操作,木马程序可以使用此钩子窃取受控方在屏幕中敲入的密码
WH_KEYBOARD //当敲击键盘时将触发此钩子
WH_MOUSE //当有鼠标操作时将触发此钩子
WH_MSGFILTER //消息过滤钩子
WH_SHELL //Shell钩子
WH_SYSMSGFILTER //系统消息过滤钩子
lpfn参数
是一钩子过程,不同的钩子有不同的钩子过程。如果是全局钩子,该函数在DLL中,如果不是在当前进程中。
hMod参数:
指向DLL的句柄,如果dwThreadId是当前进程的一个线程ID并且钩子处理函数在当前进程中,hMod一定要为NULL。
dwThreadId参数:
如果是全局钩子该参数就为0,如果不是就是当前进程的一个线程ID
2.卸载一个HOOL
BOOL UnhookWindowsHookEx(HHOOK hhk);
例子1:非全局钩子
例子2:全局钩子
在.DEF文件中
SetHook @2
意思是制定SetHook在DLL中的位置
SEGMENTS
MySec READ WRITE SHARED
意思共享在.DLL中的MySec。
- Dll与Hook
- HOOK 与 DLL的实例
- DLL HOOK 技术与 Stuxent
- Windows Dll注入与API HOOK
- HOOK DLL
- 利用LdrLoadLibrary加载与隐藏DLL (绕过API HOOK LoadLibrary)
- VC6.0 DLL调用与创建的例子(HOOK)
- HOOK API DLL 注入
- Crash test - DLL Hook
- Keyboard Hook dll
- HOOK API DLL 注入
- HOOK&DLL编写
- Dll导出表Hook
- HooK Dll简单例子
- Hook与Socket Hook
- Hook与Socket Hook
- [32/64]关于DLL注入与Hook(minihook)的简单介绍与使用
- 关于dll注入的hook
- tomcat编码
- 简单模板
- win2003用户迁移
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 2 - 标量变量 - 赋值
- Dll与Hook
- .NET调用新浪微博开放平台接口的代码示例
- 华为:IPv6过渡技术中的探索
- spring ioc 下继承使用不当造成的问题
- ICANN:全球IP地址即将耗尽 应尽快启用IPv6
- web打印
- 变量的扩展问题--总结
- java中的值传递和引用传递
- Android Animation学习笔记