Shion(诗音) is a Hook library
#include <stdio.h> #include <Windows.h> #include "../../src/Shion.h" static PSHION_HOOK g_MessageBoxAHook = NULL; int WINAPI MyMessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) { typedef int(WINAPI* FuncMessageBoxA)(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); printf("MessageBoxA %d %s %s %d\r\n", (DWORD)hWnd, lpText, lpCaption, uType); #ifndef _DEBUG if (g_MessageBoxAHook != NULL && g_MessageBoxAHook->OriginalSize) return ((FuncMessageBoxA)&g_MessageBoxAHook->OriginalData)(hWnd, "Shion daisuki", lpCaption, uType); #endif // _DEBUG return 0; } int main() { g_MessageBoxAHook = malloc(sizeof(SHION_HOOK)); memset(g_MessageBoxAHook, 0, sizeof(SHION_HOOK)); do { MessageBoxA(NULL, "Hello Shion", "Tip", 0); if (!ShionHook(&MessageBoxA, &MyMessageBoxA, g_MessageBoxAHook)) { printf("MessageBoxA hook fail\n"); break; } MessageBoxA(NULL, "Hello Shion", "Tip", 0); if (!ShionRestore(g_MessageBoxAHook)) { printf("MessageBoxA unhook fail\n"); break; } MessageBoxA(NULL, "Shion Shion Shion", "Tip", 0); return 0; } while (0); return -1; }