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を少し修正します.以下の通りです.
ダイアログの上に2つのボタンを追加します.
ボタンイベントの処理関数は以下の通りです.
1.pythonインタラクティブインターフェースに入ったら、Set DobaleHookボタンをクリックし、次のコマンドを入力し、MessageBox点をポップアップし、このプロセスを確定するとWH_をトリガします.GETMESSAGE
私たちのコールバック関数に入ると、私たちのフックは既にロードに成功しました.
はい、またMessage Boxを呼び出します.
pythonプロセスを発見したMessageBoxはすでに私達に取り換えられました.これはコマンドラインプログラムですので、初めて呼び出したのはこのプロセスに入るためだけです.GETMESSAGEはMessage HookProcをリピートします.
異なる種類のプロセスに対してHookの場合は、異なるパラメータが使用できます. WH_CALLWNDPROCRET,WH_KEY BOARD_LL,WH_MOUSE_LLがHookを行います
同じ理屈でフックを取り外します
間違ったところがありましたら、ご指摘ください.
ソースアドレス
http://download.csdn.net/detail/xugangjava/6488007
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つのボタンを追加します.
ボタンイベントの処理関数は以下の通りです.
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
私たちのコールバック関数に入ると、私たちのフックは既にロードに成功しました.
はい、またMessage Boxを呼び出します.
pythonプロセスを発見したMessageBoxはすでに私達に取り換えられました.これはコマンドラインプログラムですので、初めて呼び出したのはこのプロセスに入るためだけです.GETMESSAGEはMessage HookProcをリピートします.
異なる種類のプロセスに対してHookの場合は、異なるパラメータが使用できます. WH_CALLWNDPROCRET,WH_KEY BOARD_LL,WH_MOUSE_LLがHookを行います
同じ理屈でフックを取り外します
間違ったところがありましたら、ご指摘ください.
ソースアドレス
http://download.csdn.net/detail/xugangjava/6488007