一个函数拦截的下TEST程序~

langzi8818 2005-08-14 02:50:16
#include"windows.h"
#include "iostream.h"
typedef int (WINAPI* PROCC) (HWND, LPCTSTR, LPCTSTR ,UINT);
PROCC lpAdder = MessageBoxA;

int APIENTRY MyMessageBox(HWND hwnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
int ret = 0;
if (lpAdder != NULL)
ret = lpAdder(NULL, "new", "new", MB_OK);
return ret;
}
void SetHookA(LPCSTR lpModuleName, LPCSTR lpFunName, PROCC pNewProc)
{
PROC dwByte;
HINSTANCE hDLL;

hDLL = LoadLibrary(lpModuleName);
dwByte = GetProcAddress(hDLL, lpFunName);
//BOOL Is = ReadProcessMemory(GetCurrentProcess(), (LPVOID) dwByte, LPVOID(cc), sizeof(DWORD), NULL);

BOOL isok = WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwByte, (LPVOID)MyMessageBox, sizeof(DWORD), NULL);
}

void main()
{
SetHookA("user32.dll", "MessageBoxA", MyMessageBox);
MessageBoxA(NULL, "ss","ss", MB_OK);
}


这个是一个实验程序,应该很简单,但是就是运行时候出错。我是个处学者,请大家指点以下错误的所在
...全文
114 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rageliu 2005-08-15
  • 打赏
  • 举报
回复
函数使用如下:
::GetWindowThreadProcessId(hwndCurr,&Pid);
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_VM_OPERATION,
FALSE,Pid);
langzi8818 2005-08-14
  • 打赏
  • 举报
回复
ai 3~~~~~~~~~~~~~~~~~~~~~~~~~~~
langzi8818 2005-08-14
  • 打赏
  • 举报
回复
谢谢楼上的,请问用哪个函数???
langzi8818 2005-08-14
  • 打赏
  • 举报
回复
无人指点吗》
rageliu 2005-08-14
  • 打赏
  • 举报
回复
void SetHookA(LPCSTR lpModuleName, LPCSTR lpFunName, PROCC pNewProc)
{
PROC dwByte;
HINSTANCE hDLL;

hDLL = LoadLibrary(lpModuleName);
dwByte = GetProcAddress(hDLL, lpFunName);
//BOOL Is = ReadProcessMemory(GetCurrentProcess(), (LPVOID) dwByte, LPVOID(cc), sizeof(DWORD), NULL);

BOOL isok = WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwByte, (LPVOID)MyMessageBox, sizeof(DWORD), NULL);
}
这里面的处理有错误!在ReadProcessMemory函数的前面要以可读写方式打开线程的内存区

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