钩子注入呼出与隐藏DLL窗口

/ 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, 0, 0)){

    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(0, nCode, wParam, lParam);
}
//安装钩子
void StartHook()
{
        sleep(5000);
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    HWND hGame = FindWindow(_T("Notepad++"), NULL);
    if (hGame == 0)
    {
        MessageBox(NULL, _T("未找到"), _T("提示"), NULL);
        return;
    }
    DWORD tid = GetWindowThreadProcessId(hGame, NULL);
    ::SetWindowsHookEx(WH_GETMESSAGE, GameProc, ::GetModuleHandle(_T("MFC_DLL.dll")), tid);

}
时间: 2024-12-30 04:57:24

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

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

相信消息钩子大家听的比较多,消息钩子能够在应用程序处理系统消息之前将其截获,提前处理并可以决定是否继续将消息往下传送,有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动等等,要截获这些事件可以使用SetWinEventHook,它的原型如下: HWINEVENTHOOK WINAPI SetWinEventHook(  __in  UINT eventMin,  __in  UINT eventMax,  __in  HMODULE hmodWinEventPro

安全之路 —— 利用远程线程注入的方法(使用DLL)实现穿墙与隐藏进程

简介 大多数后门或病毒要想初步实现隐藏进程,即不被像任务管理器这样典型的RING3级进程管理器找到过于明显的不明进程,其中比较著名的方法就是通过远程线程注入的方法注入将恶意进程的DLL文件注入系统认可的正常进程,你会发现任务管理器以及找不到独立出现的恶意进程项了.反向连接型后门采用这种技术,注入防火墙认可的进程(例如大部分系统进程,像explorer.exe就很常见)还能够获得一定的穿墙效果. 进程注入虽然已经是将近10年前的技术了,但是今天出现的很多新型黑客技术大多数还是基于这类老技术演变而来

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

「C#を使う最大のメリットって.やっぱり.Visual Studioですよね!」って自信を持って言いたいですね. という心境ではあるんですが.私の仕事はどっちかというとC++よりなので.どうしても.DllImportはお友達という側面があります.そうすると.プログラム実行時に. AnyCPUなアセンブリ.exe ネイティブC++.dll みたいな感じになって.要は.AnyCPUなアセンブリがネイティブC++ちゃんを呼び出す構図になるんですが.この構成.64-bitの環境で開発をしていたりすると相

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

private void Btn_OK_Click(object sender, EventArgs e) { this.Hide(); //隐藏当前窗口 MessageBox.Show("添加成功!"); this.Close(); //关闭当前窗口 }

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

常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战. PS:上面是操作.最后是原理 一丶需要了解的API 使用全局钩子注入.我们需要了解几个WindowsAPI. 不需要太多. 1. 设置钩子API HHOOK WINAPI SetWindowsHookEx( _In_ int idHook, 设置钩子的类型.意思就是我要设置的钩子是什么钩子. 可以是监视窗口过程.可以是监视消息队列. _In_ HOOKPROC lpfn, 根据钩子类型.设置不同的回调函数

bat批处理文件运行时隐藏cmd窗口

想让bat运行时隐藏cmd窗口,最好的方法是使用vbs文件实现, 1.新建一个文本文档,改名为123.vbs,编辑内容: set ws=WScript.CreateObject("WScript.Shell") ws.Run "yy.bat",0 yy.bat是同目录下的批处理文件.双击123.vbs,即可运行批处理文件,但没有cmd窗口弹出. 缺点:这种方法可以隐藏cmd窗口,但不能隐藏bat中打开的第三方窗口.如yy.bat的内容为:WinRAR.exe x  

c# 控制台应用程序怎么隐藏黑窗口

class Program     {         [DllImport("user32.dll", EntryPoint = "ShowWindow", SetLastError = true)]         static extern bool ShowWindow(IntPtr hWnd, uint nCmdShow);         [DllImport("user32.dll", EntryPoint = "Find

反病毒攻防研究第011篇:DLL注入(下)——无DLL的注入

一.前言 一般来说,想要将自己编写的程序注入到其它进程中,是必须要使用DLL文件的,这种方法已经在上一篇文章中讨论过了.但是事实上,可以不依赖于DLL文件来实现注入的.只不过这种方法不具有通用性,没有DLL注入那样灵活,因为它需要把代码写入"注入程序"中,一旦想要注入的内容发生了变化,就需要重写整个"注入程序".而不像DLL注入那样,只要修改DLL程序即可.即便如此,无DLL进行注入的方式,也是一种值得讨论的方法. 二.无DLL注入的基本原理 在注入与卸载方面,无论

Android强制弹出,隐藏输入法.

当我们弹出一个Dialog时候,假设这个Dialog须要输入数据,然后确定后又须要关闭输入法,一般系统的hide,跟show方法总会有各种问题,最霸道的解决方法就是写一个定时器,定时弹出或者关闭输入法. import java.util.Timer; import java.util.TimerTask; import android.content.Context; import android.view.View; import android.view.inputmethod.InputM