社区
进程/线程/DLL
帖子详情
看msdn上说卸载全局钩子时并不卸载钩子所在的dll?即使安装钩子的程序退出了,不知道是不是这样
realmiss
2003-10-20 12:41:21
必须要等所有已经映射了dll的程序全部退出了或者显示调用freelibrary是这样的吗?
...全文
99
8
打赏
收藏
看msdn上说卸载全局钩子时并不卸载钩子所在的dll?即使安装钩子的程序退出了,不知道是不是这样
必须要等所有已经映射了dll的程序全部退出了或者显示调用freelibrary是这样的吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
logdzc
2003-11-17
打赏
举报
回复
我想只有楼上说的是对的
mimile
2003-11-17
打赏
举报
回复
调用UnhookWindowsHookEx后,所有曾经被hook的进程都会卸载dll映射,只有安装hook的进程要等待自己结束才卸载
coolali
2003-10-31
打赏
举报
回复
是这样
hdxy
2003-10-26
打赏
举报
回复
win2000 和 win98 不一样的。
win98 当你卸掉钩子后,等一会当没有其他程序在使用你的钩子dll时,系统变化卸载。
而win2000即便卸掉钩子,dll 还是不会卸载的。
这种情况我猜想你可以自己定义输出函数调用“freeLibary”卸掉,只是猜测,没试过。
aachenG
2003-10-25
打赏
举报
回复
是这样的,你去尝试删除那个dll,看能不能成功就清楚了。
yaoha2003
2003-10-24
打赏
举报
回复
说得对
huanyun
2003-10-24
打赏
举报
回复
是的 全局dll被所有程序引用 如果还有对该dll的引用
就不会从内存中卸载该dll
realmiss
2003-10-24
打赏
举报
回复
up有分 大家一起来up
钩子
函数的使用,有例子
三:
程序
的设计: I:设置
钩子
设置
钩子
是通过SetWindowsHookEx ()的API函数. 原形: HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId) idhook:装入
钩子
的类型. lpfn:
钩子
进程的入口地址 hMod: 应用
程序
的事件句柄 dwThreadId: 装入
钩子
的线程标示 参数: idHook: 这个参数可以是以下值: WH_CALLWNDPROC、WH_CALLWNDPROCRET、WH_CBT、WH_DEBUG、WH_FOREGROUNDIDLE、WH_GETMESSAGE、WH_JOURNALPLAYBACK、WH_JOURNALRECORD、WH_KEYBOARD、 WH_KEYBOARD_LL、WH_MOUSE、WH_MOUSE_LL、WH_MSGFILTER、WH_SHELL、WH_SYSMSGFILTER。 对于这些参数,我不想一一加以解释,因为
MSDN
中有关于他们的详细注解。我只挑选其中的几个加以中文
说
明。 WH_KEYBOARD:一旦有键盘敲打消息(键盘的按下、键盘的弹起),在这个消息被放在应用
程序
的消息队列前,WINDOWS将会调用你的
钩子
函数。
钩子
函数可以 改变和丢弃键盘敲打消息。 WH_MOUSE:每个鼠标消息在被放在应用
程序
的消息队列前,WINDOWS将会调用你的
钩子
函数。
钩子
函数可以改变和丢弃鼠标消息。 WH_GETMESSAGE:每次当你的应用
程序
调用一个GetMessage()或者一个PeekMessage()为了去从应用
程序
的消息队列中要求一个消息
时
,WINDOWS都会调用你的
钩子
函数。 而
钩子
函数可以改变和丢弃这个消息。 II:释放
钩子
钩子
的释放使用的是UnhookWindowsHookEx()函数 原形:BOOL UnhookWindowsHookEx( HHOOK hhk ) UnhookWindowsHookEx()函数将释放的是
钩子
链中函数SetWindowsHookEx所装入的
钩子
进程。 hhk: 将要释放的
钩子
进程的句柄。 III:
钩子
进程
钩子
进程使用函数HookProc;其实HookProc仅仅只是应用
程序
定义的符号。比如你可以写成KeyBoardHook.但是参数是不变的。Win32 API提供了诸如:CallWndProc、 GetMsgProc、DebugProc、CBTProc、MouseProc、KeyboardProc、MessageProc等函数,对于他们的详细讲解,可以看
MSDN
我在此只讲解一下KeyBoardHook的含义。 原形:LRESULT CALLBACK KeyBoardHook (int nCode, WPARAM wParam, LPARAM lParam)
说
明:
钩子
进程是一些依附在一个
钩子
上的一些函数,因此
钩子
进程只被WINDOWS调用而不被应用
程序
调用,他们有
时
就需要作为一个回调函数(CALLBACK)。 参数
说
明: nCode:
钩子
代码,
钩子
进程使用
钩子
代码去决定是否执行。而
钩子
代码的值是依靠
钩子
的种类来定的。每种
钩子
种类都有他们自己一系列特性的代码。比如对于WH_KEYBOARD,
钩子
代码的参数有:HC_ACTION,HC_NOREMOVE。HC_ACTION的意义:参数wParam 和lParam 包含了键盘敲打消息的信息,HC_NOREMOVE的意义:参数wParam 和lParam包含了 键盘敲打消息的信息,并且,键盘敲打消息一直没有从消息队列中删除。(应用
程序
调用PeekMessage函数,并且设置PM_NOREMOVE标志)。也就是
说
当nCode等于HC_ACTION
时
,
钩子
进程必须处理消息。而为HC_NOREMOVE
时
,
钩子
进程必须传递消息给CallNextHookEx函数,而不能做进一步的处理,而且必须有CallNextHookEx函数的返回值。 wParam:键盘敲打所产生的键盘消息,键盘按键的虚拟代码。 lParam:包含了消息细节。 注意:如果
钩子
进程中nCode小于零,
钩子
进程必须返回(return) CallNextHookEx(nCode,wParam,lParam);而
钩子
进程中的nCode大于零,但是
钩子
进程并不处理消息, 作者推荐你调用CallNextHookEx并且返回该函数的返回值。否则,如果另一个应用
程序
也装入WH_KEYBOARD
钩子
,那么该
钩子
将不接受
钩子
通知并且返回一个不正确的值。 如果
钩子
进程处理了消息,它可能返回一个非零值去阻止系统传递该信息到其它剩下的
钩子
或者windows进程。所以最好在
钩子
进程的最后都返回CallNextHookEx的返回
【C语言】键盘
钩子
实现计算机锁定U盘解锁
C语言代码,键盘
钩子
的
dll
程序
代码用c-free编程环境编写,界面
程序
用pelles C编程环境。纯C代码,注释有点少,不过代码都很简单,主要是一些win32API需要对照
MSDN
Lib。 本
程序
可实现U盘解锁,原理是U盘有一个唯一的硬件编码。在输入正确密码的同
时
插入U盘即可更改解锁U盘。 有些小bug,例如更改密码
时
密码可以为空密码等,大家有兴趣的可以继续完善。 键盘
钩子
用作锁定不是很好,大家可以研究出更好的方式来。
【爱码农】C#
程序
设计
本教程从基础入手,教学内容完整贯穿了C#控制台
程序
和GUI
程序
的开发。面向对象的知识点力求完整、全面、覆盖;GUI开发的各种热门技术:正则表达式、网络爬虫、群发邮件、C#反编译软件dnSpy、读写打印Excel文件。针对DataGridView进行深度解析(网上的资料让人一知半解,
MSDN
缺乏应用案例,欢迎同行一起交流、深入)。结合一线开发经验,提供几个完整的项目视频:1.记事本
程序
2.通讯录
程序
(结合Sql Server2012数据库)3.网络聊天
程序
4.画图
程序
5.邮件群发系统6.读写打印Excel7.上机位机系统串口通讯教学方法方面:解决困惑:思维导图简化理论知识
VB编程常用的模块及CTL控件集打包.rar
VB一些常用控件集,以及一些方法模块,编辑框.ctl、进度条、
全局
热键
钩子
、网站服务器、托盘控件、WinSock.ctl、曲线图.ctl、压缩算法-升级版.cls、数组加解密.cls、打开文件属性面板.bas等,其中一个模块的部分代码摘录如下: ------------------------------------------------------------------------------------------ ‘遍历进程,查找notepad.exe MyRemoteProcessId = OpenProcess(PROCESS_CREATE_THREAD PROCESS_VM_OPERATION PROCESS_VM_WRITE PROCESS_VM_READ, False, ProcessInfo.th32ProcessID) ‘打开进程获得notepad的句柄供后面的操作使用
Dll
FileName = "C:Vblegend.
dll
" My
Dll
FileLength = Len(
Dll
FileName) 1 ‘学过C语言的朋友应该
知道
字符串最后要一个ASCII 0标志结尾,所以要加1 My
Dll
FileBuffer = VirtualAllocEx(MyRemoteProcessId, 0, My
Dll
FileLength, MEM_COMMIT, PAGE_READWRITE) ‘在指定进程里申请一块内存区域出来供我们存放字符串“c: est.
dll
“ ‘传string给api
时
,byval byref有区别,应该使用byval,这样会传给api一个标准的C字符指针,不能byref,否则函数调用没问题 ‘但是起不到预期效果,VirtualAllocEx返回的是申请到的内存地址值. MyReturn = WriteProcessMemory(MyRemoteProcessId, My
Dll
FileBuffer,
Dll
FileName, My
Dll
FileLength, temp) ‘向刚才申请的内存中写入
dll
文件路径字符串 ‘顺便
说
一下,很多api浏览器上的api声明都是错的,包括VB6自带的也不例外,writeprocessmemory第二个参数要的是 ‘lpBaseAddress 但是这个值不能传址得到,如果你按byref传址,实际上传的是My
Dll
FileBuffer变量的地址,而不是它里面存放的那个数字 ‘上面
说
了My
Dll
FileBuffer的数值才是WriteProcessMemory要的地址,所以声明API的
时
候一定要byval,大家
知道
空着不写就是默认byref ‘下面还有几处不该传址的参数,只要搞清楚API函数要的到底是什么值才可以确定到底传值还是传址,API浏览器仅能供参考,还是要仔细阅读
MSDN
MyStartAddr = GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA") ‘获取loadlibrary函数的地址,这个函数可以载入指定的
dll
文件,那他的参数呢?就是我们刚才在notepad.exe进程里写入的“c: est.
dll
“ ‘不过还得让CreateRemoteThread告诉他.另外简单的
说
一下windows下应用
程序
的内存管理,我也不很懂,呵呵,win32下的应用
程序
‘的内存区域是隔开的,每个
程序
有自己的一块内存不能直接访问别的
程序
的内存区,当然,这里调用的几个系统函数有访问别的
程序
内存区域的特权 ‘而且每个应用
程序
的内存区域都映射到系统内存区域里,也就是
说
在这里GetProcAddress得到的VB
程序
里LoadLibraryA函数的入口地址和 ‘notepad
程序
里的LoadLibraryA函数地址是一致的(映射的作用),所以不必担心.另外在VB写的
程序
里 ‘要使用LoadLibraryA,notepad不是用vc写的吗?要注意根notepad没关系,我们现在是在自己的VB
程序
里面找LoadLibraryA函数的入口. ‘还有要注意函数大小写,api函数和vb不一样的。 MyResult = CreateRemoteThread(MyRemoteProcessId, 0, 0, MyStartAddr, My
Dll
FileBuffer, 0, temp) ‘好了,现在该让LoadLibrary载入“c: est.
dll
“吧,现在CreateRemoteThread做的就是在notepad进程中把控制权转到LoadLibrar
使用Python打造一款间谍
程序
的流程分析
知识点 这次我们使用python来打造一款间谍
程序
程序
中会用到许多知识点,大致分为四块 win32API 此处可以在
MSDN
上查看 Python基础重点在cpytes库的使用,使用方法请点击此处 C语言基础 Hook
程序
的基本原理在于通过注册Hook,记录系统事件 那么什么是Hook呢 Hook 技术又叫做
钩子
函数,系统在调用函数之前,
钩子
程序
就先捕获该消息,
钩子
函数先得到控制权,这
时
钩子
函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递 注册Hook
时
我们需要先导入
DLL
库,在Python中我们使用ctypes来导入,导入方法如下 user32 = C
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章