有关hook窗口消息wm_showwindow来关闭广告,为什么达不到效果啊 我安装的是全局钩子 钩子过程在dll中

huanglei2 2011-05-03 08:30:42
LRESULT CALLBACK CallWndProc(
int nCode, // hook code
WPARAM wParam, // current-process flag
LPARAM lParam // address of structure with message data
)
{
CWPSTRUCT *pCwp=NULL;
TCHAR strClassName[127];
HWND hWnd=NULL;
unsigned long ulStyle =0;
BOOL bIsClosed=FALSE;
if(nCode<0)
{
return CallNextHookEx(gHook,nCode,wParam,lParam);
}

if(NULL!=lParam)
{
pCwp=(CWPSTRUCT*)lParam;
if(WM_SHOWWINDOW==pCwp->message)
{ //判断下pCwp->hwnd是什么
//printf("%d",pCwp->hwnd);

::GetClassName(pCwp->hwnd,strClassName,128);


//IE窗口的类型为IEFrame
if(0==wcscmp(strClassName,L"IEFrame"))
{
hWnd=::GetWindow(pCwp->hwnd,GW_CHILD);
if(hWnd==0)
{ bIsClosed=TRUE;
MessageBox(0,L"1",L"",MB_OK);
}
while(NULL!=hWnd)
{ ::GetClassName(hWnd,strClassName,127);
//IEFrame的子窗口包含窗口类型WorkerW
if(0==wcscmp(strClassName,L"Edit"))
{
//若WorkerW不可见,则一般是广告弹出窗口
if(0==(GetWindowLong(hWnd,GWL_STYLE)&WS_VISIBLE))
{ MessageBox(0,L"2",L"",MB_OK);
bIsClosed=TRUE;
break;
}
break;
}
else
{
bIsClosed=TRUE;
MessageBox(0,L"3",L"",MB_OK);
}

hWnd=::GetWindow(hWnd,GW_HWNDNEXT);
}
}



//若是IE广告弹出窗口,则关闭
if(TRUE==bIsClosed)
{ MessageBox(0,L"关闭广告",L"",MB_OK);
::PostMessage(pCwp->hwnd,WM_CLOSE,0,0);

}
}
}
return CallNextHookEx(gHook,nCode,wParam,lParam);
}
...全文
130 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
huanglei2 2011-05-06
  • 打赏
  • 举报
回复
dll文件的代码 就是注入后显示一个messagebox(O,"",“你好”,mb_ok);
huanglei2 2011-05-06
  • 打赏
  • 举报
回复
代码问题吗 这是注入进程的代码#include<windows.h>
#include<stdio.h>
#include<Tlhelp32.h>
BOOL EnabledebugPriviledge();
DWORD GetSpecifiedProcessId(const char *pszProcessName);
char* WSTRToAnsi(WCHAR* Msg);
BOOL jiazai(DWORD processid);
BOOL main()
{
char r[]="TTPlayer.exe";
//判断是否加载了那个模块
BOOL tt=jiazai(GetSpecifiedProcessId(r));
if(tt)
{
BOOL EnabledebugPriviledge();
HANDLE hprocess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,GetSpecifiedProcessId(r));
if(hprocess==NULL)
MessageBox(0,L"",L"",MB_OK);
char dllname[]="F://新建文件夹//远程线程dll1//Debug//dllyuancheng.dll";
int a=sizeof(dllname);
//将要调用的dll的名字写入目标进程空间里

LPVOID lpremotedllname=VirtualAllocEx(hprocess,NULL,a,MEM_COMMIT,PAGE_READWRITE);
BOOL o=WriteProcessMemory(hprocess,lpremotedllname,dllname,a,NULL);
//D取得loadlibrary的函数的地址
HMODULE hmodule=GetModuleHandleA("kernel32.dll");
LPTHREAD_START_ROUTINE hanshudizhi=(LPTHREAD_START_ROUTINE)GetProcAddress(hmodule,"LoadLibraryA");
//创建远程线程

HANDLE hRemoteThread=CreateRemoteThread(hprocess,0,0,hanshudizhi,lpremotedllname,0,NULL);
if(hRemoteThread==NULL)
{ CloseHandle(hprocess);
MessageBox(0,L"1111",L"",MB_OK);
}
WaitForSingleObject(hRemoteThread,INFINITE);
CloseHandle(hRemoteThread);
CloseHandle(hprocess);
return TRUE;
}
else
return FALSE;
}
BOOL EnabledebugPriviledge()
{ //调整本进程的特权级别
HANDLE htoken;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&htoken))
{
LUID uid;
LookupPrivilegeValue(0,SE_DEBUG_NAME,&uid);
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount=1;
tp.Privileges[0].Luid=uid;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(htoken,FALSE,&tp,sizeof(tp),0,0);

CloseHandle(htoken);
}
if (GetLastError() != ERROR_SUCCESS)
return false;

