/ MFC_DLL.cpp : 定义 DLL 的初始化例程。
// #include "stdafx.h"
#include "MFC_DLL.h"
#include "WgDlg.h"
#include <Windows.h> #ifdef _DEBUG
#define new DEBUG_NEW
#endif CWgDlg * GameForm = NULL;
HWND GameHwnd = NULL; void StartHook();
//
//TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
// 则从此 DLL 导出的任何调入
// MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
// 该函数的最前面。
//
// 例如:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
// // 此处为普通函数体
// }
//
// 此宏先于任何 MFC 调用
// 出现在每个函数中十分重要。 这意味着
// 它必须作为函数中的第一个语句
// 出现,甚至先于所有对象变量声明,
// 这是因为它们的构造函数可能生成 MFC
// DLL 调用。
//
// 有关其他详细信息,
// 请参阅 MFC 技术说明 33 和 58。
// // CMFC_DLLApp BEGIN_MESSAGE_MAP(CMFC_DLLApp, CWinApp)
END_MESSAGE_MAP() // CMFC_DLLApp 构造 CMFC_DLLApp::CMFC_DLLApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
} // 唯一的一个 CMFC_DLLApp 对象 CMFC_DLLApp theApp;
CWgDlg * pWgdlg;
DWORD WINAPI ShowWgdlg(LPARAM lpData)
{
StartHook(); MSG msg;
while (GetMessage(&msg, NULL, , )){ TranslateMessage(&msg);
DispatchMessage(&msg);
} return TRUE;
}
// CMFC_DLLApp 初始化 BOOL CMFC_DLLApp::InitInstance()
{
CWinApp::InitInstance();
::CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ShowWgdlg, NULL, NULL, NULL);
return TRUE;
}
//钩子回调函数
LRESULT CALLBACK GameProc(int nCode, WPARAM wParam, LPARAM lParam)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
PMSG pMsg = (PMSG)lParam;
if (pMsg->message == WM_KEYUP)
{
if (pMsg->wParam == VK_HOME)
{
if (GameForm == NULL)
{
GameHwnd = pMsg->hwnd;
GameForm = new CWgDlg();
GameForm->Create(IDD_DIALOG_WG);
GameForm->ShowWindow(TRUE);
}
else
if (GameForm->IsWindowVisible())
{
GameForm->ShowWindow(FALSE);
}
else
{ GameForm->ShowWindow(TRUE);
}
}
}
return CallNextHookEx(, nCode, wParam, lParam);
}
//安装钩子
void StartHook()
{
sleep();
AFX_MANAGE_STATE(AfxGetStaticModuleState());
HWND hGame = FindWindow(_T("Notepad++"), NULL);
if (hGame == )
{
MessageBox(NULL, _T("未找到"), _T("提示"), NULL);
return;
}
DWORD tid = GetWindowThreadProcessId(hGame, NULL);
::SetWindowsHookEx(WH_GETMESSAGE, GameProc, ::GetModuleHandle(_T("MFC_DLL.dll")), tid); }

钩子注入呼出与隐藏DLL窗口的更多相关文章

  1. Dll注入:Windows消息钩子注入

    SetWindowsHook() 是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之 ...

  2. C#からネイティブDLLを呼び出す場合のVSからのデバッグのジレンマを解決する

    「C#を使う最大のメリットって.やっぱり.Visual Studioですよね!」って自信を持って言いたいですね. という心境ではあるんですが.私の仕事はどっちかというとC++よりなので.どうしても.D ...

  3. 安全之路 —— 借助DLL进行远程线程注入实现穿墙与隐藏进程

    简介        大多数后门或病毒要想初步实现隐藏进程,即不被像任务管理器这样典型的RING3级进程管理器找到过于明显的不明进程,其中比较著名的方法就是通过远程线程注入的方法注入将恶意进程的DLL文 ...

  4. SetWinEventHook 事件钩子(有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动等)good

    相信消息钩子大家听的比较多,消息钩子能够在应用程序处理系统消息之前将其截获,提前处理并可以决定是否继续将消息往下传送,有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动 ...

  5. WinForm------弹出MessageBox窗口的同时隐藏当前窗口

    private void Btn_OK_Click(object sender, EventArgs e) { this.Hide(); //隐藏当前窗口 MessageBox.Show(" ...

  6. 常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战.

    常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战. PS:上面是操作.最后是原理 一丶需要了解的API 使用全局钩子注入.我们需要了解几个WindowsAPI. ...

  7. 安卓手机H5底部fix定位,呼出键盘底部会上浮解决办法

    <script type="text/javascript">var windowInnerHeight = window.innerHeight; //获取当前浏览器 ...

  8. 隐藏DLL

    先来推广一下QQ群:61618925.欢迎各位爱好编程的加入. 在外挂或者病毒中,经常需要隐藏掉自己注入的DLL,以免被发现.下面就是一个隐藏DLL的通用模块,用的时候只需要加入到相关模块中即可. 详 ...

  9. C#隐式运行CMD命令(隐藏命令窗口)

    原文 C#隐式运行CMD命令(隐藏命令窗口) 本文实现了C#隐式运行CMD命令的功能.下图是实例程序的主画面.在命令文本框输入DOS命令,点击"Run"按钮,在下面的文本框中输出运 ...

随机推荐

  1. 关于Android SDK无法更新的解决办法

    最新摆弄PhoneGap打包,所以需要安卓的环境,配置后,sdk更新实在是在慢了,上网找了一下,可能被强了,所有总结如下办法,最后弄好了,跟大家分享一下 具体步骤:1:打开SDK Manager.ex ...

  2. 关于 JS 模块化的最佳实践总结

    模块化开发是 JS 项目开发中的必备技能,它如同面向对象.设计模式一样,可以兼顾提升软件项目的可维护性和开发效率. 模块之间通常以全局对象维系通讯.在小游戏中,GameGlobal 是全局对象.在小程 ...

  3. DNSSec

    Domain Name System Security Extensions (DNSSEC)DNS安全扩展,是由IETF提供的一系列DNS安全认证的机制(可参考RFC2535).它提供了一种来源鉴定 ...

  4. Django笔记 —— 模板

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  5. USACO Section2.2 Party Lamps 解题报告 【icedream61】

    lamps解题报告------------------------------------------------------------------------------------------- ...

  6. 【Random Forest】林轩田机器学习技法

    总体来说,林对于random forest的讲解主要是算法概况上的:某种程度上说,更注重insights. 林分别列举了Bagging和Decision Tree的各自特点: Random Fores ...

  7. css 之 border-radius属性

    css中给盒子设置圆角可以通过 border-radius 属性来实现(具体原理就不深入探讨了); 在开发过程中都会遇到浏览器兼容问题,这问题其实也不难解决,无非就是加上私有前缀,在这里先忽略掉.   ...

  8. ironic-conductor与ipa交互clean部分代码分析

    clean的动作会在provide和delete阶段才会触发 从代码分析: 对节点执行的node provide/deleted/clean会先发送到ironicclient ironicclient ...

  9. create vm

    #!/bin/sh echo $# [ $# < ] && { echo "error" exit } instance_name=$ instance_ip ...

  10. virsh command

    http://www.cnblogs.com/chenjiahe/category/845519.html resize qemu-img resize win2k8r2.qcow2 40G conv ...