Hook MessageBoxステップオーバーホク

3999 ワード

転載して出典を明記する
http://blog.csdn.net/xugangjava/article/details/14001685
前の文章http://blog.csdn.net/xugangjava/article/details/7455851)にHookシステムのMessageBoxの関数を紹介しましたが、本プロセスに限定されます.
本論文では主にHookの他のプロセスのMessageBox関数を紹介します.
ここでSetWindowsHook Exを使って実現します.SetwindowsHook Exの最後のパラメータは0に設定されています.すべてのプロセスをブロックする関連ニュースを表しています.コールバック関数にHookをインストールすれば目的が達成できます.
既存のコードに対して、dlmail.cppを少し修正します.以下の通りです.
// dllmain.cpp :    DLL         。
#include "stdafx.h"
#include "detours.h"
#include 
#include 
using namespace std;


PVOID g_pOldMessageBoxW=NULL;
PVOID g_pOldMessageBoxA=NULL;

typedef int (WINAPI *PfuncMessageBoxA)(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType);
typedef int (WINAPI *PfuncMessageBoxW)( HWND hWnd, LPCWSTR lpText,LPCWSTR lpCaption,UINT uType);

int WINAPI ZwNewMessageBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType)
{
	return ((PfuncMessageBoxA)g_pOldMessageBoxA)(hWnd, "Hook This!","My hook",uType);
}
int WINAPI ZwNewMessageBoxW(HWND hWnd, LPCWSTR lpText,LPCWSTR lpCaption,UINT uType)
{
	return ((PfuncMessageBoxW)g_pOldMessageBoxW)(hWnd,L"Hook This!",L"My hook",uType);
}

//     
#pragma data_seg("SHARED") 
HHOOK g_hMessageHook=NULL;
BOOL g_bStopHook=FALSE;
BOOL g_bHookInstalled=FALSE;
#pragma data_seg()         
#pragma comment(linker, "/section:SHARED,RWS")


BOOL APIENTRY SetHook()
{
	//       return
	if(g_bHookInstalled)return TRUE;
	//      
	cout<
はい、次のステップでMFCプログラムを作成して、私達のフックをロードしてアンインストールします.
ダイアログの上に2つのボタンを追加します.
Hook MessageBox 进阶 跨进程Hook_第1张图片
ボタンイベントの処理関数は以下の通りです.
typedef BOOL  (WINAPIV	*SetGoableHook)();
typedef VOID  (WINAPIV	*DropGoableHook)();


void CTestHookDlg::OnBnClickedSethook()
{
	HINSTANCE hDLL=::LoadLibrary(L"Hook.dll");
	SetGoableHook func=(SetGoableHook)GetProcAddress(hDLL,"SetGoableHook");
	func();
}

void CTestHookDlg::OnBnClickedDropHook()
{
	HINSTANCE hDLL=::LoadLibrary(L"Hook.dll");
	DropGoableHook func=(DropGoableHook)GetProcAddress(hDLL,"DropGoableHook");
	func();
}
Okは以下のように私達はフックをテストします.相変わらずpythonコマンドラインを使ってデモンストレーションを行います.
1.pythonインタラクティブインターフェースに入ったら、Set DobaleHookボタンをクリックし、次のコマンドを入力し、MessageBox点をポップアップし、このプロセスを確定するとWH_をトリガします.GETMESSAGE 
私たちのコールバック関数に入ると、私たちのフックは既にロードに成功しました.
Hook MessageBox 进阶 跨进程Hook_第2张图片
はい、またMessage Boxを呼び出します.
Hook MessageBox 进阶 跨进程Hook_第3张图片
pythonプロセスを発見したMessageBoxはすでに私達に取り換えられました.これはコマンドラインプログラムですので、初めて呼び出したのはこのプロセスに入るためだけです.GETMESSAGEはMessage HookProcをリピートします.
異なる種類のプロセスに対してHookの場合は、異なるパラメータが使用できます. WH_CALLWNDPROCRET,WH_KEY BOARD_LL,WH_MOUSE_LLがHookを行います
同じ理屈でフックを取り外します
Hook MessageBox 进阶 跨进程Hook_第4张图片
間違ったところがありましたら、ご指摘ください.
ソースアドレス
http://download.csdn.net/detail/xugangjava/6488007