• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

FFFTPのソースコードです。


Commit MetaInfo

Revisione541a4bcc1e72d1ec9880c6adeeaa8046f68353a (tree)
Zeit2012-03-14 14:43:24
Autors_kawamoto <s_kawamoto@user...>
Commiters_kawamoto

Log Message

Fix bugs of hooking routines.

Ändern Zusammenfassung

Diff

Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
--- a/protectprocess.c
+++ b/protectprocess.c
@@ -73,7 +73,7 @@ BOOL IsModuleTrusted(LPCWSTR Filename);
7373 // フック対象のコードを置換してフックを開始
7474 #define SET_HOOK_FUNCTION(name) HookFunctionInCode(p_##name, h_##name, &c_##name, FALSE)
7575 // フック対象を呼び出す前に対象のコードを復元
76-#define START_HOOK_FUNCTION(name) HookFunctionInCode(p_##name, h_##name, &c_##name, TRUE)
76+#define BEGIN_HOOK_FUNCTION(name) HookFunctionInCode(p_##name, h_##name, &c_##name, TRUE)
7777 // フック対象を呼び出した後に対象のコードを置換
7878 #define END_HOOK_FUNCTION(name) HookFunctionInCode(p_##name, h_##name, NULL, FALSE)
7979
@@ -103,7 +103,7 @@ BYTE g_TrustedMD5HashTable[MAX_TRUSTED_MD5_HASH_TABLE][20];
103103 WNDPROC g_PasswordEditControlProc;
104104
105105 // 以下フック関数
106-// フック対象を呼び出す場合は前後でSTART_HOOK_FUNCTIONとEND_HOOK_FUNCTIONを実行する必要がある
106+// フック対象を呼び出す場合は前後でBEGIN_HOOK_FUNCTIONとEND_HOOK_FUNCTIONを実行する必要がある
107107
108108 HMODULE WINAPI h_LoadLibraryA(LPCSTR lpLibFileName)
109109 {
@@ -248,57 +248,62 @@ BOOL UnlockThreadLock()
248248 BOOL HookFunctionInCode(void* pOriginal, void* pNew, void* pBackupCode, BOOL bRestore)
249249 {
250250 BOOL bResult;
251- DWORD Protect;
252-#if defined(_X86_)
253- BYTE JumpCode[HOOK_JUMP_CODE_LENGTH] = {0xe9, 0x00, 0x00, 0x00, 0x00};
254- size_t Relative;
255- Relative = (size_t)pNew - (size_t)pOriginal - HOOK_JUMP_CODE_LENGTH;
256- memcpy(&JumpCode[1], &Relative, 4);
257251 bResult = FALSE;
258- if(bRestore)
252+#if defined(_X86_)
259253 {
260- if(VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, PAGE_EXECUTE_READWRITE, &Protect))
254+ BYTE JumpCode[HOOK_JUMP_CODE_LENGTH] = {0xe9, 0x00, 0x00, 0x00, 0x00};
255+ size_t Relative;
256+ DWORD Protect;
257+ Relative = (size_t)pNew - (size_t)pOriginal - HOOK_JUMP_CODE_LENGTH;
258+ memcpy(&JumpCode[1], &Relative, 4);
259+ if(bRestore)
261260 {
262- memcpy(pOriginal, pBackupCode, HOOK_JUMP_CODE_LENGTH);
263- VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, Protect, &Protect);
264- bResult = TRUE;
261+ if(VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, PAGE_EXECUTE_READWRITE, &Protect))
262+ {
263+ memcpy(pOriginal, pBackupCode, HOOK_JUMP_CODE_LENGTH);
264+ VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, Protect, &Protect);
265+ bResult = TRUE;
266+ }
265267 }
266- }
267- else
268- {
269- if(pBackupCode)
270- memcpy(pBackupCode, pOriginal, HOOK_JUMP_CODE_LENGTH);
271- if(VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, PAGE_EXECUTE_READWRITE, &Protect))
268+ else
272269 {
273- memcpy(pOriginal, &JumpCode, HOOK_JUMP_CODE_LENGTH);
274- VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, Protect, &Protect);
275- bResult = TRUE;
270+ if(pBackupCode)
271+ memcpy(pBackupCode, pOriginal, HOOK_JUMP_CODE_LENGTH);
272+ if(VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, PAGE_EXECUTE_READWRITE, &Protect))
273+ {
274+ memcpy(pOriginal, &JumpCode, HOOK_JUMP_CODE_LENGTH);
275+ VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, Protect, &Protect);
276+ bResult = TRUE;
277+ }
276278 }
277279 }
278280 #elif defined(_AMD64_)
279- BYTE JumpCode[HOOK_JUMP_CODE_LENGTH] = {0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
280- size_t Absolute;
281- Absolute = (size_t)pOriginal;
282- memcpy(&JumpCode[6], &Absolute, 8);
283- bResult = FALSE;
284- if(bRestore)
285281 {
286- if(VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, PAGE_EXECUTE_READWRITE, &Protect))
282+ BYTE JumpCode[HOOK_JUMP_CODE_LENGTH] = {0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
283+ size_t Absolute;
284+ DWORD Protect;
285+ Absolute = (size_t)pNew;
286+ memcpy(&JumpCode[6], &Absolute, 8);
287+ bResult = FALSE;
288+ if(bRestore)
287289 {
288- memcpy(pOriginal, pBackupCode, HOOK_JUMP_CODE_LENGTH);
289- VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, Protect, &Protect);
290- bResult = TRUE;
290+ if(VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, PAGE_EXECUTE_READWRITE, &Protect))
291+ {
292+ memcpy(pOriginal, pBackupCode, HOOK_JUMP_CODE_LENGTH);
293+ VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, Protect, &Protect);
294+ bResult = TRUE;
295+ }
291296 }
292- }
293- else
294- {
295- if(pBackupCode)
296- memcpy(pBackupCode, pOriginal, HOOK_JUMP_CODE_LENGTH);
297- if(VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, PAGE_EXECUTE_READWRITE, &Protect))
297+ else
298298 {
299- memcpy(pOriginal, &JumpCode, HOOK_JUMP_CODE_LENGTH);
300- VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, Protect, &Protect);
301- bResult = TRUE;
299+ if(pBackupCode)
300+ memcpy(pBackupCode, pOriginal, HOOK_JUMP_CODE_LENGTH);
301+ if(VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, PAGE_EXECUTE_READWRITE, &Protect))
302+ {
303+ memcpy(pOriginal, &JumpCode, HOOK_JUMP_CODE_LENGTH);
304+ VirtualProtect(pOriginal, HOOK_JUMP_CODE_LENGTH, Protect, &Protect);
305+ bResult = TRUE;
306+ }
302307 }
303308 }
304309 #endif
@@ -1012,13 +1017,13 @@ BOOL EnableLoadLibraryHook(BOOL bEnable)
10121017 {
10131018 bResult = TRUE;
10141019 #ifdef USE_CODE_HOOK
1015- if(!END_HOOK_FUNCTION(LoadLibraryA))
1020+ if(!BEGIN_HOOK_FUNCTION(LoadLibraryA))
10161021 bResult = FALSE;
1017- if(!END_HOOK_FUNCTION(LoadLibraryW))
1022+ if(!BEGIN_HOOK_FUNCTION(LoadLibraryW))
10181023 bResult = FALSE;
1019- if(!END_HOOK_FUNCTION(LoadLibraryExA))
1024+ if(!BEGIN_HOOK_FUNCTION(LoadLibraryExA))
10201025 bResult = FALSE;
1021- if(!END_HOOK_FUNCTION(LoadLibraryExW))
1026+ if(!BEGIN_HOOK_FUNCTION(LoadLibraryExW))
10221027 bResult = FALSE;
10231028 #endif
10241029 #ifdef USE_IAT_HOOK