return true;
}
DWORD GetSpecifiedProcessId(const char *pszProcessName)
{
DWORD id=0;
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) ;
PROCESSENTRY32 pInfo;
pInfo.dwSize = sizeof(pInfo);
if(Process32First(hSnapShot, &pInfo))
{
do{
if(strcmp(_strdup(WSTRToAnsi(pInfo.szExeFile)), pszProcessName) == 0)
{ printf("%ws\n",pInfo.szExeFile);
id=pInfo.th32ProcessID;

}
else
continue;

}while(Process32Next(hSnapShot, &pInfo) != FALSE);
}
return id;
}

char* WSTRToAnsi(WCHAR* Msg)//把wchar*转换称char*
{
int len = wcstombs(NULL, Msg, 0);
char* buf = new char[len+1];
wcstombs(buf, Msg, len);
buf[len] = 0;
return buf;
}
//查看目标进程是否加载了这个模块
BOOL jiazai(DWORD processid)
{ BOOL bfound=FALSE;
MODULEENTRY32 pe={0};
HANDLE hmodulesnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,processid);
pe.dwSize=sizeof(MODULEENTRY32);
if(Module32First(hmodulesnap,&pe))
{ do
{if(strcmp(WSTRToAnsi(pe.szExePath),"kernel32.dll")==0)
{ bfound=TRUE;
break;
}
}while(Module32Next(hmodulesnap,&pe));

}
CloseHandle(hmodulesnap);
if(bfound)
return FALSE;
}
张小毛 2011-05-04
  • 打赏
  • 举报
回复
难的好像是怎么让绕过杀毒软件,做全局钩子,
现在一般全局钩子,杀软都能提示阻止,
哎,现在对操作系统研究的技术越来越进步,东西也都越做越底层了,
通过正规的手段做非正规的事,越来越难了,各种非常规手段也应时而出,
所谓 道高一尺,魔高一丈。。。
(好像写反了)
Lactoferrin 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huanglei2 的回复:]

注入成功了 安装也成功了 还有就是安装的是全局钩子!


我原来安装钩子的时候 比如注入记事本 那个记事本就直接停止运行 关闭了! 大家知道是为什么?
[/Quote]
你的代码有问题导致进程崩溃
huanglei2 2011-05-04
  • 打赏
  • 举报
回复
那同学 你能不能给我一个钩子的例子!?谢了
huanglei2 2011-05-04
  • 打赏
  • 举报
回复
注入成功了 安装也成功了 还有就是安装的是全局钩子!


我原来安装钩子的时候 比如注入记事本 那个记事本就直接停止运行 关闭了! 大家知道是为什么?
李亚超 2011-05-03
  • 打赏
  • 举报
回复
安装成功了吗
Lactoferrin 2011-05-03
  • 打赏
  • 举报
回复
检查目标进程是否加载了你的dll
张小毛 2011-05-03
  • 打赏
  • 举报
回复
不好意思,刚才看错了,
像这种hook鼠标,键盘,消息的全局钩子,应该是很简单的了
张小毛 2011-05-03
  • 打赏
  • 举报
回复
确认广告是通过那个什么ieframe显示的吗,还有hook是否安装成功了?
不知你的目标是那个程序,在你设置后Hook后,看看该进程是否加载你的dll了,
好像tasklist,具体怎么用/help有详细说明。
如果加载都正常,加点日志看看,用dbgview看看,

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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