OSDN Git Service

Add protection for password edit controls.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Sun, 19 Feb 2012 17:10:22 +0000 (02:10 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Sun, 19 Feb 2012 17:10:22 +0000 (02:10 +0900)
FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
hostman.c
misc.c
option.c
protectprocess.c
protectprocess.h

index 6d9534c..4298092 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index 27a3733..e208a6c 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index 4fcdd9e..fc6117a 100644 (file)
--- a/hostman.c
+++ b/hostman.c
@@ -1696,6 +1696,8 @@ static INT_PTR CALLBACK MainSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam,
        switch (iMessage)\r
        {\r
                case WM_INITDIALOG :\r
+                       // プロセス保護\r
+                       ProtectAllEditControls(hDlg);\r
                        SendDlgItemMessage(hDlg, HSET_HOST, EM_LIMITTEXT, HOST_NAME_LEN, 0);\r
                        SendDlgItemMessage(hDlg, HSET_ADRS, EM_LIMITTEXT, HOST_ADRS_LEN, 0);\r
                        SendDlgItemMessage(hDlg, HSET_USER, EM_LIMITTEXT, USER_NAME_LEN, 0);\r
diff --git a/misc.c b/misc.c
index 67ccd91..b8803a9 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -145,6 +145,8 @@ static INT_PTR CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPa
        switch (iMessage)\r
        {\r
                case WM_INITDIALOG :\r
+                       // プロセス保護\r
+                       ProtectAllEditControls(hDlg);\r
                        if(strlen(DialogData->Title) != 0)\r
                                SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)DialogData->Title);\r
                        SendDlgItemMessage(hDlg, INP_INPSTR, EM_LIMITTEXT, DialogData->MaxLen-1, 0);\r
index 5fe6329..ba2c340 100644 (file)
--- a/option.c
+++ b/option.c
@@ -1182,6 +1182,8 @@ static INT_PTR CALLBACK FireSettingProc(HWND hDlg, UINT message, WPARAM wParam,
        switch (message)\r
        {\r
                case WM_INITDIALOG :\r
+                       // プロセス保護\r
+                       ProtectAllEditControls(hDlg);\r
                        Type = ConvertNum(FwallType, 1, TypeTbl, sizeof(TypeTbl)/sizeof(INTCONVTBL));\r
                        SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN204);\r
                        SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN205);\r
index a37fab2..f0669a8 100644 (file)
@@ -100,6 +100,7 @@ DWORD g_ProcessProtectionLevel;
 DWORD g_LockedThread[MAX_LOCKED_THREAD];\r
 WCHAR* g_pTrustedFilenameTable[MAX_TRUSTED_FILENAME_TABLE];\r
 BYTE g_TrustedMD5HashTable[MAX_TRUSTED_MD5_HASH_TABLE][20];\r
+WNDPROC g_PasswordEditControlProc;\r
 \r
 // 以下フック関数\r
 // フック対象を呼び出す場合は前後でSTART_HOOK_FUNCTIONとEND_HOOK_FUNCTIONを実行する必要がある\r
@@ -1089,3 +1090,55 @@ BOOL RestartProtectedProcess(LPCTSTR Keyword)
        return bResult;\r
 }\r
 \r
