最近才发现这个问题,百思不得其解,我这有代码,有兴趣的可以下载看看为什么会这样.
地址:http://myproject.91x.net/HookAPI.jpg ,其实这不是一个图片,我改了扩展名,你用FlashGet之类的工具下载下来,将扩展名改成rar,用WinRar打开就行了。
谢谢各位了!
地址:http://myproject.91x.net/HookAPI.jpg ,其实这不是一个图片,我改了扩展名,你用FlashGet之类的工具下载下来,将扩展名改成rar,用WinRar打开就行了。
谢谢各位了!
解决方案 »
- 用了InvalidateRect之后画不出图了?
- 关于DLL中创建窗口
- xl5338870(xlix) 给你100,非常感谢
- 核心态编程。
- XP操作系统切换用户时的问题,请进:
- vc6.0 编译 链接错误,求解决。谢谢
- 提示错误:fatal error C1010: unexpected end of file while looking for precompiled header directive
- 用Vector如何声明二维数组阿,给分的
- 再NT服务里面使用ODBC的问题。
- Visual Studio 6.0 Service Pack 4在什么地方可以下载,有多大?
- 关于CListCtrl的问题?
- 如何将一个Win32dll里的位图在View里显示出来?谢谢。
又见面了,我早知道有这个问题。用替换IAT的方法是做不到的。
我最后用了提花动态库函数入口指令做到了。发给demo给你。
你的邮箱是[email protected]吧。
但是用替换IAT的办法还是能做到的,只是拦截了更底层的函数。同时拦截
ZwCreateProcess和ZwCreateProcessEx这两个函数就好了。
(2k Pro使用ZwCreateProcess函数,xp用ZwCreateProcessEx)。拦截CreateProcessA(W)的代码换成如下:
//for windows 2k Professional(ZwCreateProcess)
typedef LPWSTR PUNICODE_STRING;
typedef struct _OBJECT_ATTRIBUTES {
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING ObjectName;
ULONG Attributes;
PSECURITY_DESCRIPTOR SecurityDescriptor;
PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
//******** APIHOOK Code for ZwCreateProcess *************////Prototypes for the hooked functions:ZwCreateProcess
typedef LONG (WINAPI *PFNZwCreateProcess)
(OUT PHANDLE ProcessHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes,IN HANDLE InheritFromProcessHandle,IN BOOLEAN InheritHandles,IN HANDLE SectionHandle OPTIONAL,IN HANDLE DebugPort OPTIONAL,IN HANDLE ExceptionPort OPTIONAL);LONG WINAPI MyZwCreateProcess(OUT PHANDLE ProcessHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes,IN HANDLE InheritFromProcessHandle,IN BOOLEAN InheritHandles,IN HANDLE SectionHandle OPTIONAL,IN HANDLE DebugPort OPTIONAL,IN HANDLE ExceptionPort OPTIONAL);
//Hook the ZwCreateProcess function
CAPIHook g_ZwCreateProcess("ntdll.dll","ZwCreateProcess",
(PROC)MyZwCreateProcess,TRUE);
//this is the ZwCreateProcess replacement function:MyZwCreateProcess
LONG WINAPI MyZwCreateProcess(OUT PHANDLE ProcessHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes,IN HANDLE InheritFromProcessHandle,IN BOOLEAN InheritHandles,IN HANDLE SectionHandle OPTIONAL,IN HANDLE DebugPort OPTIONAL,IN HANDLE ExceptionPort OPTIONAL)
{
//call the original ZwCreateProcess funtion
LONG nResult=((PFNZwCreateProcess)(PROC)g_ZwCreateProcess)
(ProcessHandle,DesiredAccess,ObjectAttributes,InheritFromProcessHandle,InheritHandles,SectionHandle,DebugPort,ExceptionPort);
MessageBox(NULL ,"^_^,hooked!","Caption",0); return nResult;
}
//*******End of ZwCreateProcess APIHOOK Code*******////for window XP
//******** APIHOOK Code for ZwCreateProcessEx *************////Prototypes for the hooked functions:ZwCreateProcessEx
typedef LONG (WINAPI *PFNZwCreateProcessEx)
(OUT PHANDLE ProcessHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN HANDLE ParentProcess,IN BOOLEAN InheritObjectTable,IN HANDLE SectionHandle OPTIONAL,IN HANDLE DebugPort OPTIONAL,IN HANDLE ExceptionPort OPTIONAL,IN HANDLE Unknown );LONG WINAPI MyZwCreateProcessEx(OUT PHANDLE ProcessHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess,IN BOOLEAN InheritObjectTable,IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,IN HANDLE ExceptionPort OPTIONAL,IN HANDLE Unknown );
//Hook the ZwCreateProcessEx function
CAPIHook g_ZwCreateProcessEx("ntdll.dll","ZwCreateProcessEx",
(PROC)MyZwCreateProcessEx,TRUE);
//this is the ZwCreateProcessEx replacement function:MyZwCreateProcessEx
LONG WINAPI MyZwCreateProcessEx(OUT PHANDLE ProcessHandle,IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN HANDLE ParentProcess,IN BOOLEAN InheritObjectTable,IN HANDLE SectionHandle OPTIONAL,IN HANDLE DebugPort OPTIONAL,IN HANDLE ExceptionPort OPTIONAL,IN HANDLE Unknown )
{
//call the original ZwCreateProcessEx funtion
LONG nResult=((PFNZwCreateProcessEx)(PROC)g_ZwCreateProcessEx)
(ProcessHandle,DesiredAccess,ObjectAttributes,ParentProcess,
InheritObjectTable,SectionHandle,DebugPort,ExceptionPort,Unknown);
MessageBox(NULL ,"^_^,hooked 22222!","Caption",0); return nResult;
}
//*******End of ZwCreateProcessEx APIHOOK Code*******//
从哪里得到创建进程的名称呢?
既然能够通过截获 ZwCreateProcess 的话也有可能是该进程没有通过普通的 CreateProcess 来创建
我刚刚在串口通讯中希望截获 CreateFileA/CreateFileW 对串口的打开,但后来发现它使用的是 OpenFileA
同样的,某些通讯函数会使用 winsock1.1 或 winsock2.2 的函数,因此某些时候不能通过截获 send/recv来完成,而需要截获 WSASend / WSARecv
通过 IAT 并不能在应用程序中截获所有调用
知道的告知一声,谢谢!