1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
| #include "pch.h" #include <Windows.h> #include <stdio.h> #include <detours.h> #include <WtsApi32.h> #pragma comment(lib,"WtsApi32.lib") #pragma comment(lib,"detours.lib")
BOOL (WINAPI* _CreateProcessA)( LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ) = CreateProcessA;
BOOL(WINAPI* _CreateProcessW)( LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ) = CreateProcessW;
BOOL(WINAPI MyCreateProcessA)( LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ) { int ret = _CreateProcessA( lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation);
LPWSTR title = LPWSTR(L"新进程创建提示"); DWORD resp; WTSSendMessageW( WTS_CURRENT_SERVER_HANDLE, WTSGetActiveConsoleSessionId(), title, lstrlen((LPCSTR)title), (LPWSTR)lpApplicationName, lstrlen(lpApplicationName), 0, 0, &resp, FALSE); return ret; }
BOOL WINAPI MyCreateProcessW( _In_opt_ LPCWSTR lpApplicationName, _Inout_opt_ LPWSTR lpCommandLine, _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ BOOL bInheritHandles, _In_ DWORD dwCreationFlags, _In_opt_ LPVOID lpEnvironment, _In_opt_ LPCWSTR lpCurrentDirectory, _In_ LPSTARTUPINFOW lpStartupInfo, _Out_ LPPROCESS_INFORMATION lpProcessInformation ) {
int ret = _CreateProcessW( lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation ); LPWSTR title = LPWSTR(L"新进程创建提示");
DWORD resp; WTSSendMessageW( WTS_CURRENT_SERVER_HANDLE, WTSGetActiveConsoleSessionId(), title, lstrlen((LPCSTR)title), (LPWSTR)lpApplicationName, lstrlen((LPCSTR)lpApplicationName), 0, 0, &resp, FALSE); return ret;
}
void hook() { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach((void**)&_CreateProcessA, MyCreateProcessA); DetourAttach((void**)&_CreateProcessW, MyCreateProcessW); DetourTransactionCommit(); }
void unhook() { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach((void**)&_CreateProcessA, MyCreateProcessA); DetourAttach((void**)&_CreateProcessW, MyCreateProcessW); DetourTransactionCommit(); }
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { LPWSTR title = LPWSTR(L"提示"); LPWSTR message = LPWSTR(L"注入成功"); DWORD resp; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: WTSSendMessageW( WTS_CURRENT_SERVER_HANDLE, WTSGetActiveConsoleSessionId(), title, lstrlen(LPCSTR(title)), message, lstrlen(LPCSTR(message)), 0, 0, &resp, FALSE); hook(); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: unhook(); break; } return TRUE; }
|