+INT_PTR CALLBACK PasswordEditControlWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)\r
+{\r
+       switch(Msg)\r
+       {\r
+       case EM_GETPASSWORDCHAR:\r
+               break;\r
+       case EM_SETPASSWORDCHAR:\r
+               break;\r
+       default:\r
+               return CallWindowProcW(g_PasswordEditControlProc, hWnd, Msg, wParam, lParam);\r
+       }\r
+       return 0;\r
+}\r
+\r
+BOOL ProtectPasswordEditControl(HWND hWnd)\r
+{\r
+       BOOL bResult;\r
+       WCHAR ClassName[MAX_PATH];\r
+       WNDPROC Proc;\r
+       bResult = FALSE;\r
+       if(g_ProcessProtectionLevel & PROCESS_PROTECTION_PASSWORD_EDIT)\r
+       {\r
+               if(GetClassNameW(hWnd, ClassName, MAX_PATH) > 0)\r
+               {\r
+                       if(_wcsicmp(ClassName, WC_EDITW) == 0)\r
+                       {\r
+                               Proc = (WNDPROC)GetWindowLongPtrW(hWnd, GWLP_WNDPROC);\r
+                               if(Proc != (WNDPROC)PasswordEditControlWndProc)\r
+                               {\r
+                                       g_PasswordEditControlProc = Proc;\r
+                                       SetWindowLongPtrW(hWnd, GWLP_WNDPROC, (LONG_PTR)PasswordEditControlWndProc);\r
+                                       bResult = TRUE;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+       return bResult;\r
+}\r
+\r
+BOOL CALLBACK ProtectAllEditControlsEnumChildProc(HWND hwnd , LPARAM lParam)\r
+{\r
+       ProtectPasswordEditControl(hwnd);\r
+       return TRUE;\r
+}\r
+\r
+BOOL ProtectAllEditControls(HWND hWnd)\r
+{\r
+       if(g_ProcessProtectionLevel & PROCESS_PROTECTION_PASSWORD_EDIT)\r
+               EnumChildWindows(hWnd, ProtectAllEditControlsEnumChildProc, 0);\r
+       return TRUE;\r
+}\r
+\r
index 1b65084..22c1152 100644 (file)
@@ -56,12 +56,14 @@ EXTERN_HOOK_FUNCTION_VAR(LoadLibraryExW)
 #define PROCESS_PROTECTION_EXPIRED 0x00000010\r
 // Authenticode署名の発行元を無視\r
 #define PROCESS_PROTECTION_UNAUTHORIZED 0x00000020\r
+// パスワード入力コントロールを保護\r
+#define PROCESS_PROTECTION_PASSWORD_EDIT 0x00000040\r
 \r
 #define PROCESS_PROTECTION_NONE 0\r
 #define PROCESS_PROTECTION_DEFAULT PROCESS_PROTECTION_HIGH\r
-#define PROCESS_PROTECTION_HIGH (PROCESS_PROTECTION_BUILTIN | PROCESS_PROTECTION_SIDE_BY_SIDE | PROCESS_PROTECTION_SYSTEM_FILE)\r
-#define PROCESS_PROTECTION_MEDIUM (PROCESS_PROTECTION_HIGH | PROCESS_PROTECTION_LOADED | PROCESS_PROTECTION_EXPIRED)\r
-#define PROCESS_PROTECTION_LOW (PROCESS_PROTECTION_MEDIUM | PROCESS_PROTECTION_UNAUTHORIZED)\r
+#define PROCESS_PROTECTION_HIGH (PROCESS_PROTECTION_BUILTIN | PROCESS_PROTECTION_SIDE_BY_SIDE | PROCESS_PROTECTION_SYSTEM_FILE | PROCESS_PROTECTION_PASSWORD_EDIT)\r
+#define PROCESS_PROTECTION_MEDIUM (PROCESS_PROTECTION_HIGH | PROCESS_PROTECTION_LOADED | PROCESS_PROTECTION_EXPIRED | PROCESS_PROTECTION_PASSWORD_EDIT)\r
+#define PROCESS_PROTECTION_LOW (PROCESS_PROTECTION_MEDIUM | PROCESS_PROTECTION_UNAUTHORIZED | PROCESS_PROTECTION_PASSWORD_EDIT)\r
 \r
 HMODULE System_LoadLibrary(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);\r
 void SetProcessProtectionLevel(DWORD Level);\r
@@ -72,6 +74,8 @@ BOOL UnloadUntrustedModule();
 BOOL InitializeLoadLibraryHook();\r
 BOOL EnableLoadLibraryHook(BOOL bEnable);\r
 BOOL RestartProtectedProcess(LPCTSTR Keyword);\r
+BOOL ProtectPasswordEditControl(HWND hWnd);\r
+BOOL ProtectAllEditControls(HWND hWnd);\r
 \r
 #endif\r
 \r