如果是本进程的话,需要做成DLL吗?
如果是本进程,杀毒程序会提示吗?有没有HOOK本进程的API函数的例子可参考
也许你会奇怪我为什么要HOOK自己的进程,因为我用了别人的控件。
有些功能没些实现我想HOOK后实现。分不多。。请大家帮忙!
如果是本进程,杀毒程序会提示吗?有没有HOOK本进程的API函数的例子可参考
也许你会奇怪我为什么要HOOK自己的进程,因为我用了别人的控件。
有些功能没些实现我想HOOK后实现。分不多。。请大家帮忙!
解决方案 »
- windows画图程序中的那个曲线功能怎么做
- 关于按钮控件添加的函数的问题
- 退出错误
- 请问:大家知道有什么Image DLL可以下在?
- ATL复合控件嵌入IE的IFRAME里,初始化时会在IE的左上角先显示灰色控件区域怎么解决?
- ..\vc98\include\windef.h(43) : error C2632: 'long' followed by 'long' is illegal
- 一个异常问题,看起来很简单,谢谢了
- 谁有屏幕截词得原程序啊,急用啊,大家帮帮忙啊
- 如何用mfc获取http头?新手 请指教 谢谢
- (上次各高手的解答不行!)我自定义一个类后,在什么地方定义它的对象,使得*View.cpp中的所有函数都能对这个对象(只一个)进行操作????(能讲点理由吗?)
- A.dll中free B.dll中malloc的内容,free就报heap损坏错误
- Winamp 插件 for MSN 这样的插件是怎么做的呢?
如果需要做成DLL,有没有其他方法可以绕过,
因为我的程序是一个EXE,虽然我可以把DLL当资源打包到EXE中,
但我担心杀毒程序会以为是病毒。
不一定要吧,但你用了别人的控件,就难说了~~一句话
知道你原函数和目标函数的地址,然后适时的修改跳转,适时的恢复~~~~~~~
hook类型使用WH_CALLWNDPROC。
顺便BS一下chunyou128
//---------------------------------------------------------------------------
#include <windows.h>
#pragma hdrstop//---------------------------------------------------------------------------class CHookClass{
CHookClass(const CHookClass&);
CHookClass &operator=(const CHookClass&); //不准拷贝和赋值 #pragma pack(push,1)
struct TJmpCode{
char Jmp;
DWORD Ptr;
};
#pragma pack(pop)
public:
/* LibName: DLL 文件名 */
/* FuncName: 目标函数名 */
/* NewFuncPtr: 用于替换的函数指针 */
CHookClass(const char *LibName, const char *FuncName, void *NewFuncPtr)
{
HMODULE hModule=LoadLibrary(LibName);
_TagFuncPtr=GetProcAddress(hModule, FuncName);
if(_TagFuncPtr==NULL) throw(-1); CopyMemory(&_OrgCode,_TagFuncPtr,5); // 保存原函数前五字节 _NewCode.Jmp=0xe9; //jmp
_NewCode.Ptr=DWORD(NewFuncPtr)-DWORD(_TagFuncPtr)-5; // 新的五字节为 jmp NewFuncPtr _CurProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE, GetCurrentProcessId()); // 以特权方式打开当前进程 InitializeCriticalSection(&_cs);
}
~CHookClass()
{
Lock();
_Closing=true;
HookOff(); // don't HookOn again
Unlock();
DeleteCriticalSection(&_cs);
} void HookOn() // 开启 API Hook
{
if(!_IsHooked && !_Closing)
{
DWORD dwOldProtect;
VirtualProtectEx(_CurProcess, _TagFuncPtr, 5, PAGE_READWRITE, &dwOldProtect); // 更改内存属性
WriteProcessMemory(_CurProcess, _TagFuncPtr, &_NewCode, 5, NULL); // 将_TagFuncPtr的前5个字节改为JMP NewFuncPtr
VirtualProtectEx(_CurProcess, _TagFuncPtr, 5, dwOldProtect, &dwOldProtect);
_IsHooked=true;
}
}
void HookOff() // 关闭 API Hook
{
if(_IsHooked)
{
DWORD dwOldProtect;
VirtualProtectEx(_CurProcess, _TagFuncPtr, 5, PAGE_READWRITE, &dwOldProtect);
WriteProcessMemory(_CurProcess, _TagFuncPtr, &_OrgCode, 5, NULL); // 恢复_TagFuncPtr的前5个字节
VirtualProtectEx(_CurProcess, _TagFuncPtr, 5, dwOldProtect, &dwOldProtect);
_IsHooked=false;
}
} void Lock() // 进入临界区
{
EnterCriticalSection(&_cs);
}
void Unlock() // 退出临界区
{
LeaveCriticalSection(&_cs);
} bool IsHooked(){
// 取Hook状态
return _IsHooked;
}
private:
TJmpCode _OrgCode; // 原代码
TJmpCode _NewCode; // 新代码 jmp FuncPtr
void *_TagFuncPtr; // 目标函数指针
HANDLE _CurProcess; // 当前进程
bool _IsHooked; // 显示是否被Hook了 bool _Closing; // 正在退出,停止一切Hook活动
CRITICAL_SECTION _cs; // 临界区
};//---------------------------------------------------------------CHookClass *pHookClass;int
WINAPI
MyMessageBoxA(
IN HWND hWnd,
IN LPCSTR lpText,
IN LPCSTR lpCaption,
IN UINT uType)
{
int result;
pHookClass->Lock();
pHookClass->HookOff();
result = MessageBoxA(hWnd,"haha!",lpCaption,uType);
pHookClass->HookOn();
pHookClass->Unlock();
return result;
}int main(int argc, char* argv[])
{
pHookClass = new CHookClass("user32.dll","MessageBoxA",MyMessageBoxA);
pHookClass->HookOn();
MessageBoxA(NULL,"abcde","test",MB_OK);
delete pHookClass;
return 0;
}
//---------------------------------------------------------------------------
windows核心编程中就有这种例子,如果你有时间,去看看。
你的代码没问题,但一换过API函数就会出错,HANDLE MyCreateFileA(LPCSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,DWORD dwFlagsAndAttribtes,HANDLE hTemplateFile)
{
return (HANDLE)(int)0xffffffff;//这里执行了,
}
pHookClass = new CHookClass("kernel32.dll","CreateFileA",MyCreateFileA);
pHookClass->HookOn();
HANDLE s =::CreateFileA("ZZ:\\aaa.txt",1,1,NULL,NULL,NULL,NULL);//在这里返回时出现运行时错误。
delete pHookClass;
网页里面有FLASH控件,指定控件显示一个SWF文件。
我勾了CreateFileW 和CreateFileA 都勾不到指定的那个SWF文件。
但网页文件和其他的是有勾到了。
其中Hshare_Wnd是一个窗体的句柄
SetWindowsHookEx(WH_GETMESSAGE,HookCallWndProc,theApp.m_hInstance,
::GetWindowThreadProcessId(Hshare_Wnd,NULL));
我都不想说 可是还有人不断的说
===============================
HOOK消息和HOOK API是完全不同的.....别再说HOOK消息相关的了
===============================现在我在对话框中放一个CHTMLVIEW ,显示一个网页,
网页里面有FLASH控件,指定控件显示一个SWF文件。
我勾了CreateFileW 和CreateFileA 都勾不到FLASH控件读取SWF文件。
但CHTMLVIEW读网页文件和其他字体文件是有勾到了。