社区
硬件/系统
帖子详情
API钩子只能钩住系统的API 函数(CreateFileW),不知为什么不能钩住其它程序发出的CreateFileW,望高手指点?
Luo_Yong
2004-03-16 12:03:23
我做了一个API钩子,是为了记录在系统中新建了那些文件,因此我试图钩住函数
CreateFileW,利用Windows建立文件它能钩住,但是利用WinRar解压(生成)的文件它则不起作用了.
哎,不思不得其解,望那些大侠能帮帮我.......
我的环境:Visual C++6.0 + Windows2000 Server
...全文
95
9
打赏
收藏
API钩子只能钩住系统的API 函数(CreateFileW),不知为什么不能钩住其它程序发出的CreateFileW,望高手指点?
我做了一个API钩子,是为了记录在系统中新建了那些文件,因此我试图钩住函数 CreateFileW,利用Windows建立文件它能钩住,但是利用WinRar解压(生成)的文件它则不起作用了. 哎,不思不得其解,望那些大侠能帮帮我....... 我的环境:Visual C++6.0 + Windows2000 Server
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
maximin
2004-03-19
打赏
举报
回复
忘了,我的邮箱是maximin@163.net
maximin
2004-03-19
打赏
举报
回复
能否看看您的代码?谢谢。
lovetsinghua
2004-03-18
打赏
举报
回复
这个问题我也遇到过,当然不是winrar,而是另一个应该用了CreateFileW/A的进程。反正是怎么也钩不住。
不过,你也可以这样做。把你的钩子函数做成了一个DLL,注射到winrar进程里。遍历所有的输出节函数,全部钩下来。每个hook api只做一件事:报告它被使用了,然后输出到了个文件。观察文件的列表顺序,看CreateFiles上下文是什么。
我的邮箱是cpproxim@hotmail.com
等你的好消息:)
Luo_Yong
2004-03-17
打赏
举报
回复
有人吗?
liotion
2004-03-17
打赏
举报
回复
那他是不是自己携带了这个函数?如果不是我就不知道了。
Luo_Yong
2004-03-16
打赏
举报
回复
To: liotion(天上掉下一个林分分~~)
我用 Dumpbin /imports winrar.exe 查看到的!
我看了Winrar.exe 好像没有用到其它建立文件的函数
liotion
2004-03-16
打赏
举报
回复
則麽會?你確定它是調用的WindowsAPI的CreateFile?
Luo_Yong
2004-03-16
打赏
举报
回复
To NowCan:
我将CreateFileA也试了,也不行的!
NowCan
2004-03-16
打赏
举报
回复
最好把CreateFileA也钩住。
vc++调用hook
API
钩子
截获
Create
File
和CloseHandle来加密WORD文件+实现文件防拷贝_chorus和hook区别
利用
API
Hook截获
Create
File
和CloseHandle达到加解密DOC文件和防拷贝的目的 visual c++调用hook
API
钩子
截获
Create
File
和CloseHandle来加密WORD文件+实现文件防拷贝
EasyHook
函数
钩子
最好的完整稳定的
钩子
Demo
程序
(VS2010 C++ 版本)
目前最好的EasyHook的完整Demo
程序
,包括了Hook.dll动态库和Inject.exe注入
程序
。 Hook.dll动态库封装了一套稳定的下
钩子
的机制,以后对
函数
下
钩子
,只需要填下数组表格就能实现了,极大的方便了今后的使用。 Inject.exe是用MFC写的界面
程序
,只需要在界面上输入进程ID就能正确的HOOK上相应的进程,操作起来非常的简便。 这个Demo的代码风格也非常的好,用VS2010成功稳定编译通过,非常值得下载使用。 部分代码片段摘录如下: //【Inject.exe注入
程序
的代码片段】 void CInjectHelperDlg::OnBnClickedButtonInjectDllProcessId() { ////////////////////////////////////////////////////////////////////////// //【得到进程ID值】 UINT nProcessID = 0; if (!GetProcessID(nProcessID)) { TRACE(_T("%s GetProcessID 失败"), __FUNCTION__); return; } ////////////////////////////////////////////////////////////////////////// //【得到DLL完整路径】 CString strPathDLL; if (!GetDll
File
Path(strPathDLL)) { TRACE(_T("%s GetDll
File
Path 失败"), __FUNCTION__); return; } ////////////////////////////////////////////////////////////////////////// //【注入DLL】 NTSTATUS ntStatus = RhInjectLibrary(nProcessID, 0, EASYHOOK_INJECT_DEFAULT, strPathDLL.GetBuffer(0), NULL, NULL, 0); if (!ShowStatusInfo(ntStatus)) { TRACE(_T("%s ShowStatusInfo 失败"), __FUNCTION__); return; } } //【Hook.dll动态库的代码片段】 extern "C" __declspec(dllexport) void __stdcall NativeInjectionEntryPoint(REMOTE_ENTRY_INFO* InRemoteInfo) { if (!DylibMain()) { TRACE(_T("%s DylibMain 失败"), __FUNCTION__); return; } } FUNCTIONOLDNEW_FRMOSYMBOL array_stFUNCTIONOLDNEW_FRMOSYMBOL[]= { {_T("kernel32"), "
Create
File
W", (void*)
Create
File
W_new}, {_T("kernel32"), "
Create
File
A", (void*)
Create
File
A_new}, {_T("kernel32"), "Read
File
", (void*)Read
File
_new} }; BOOL HookFunctionArrayBySymbol() { /////////////////////////////////////////////////////////////// int nPos = 0; do { /////////////////////////////// FUNCTIONOLDNEW_FRMOSYMBOL* stFunctionOldNew = &g_stFUNCTIONOLDNEW_FRMOSYMBOL[nPos]; if (NULL == stFunctionOldNew->strModuleName) { break; } /////////////////////////////// if (!HookFunctionBySymbol(stFunctionOldNew->strModuleName, stFunctionOldNew->strNameFunction, stFunctionOldNew->pFunction_New)) { TRACE(_T("%s HookFunctionBySymbol 失败"), __FUNCTION__); return FALSE; } } while(++nPos); /////////////////////////////////////////////////////////////// return TRUE; } HANDLE WIN
API
Create
File
W_new( PWCHAR lp
File
Name, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplate
File
) { TRACE(_T("
Create
File
W_new. lp
File
Name = %s"), lp
File
Name); return
Create
File
W( lp
File
Name, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplate
File
); }
怎么样知道一个文件是否已经被谁打开了 如何打开被独占打开了的文件方法 用
create
file
以独占方式打开的那种方法怎么不行有没有别的方法
怎么样知道一个文件是否已经被打开 如何打开被独占打开了的文件方法 用
create
file
以独占方式打开的那种方法怎么不行有没有别的方法
detours用于劫持演示代码。VS2008,VS2012,X86,X64可用
detours用于劫持,演示代码,VS2008,VS2012,X86,X64可用
存储大实验报告1
1.1 使用 detours.h 编写工程的失败经历 1.2 使用 samples 里的工具进行开发 2.1 注入目标游戏 2.3 流程 2.4 hook
函数
硬件/系统
2,643
社区成员
17,229
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章