2 // Copyright (C) 2011 Suguru Kawamoto
\r
5 #ifndef __PROTECTPROCESS_H__
\r
6 #define __PROTECTPROCESS_H__
\r
8 #define ENABLE_PROCESS_PROTECTION
\r
11 // フック先の関数のコードを書き換える
\r
12 // 全ての呼び出しをフック可能だが原理的に二重呼び出しに対応できない
\r
13 #define USE_CODE_HOOK
\r
14 // フック先の関数のインポートアドレステーブルを書き換える
\r
15 // 二重呼び出しが可能だが呼び出し方法によってはフックを回避される
\r
16 //#define USE_IAT_HOOK
\r
18 typedef HMODULE (WINAPI* _LoadLibraryA)(LPCSTR);
\r
19 typedef HMODULE (WINAPI* _LoadLibraryW)(LPCWSTR);
\r
20 typedef HMODULE (WINAPI* _LoadLibraryExA)(LPCSTR, HANDLE, DWORD);
\r
21 typedef HMODULE (WINAPI* _LoadLibraryExW)(LPCWSTR, HANDLE, DWORD);
\r
23 #ifndef DO_NOT_REPLACE
\r
28 #define EXTERN_HOOK_FUNCTION_VAR(name) extern _##name p_##name;
\r
31 #define LoadLibraryA p_LoadLibraryA
\r
32 EXTERN_HOOK_FUNCTION_VAR(LoadLibraryA)
\r
34 #define LoadLibraryW p_LoadLibraryW
\r
35 EXTERN_HOOK_FUNCTION_VAR(LoadLibraryW)
\r
36 #undef LoadLibraryExA
\r
37 #define LoadLibraryExA p_LoadLibraryExA
\r
38 EXTERN_HOOK_FUNCTION_VAR(LoadLibraryExA)
\r
39 #undef LoadLibraryExW
\r
40 #define LoadLibraryExW p_LoadLibraryExW
\r
41 EXTERN_HOOK_FUNCTION_VAR(LoadLibraryExW)
\r
47 // ロード済みのモジュールは検査をパス
\r
48 #define PROCESS_PROTECTION_LOADED 0x00000001
\r
49 // モジュールに埋め込まれたAuthenticode署名を検査
\r
50 #define PROCESS_PROTECTION_BUILTIN 0x00000002
\r
51 // サイドバイサイドのAuthenticode署名を検査
\r
52 #define PROCESS_PROTECTION_SIDE_BY_SIDE 0x00000004
\r
54 #define PROCESS_PROTECTION_SYSTEM_FILE 0x00000008
\r
55 // Authenticode署名の有効期限を無視
\r
56 #define PROCESS_PROTECTION_EXPIRED 0x00000010
\r
57 // Authenticode署名の発行元を無視
\r
58 #define PROCESS_PROTECTION_UNAUTHORIZED 0x00000020
\r
60 #define PROCESS_PROTECTION_NONE 0
\r
61 #define PROCESS_PROTECTION_DEFAULT PROCESS_PROTECTION_HIGH
\r
62 #define PROCESS_PROTECTION_HIGH (PROCESS_PROTECTION_BUILTIN | PROCESS_PROTECTION_SIDE_BY_SIDE | PROCESS_PROTECTION_SYSTEM_FILE)
\r
63 #define PROCESS_PROTECTION_MEDIUM (PROCESS_PROTECTION_HIGH | PROCESS_PROTECTION_LOADED | PROCESS_PROTECTION_EXPIRED)
\r
64 #define PROCESS_PROTECTION_LOW (PROCESS_PROTECTION_MEDIUM | PROCESS_PROTECTION_UNAUTHORIZED)
\r
66 HMODULE System_LoadLibrary(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);
\r
67 void SetProcessProtectionLevel(DWORD Level);
\r
68 BOOL GetSHA1HashOfFile(LPCWSTR Filename, void* pHash);
\r
69 BOOL RegisterTrustedModuleSHA1Hash(void* pHash);
\r
70 BOOL UnregisterTrustedModuleSHA1Hash(void* pHash);
\r
71 BOOL UnloadUntrustedModule();
\r
72 BOOL InitializeLoadLibraryHook();
\r
73 BOOL EnableLoadLibraryHook(BOOL bEnable);
\r
74 BOOL RestartProtectedProcess(LPCTSTR Keyword);
\r