HOOK 一个API的时候,如何判断该API是否在某个DLL中被调用的呢?
例子:已知DLL的名字为: abc1.dll.
该DLL中调用了Createfile();
hook ZwCreateFile的时候,
如何判断
ZwCreateFile 是在该DLL中呢?
解决方案 »
- 基于对话框的MFC程序,为什么主对话框类没有析构函数?自己给它添加一个可以吗?
- 状态栏的高度
- IT公司招聘
- winsock2.h的重复定义该如何解决?
- 怎样设定TreeCtrl control某一item为选中状态??
- 问一个棘手的问题?应用程序可不可以跟JSP网页进行交互?
- 请教记录删除方法
- [公告]:取消maoxianwang (大大㊣BETAⅡ //楼主,请把分给猪) VC/MFC ATL/ActiveX/COM版面版主职务
- 如何通过程序获得cpu的频率?
- 如何全部将网络邻居列举的计算机的名字存入文件中?
- 只想获取网页内容,不想下载(即在本地生成文件),有什么方法?
- exe文件生成后的问题
可是,ZwCreateFile 可能没有被任何DLL调用的
HMODULE hModule, // handle to DLL module
LPCSTR lpProcName // function name
);直接给hModule传递dll 给lpProcName传递函数名 如果返回的是NULL 在这个dll中就没有这个函数。
只是
这里存在两个问题:
第一:对于:abc1.dll,使用loadlibraryex,和loadlibrary返回的数值可能是不同的。
所以hModule是不确定的。
第二:即使hModule可以控制为相同的,不同的exe加载abc1.dll的时候,返回数值也是不同的,所以还是没有有办法通过:FARPROC 判断一个函数当前是否在DLL中运行。
问题再次描述如下:HOOK 系统API ZwCreateFile的时候:
处理如下:ZwCreateFile(
OUT PHANDLE FileHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN PLARGE_INTEGER AllocationSize OPTIONAL,
IN ULONG FileAttributes,
IN ULONG ShareAccess,
IN ULONG CreateDisposition,
IN ULONG CreateOptions,
IN PVOID EaBuffer OPTIONAL,
IN ULONG EaLength
)
{...
...
//问题就在这里,
//如何知道当前代码运行在 abc1.dll 之中,不论是X.EXE,Y.EXE还是ppp.exe....,
//只要该.exe加载了abc1.dll,此处都能判断出来。...
...}
abc1.dll 是自己写的,一定调用ZwCreateFile。
to 5,6,7楼:判断地址所述的模块似乎有些复杂