diff options
-rw-r--r-- | Translations/Language.ko.xml | 24 | ||||
-rw-r--r-- | src/Common/Dlgcode.c | 33 | ||||
-rw-r--r-- | src/Main/TextUserInterface.cpp | 18 |
3 files changed, 55 insertions, 20 deletions
diff --git a/Translations/Language.ko.xml b/Translations/Language.ko.xml index 853834d3..635a17eb 100644 --- a/Translations/Language.ko.xml +++ b/Translations/Language.ko.xml @@ -269,8 +269,8 @@ <entry lang="ko" key="IDT_ACCELERATION_OPTIONS">하드웨어 가속</entry> <entry lang="ko" key="IDT_ASSIGN_HOTKEY">바로가기</entry> <entry lang="ko" key="IDT_AUTORUN">자동 실행 설정 (autorun.inf)</entry> - <entry lang="ko" key="IDT_AUTO_DISMOUNT">자동 꺼냄</entry> - <entry lang="ko" key="IDT_AUTO_DISMOUNT_ON">다음과 같은 경우 모두 해제하십시오:</entry> + <entry lang="ko" key="IDT_AUTO_DISMOUNT">자동으로 마운트 해제</entry> + <entry lang="ko" key="IDT_AUTO_DISMOUNT_ON">다음과 같은 경우 모두 해제:</entry> <entry lang="ko" key="IDT_BOOT_LOADER_SCREEN_OPTIONS">부트 로더 화면 옵션</entry> <entry lang="ko" key="IDT_CONFIRM_PASSWORD">암호 확인:</entry> <entry lang="ko" key="IDT_CURRENT">현재 암호</entry> @@ -732,7 +732,7 @@ <entry lang="ko" key="CANT_DISMOUNT_VOLUME">볼륨을 마운트 해제 할 수 없습니다.</entry> <entry lang="ko" key="FORMAT_NTFS_FAILED">Windows에서 볼륨을 NTFS/exFAT/ReFS로 포맷하지 못했습니다.\n\n가능한 경우 다른 유형의 파일 시스템을 선택하고 다시 시도하세요. 또는 볼륨을 포맷하지 않고 (파일 시스템으로 '없음'을 선택)이 마법사를 종료하고 볼륨을 마운트 한 다음 시스템 또는 타사 도구를 사용하여 마운트 된 볼륨을 포맷 할 수 있습니다(볼륨은 암호화 된 상태로 유지됨).</entry> <entry lang="ko" key="FORMAT_NTFS_FAILED_ASK_FAT">Windows에서 볼륨을 NTFS/exFAT/ReFS로 포맷하지 못했습니다.\n\n대신 볼륨을 FAT로 포맷 하시겠습니까?</entry> - <entry lang="ko" key="DEFAULT">태만</entry> + <entry lang="ko" key="DEFAULT">기본값</entry> <entry lang="ko" key="PARTITION_LOWER_CASE">분할</entry> <entry lang="ko" key="PARTITION_UPPER_CASE">분할</entry> <entry lang="ko" key="DEVICE">장치</entry> @@ -882,7 +882,7 @@ <entry lang="ko" key="INSTALL_COMPLETED">설치 완료.</entry> <entry lang="ko" key="CANT_CREATE_FOLDER">폴더 '%s'을 (를) 만들지 못했습니다.</entry> <entry lang="ko" key="CLOSE_TC_FIRST">VeraCrypt 장치 드라이버를 언로드 할 수 없습니다.\n\n열려있는 모든 VeraCrypt 창을 먼저 닫으세요. 문제가 해결되지 않으면 Windows를 다시 시작한 다음 다시 시도하세요.</entry> - <entry lang="ko" key="DISMOUNT_ALL_FIRST">VeraCrypt를 설치하거나 제거하기 전에 모든 VeraCrypt 볼륨을 분리해야합니다.</entry> + <entry lang="ko" key="DISMOUNT_ALL_FIRST">VeraCrypt를 설치하거나 제거하기 전에 모든 VeraCrypt 볼륨의 마운트를 해제해야합니다.</entry> <entry lang="ko" key="UNINSTALL_OLD_VERSION_FIRST">VeraCrypt의 구식 버전이 현재이 시스템에 설치되어 있습니다. 이 새 버전의 VeraCrypt를 설치하려면 먼저 제거해야합니다.\n\n이 메시지 상자를 닫으면 이전 버전의 제거 프로그램이 시작됩니다. VeraCrypt를 제거 할 때 볼륨이 암호 해독되지 않습니다. VeraCrypt의 이전 버전을 제거한 후 새 버전의 VeraCrypt 설치 프로그램을 다시 실행하세요.</entry> <entry lang="ko" key="REG_INSTALL_FAILED">레지스트리 항목 설치가 실패했습니다.</entry> <entry lang="ko" key="DRIVER_INSTALL_FAILED">장치 드라이버 설치에 실패했습니다. Windows를 다시 시작한 다음 VeraCrypt를 다시 설치하세요.</entry> @@ -975,7 +975,7 @@ <entry lang="ko" key="SYSTEM_FAVORITES_DLG_TITLE">VeraCrypt - 시스템 즐겨 찾기 볼륨</entry> <entry lang="ko" key="SYS_FAVORITES_HELP_LINK">시스템 선호 볼륨은 무엇입니까?</entry> <entry lang="ko" key="SYS_FAVORITES_REQUIRE_PBA">시스템 파티션/드라이브가 암호화되지 않은 것 같습니다.\n\n시스템 부팅 볼륨 사전 인증 암호 만 사용하여 시스템 선호 볼륨을 마운트 할 수 있습니다. 따라서 시스템 즐겨 찾기 볼륨을 사용하려면 먼저 시스템 파티션/드라이브를 암호화해야합니다.</entry> - <entry lang="ko" key="DISMOUNT_FIRST">진행하기 전에 볼륨을 분리하세요.</entry> + <entry lang="ko" key="DISMOUNT_FIRST">진행하기 전에 볼륨의 마운트를 해제하세요.</entry> <entry lang="ko" key="CANNOT_SET_TIMER">오류: 타이머를 설정할 수 없습니다.</entry> <entry lang="ko" key="IDPM_CHECK_FILESYS">파일 시스템 검사</entry> <entry lang="ko" key="IDPM_REPAIR_FILESYS">파일 시스템 복구</entry> @@ -1011,10 +1011,10 @@ <entry lang="ko" key="HK_AUTOMOUNT_DEVICES">자동 마운트 장치</entry> <entry lang="ko" key="HK_DISMOUNT_ALL">모두 마운트 해제</entry> <entry lang="ko" key="HK_WIPE_CACHE">캐시 지우기</entry> - <entry lang="ko" key="HK_DISMOUNT_ALL_AND_WIPE">모든 지우기 캐시 마운트 해제</entry> - <entry lang="ko" key="HK_FORCE_DISMOUNT_ALL_AND_WIPE">모든 지우기 캐시를 강제로 제거합니다.</entry> - <entry lang="ko" key="HK_FORCE_DISMOUNT_ALL_AND_WIPE_AND_EXIT">강제 모두 제거, 캐시 지우기 끝내기</entry> - <entry lang="ko" key="HK_MOUNT_FAVORITE_VOLUMES">좋아하는 볼륨 마운트</entry> + <entry lang="ko" key="HK_DISMOUNT_ALL_AND_WIPE">전체 마운트 해제 및 캐시 삭제</entry> + <entry lang="ko" key="HK_FORCE_DISMOUNT_ALL_AND_WIPE">전체 마운트 강제 해제 및 캐시 삭제</entry> + <entry lang="ko" key="HK_FORCE_DISMOUNT_ALL_AND_WIPE_AND_EXIT">전체 마운트 강제 해제 및 캐시 삭제 후 종료</entry> + <entry lang="ko" key="HK_MOUNT_FAVORITE_VOLUMES">자주찾는 볼륨 마운트</entry> <entry lang="ko" key="HK_SHOW_HIDE_MAIN_WINDOW">주 VeraCrypt 창 표시/숨기기</entry> <entry lang="ko" key="PRESS_A_KEY_TO_ASSIGN">(여기를 클릭하고 키를 누르십시오)</entry> <entry lang="ko" key="ACTION">동작</entry> @@ -1026,11 +1026,11 @@ <entry lang="ko" key="SYS_ENC_HIBERNATION_PREVENTED">오류 또는 비 호환성으로 인해 VeraCrypt가 최대 절전 모드 파일을 암호화하지 못합니다. 따라서 최대 절전 모드가 차단되었습니다.\n\n참고: 컴퓨터가 최대 절전 모드로 전환되거나 절전 모드로 전환되면 시스템 메모리의 내용이 시스템 드라이브에있는 최대 절전 모드 저장 파일에 기록됩니다. VeraCrypt는 암호화 키를 방지 할 수 없으며 RAM에서 열린 민감한 파일의 내용이 암호화되지 않은 상태에서 최대 절전 모드 저장 파일에 저장되지 않습니다.</entry> <entry lang="ko" key="HIDDEN_OS_HIBERNATION_PREVENTED">최대 절전 모드가 차단되었습니다.\n\nVeraCrypt는 추가 부팅 파티션을 사용하는 숨겨진 운영 체제에서 최대 절전 모드를 지원하지 않습니다. 부팅 파티션은 미끼와 숨겨진 시스템에서 공유됩니다. 따라서 최대 절전 모드에서 다시 시작하는 동안 데이터 누출 및 문제를 방지하기 위해 VeraCrypt는 숨겨진 시스템이 공유 부팅 파티션에 쓰거나 최대 절전 모드로 전환하는 것을 방지해야합니다.</entry> <entry lang="ko" key="VOLUME_MOUNTED_AS_DRIVE_LETTER_X_DISMOUNTED">%c:로 마운트 된 VeraCrypt 볼륨이 마운트 해제되었습니다.</entry> - <entry lang="ko" key="MOUNTED_VOLUMES_DISMOUNTED">VeraCrypt 볼륨이 분리되었습니다.</entry> - <entry lang="ko" key="VOLUMES_DISMOUNTED_CACHE_WIPED">VeraCrypt 볼륨이 분리되었으며 암호 캐시가 지워졌습니다.</entry> + <entry lang="ko" key="MOUNTED_VOLUMES_DISMOUNTED">VeraCrypt 볼륨이 마운트 해제되었습니다.</entry> + <entry lang="ko" key="VOLUMES_DISMOUNTED_CACHE_WIPED">VeraCrypt 볼륨이 마운트 해제되었으며 암호 캐시가 지워졌습니다.</entry> <entry lang="ko" key="SUCCESSFULLY_DISMOUNTED">성공적으로 마운트 해제 됨</entry> <entry lang="ko" key="CONFIRM_BACKGROUND_TASK_DISABLED">경고: VeraCrypt 백그라운드 작업을 사용하지 않으면 다음 기능이 비활성화됩니다.\n\n1) 핫 키\n2) 자동 마운트 해제 (예: 로그 오프, 부주의 한 호스트 장치 제거, 시간 초과 등)\n3 ) 좋아하는 볼륨의 자동 마운트\n4) 알림 (예: 숨겨진 볼륨의 손상이 방지 된 경우)\n5) 트레이 아이콘\n\n참고: VeraCrypt 트레이 아이콘을 마우스 오른쪽 버튼으로 클릭하고 백그라운드 작업을 종료 할 수 있습니다. '종료'를 선택하세요.\n\nVeraCrypt 백그라운드 작업을 영구적으로 비활성화 하시겠습니까?</entry> - <entry lang="ko" key="CONFIRM_NO_FORCED_AUTODISMOUNT">경고 :이 옵션을 사용하지 않으면 열려있는 파일/디렉토리가있는 볼륨을 자동 마운트 해제 할 수 없습니다.\n\n이 옵션을 비활성화 하시겠습니까?</entry> + <entry lang="ko" key="CONFIRM_NO_FORCED_AUTODISMOUNT">경고 :이 옵션을 사용하지 않으면 열려있는 파일/디렉토리가있는 볼륨을 자동으로 마운트 해제 할 수 없습니다.\n\n이 옵션을 비활성화 하시겠습니까?</entry> <entry lang="ko" key="WARN_PREF_AUTO_DISMOUNT">경고: 열린 파일/디렉토리가있는 볼륨은 자동으로 마운트 해제되지 않습니다.\n\n이렇게하려면이 대화 상자 창에서 다음 옵션을 활성화하십시오: '볼륨에 열려있는 파일이나 디렉토리가 있어도 자동 마운트 해제를 강제하십시오'</entry> <entry lang="ko" key="WARN_PREF_AUTO_DISMOUNT_ON_POWER">경고: 노트북 배터리 전원이 낮 으면 컴퓨터가 절전 모드로 전환 될 때 Windows에서 실행중인 응용 프로그램으로 적절한 메시지를 보내지 않을 수 있습니다. 따라서 VeraCrypt는 이러한 경우 자동 볼륨 마운트 해제에 실패 할 수 있습니다.</entry> <entry lang="ko" key="NONSYS_INPLACE_ENC_RESUME_PROMPT">파티션/볼륨의 암호화/암호 해독 프로세스를 예약했습니다. 프로세스가 아직 완료되지 않았습니다.\n\n지금 프로세스를 재개 하시겠습니까?</entry> diff --git a/src/Common/Dlgcode.c b/src/Common/Dlgcode.c index 78aa3844..4ea10aaa 100644 --- a/src/Common/Dlgcode.c +++ b/src/Common/Dlgcode.c @@ -14240,9 +14240,11 @@ BOOL BufferHasPattern (const unsigned char* buffer, size_t bufferLen, const void return bRet; } -/* Implementation borrowed from KeePassXC source code (https://github.com/keepassxreboot/keepassxc/blob/release/2.4.0/src/core/Bootstrap.cpp#L150) +/* Implementation borrowed from KeePassXC source code (https://github.com/keepassxreboot/keepassxc/blob/2.7.8/src/core/Bootstrap.cpp#L121) * * Reduce current user acess rights for this process to the minimum in order to forbid non-admin users from reading the process memory. + * Restrict access to changing DACL's after the process is started. This prevents the creator of veracrypt process from simply adding + * the permission to read memory back to the DACL list. */ BOOL ActivateMemoryProtection() { @@ -14252,6 +14254,8 @@ BOOL ActivateMemoryProtection() HANDLE hToken = NULL; PTOKEN_USER pTokenUser = NULL; DWORD cbBufferSize = 0; + PSID pOwnerRightsSid = NULL; + DWORD pOwnerRightsSidSize = SECURITY_MAX_SID_SIZE; // Access control list PACL pACL = NULL; @@ -14292,8 +14296,19 @@ BOOL ActivateMemoryProtection() goto Cleanup; } + // Retrieve CreaterOwnerRights SID + pOwnerRightsSid = (PSID) HeapAlloc(GetProcessHeap(), 0, pOwnerRightsSidSize); + if (pOwnerRightsSid == NULL) { + goto Cleanup; + } + + if (!CreateWellKnownSid(WinCreatorOwnerRightsSid, NULL, pOwnerRightsSid, &pOwnerRightsSidSize)) { + goto Cleanup; + } + // Calculate the amount of memory that must be allocated for the DACL - cbACL = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pTokenUser->User.Sid); + cbACL = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pTokenUser->User.Sid) + + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pOwnerRightsSid); // Create and initialize an ACL pACL = (PACL) HeapAlloc(GetProcessHeap(), 0, cbACL); @@ -14315,6 +14330,17 @@ BOOL ActivateMemoryProtection() goto Cleanup; } + // Explicitly set "Process Owner" rights to Read Only. The default is Full Control. + if (!AddAccessAllowedAce( + pACL, + ACL_REVISION, + READ_CONTROL, + pOwnerRightsSid + )) { + goto Cleanup; + } + + // Set discretionary access control list bSuccess = (ERROR_SUCCESS == SetSecurityInfo(GetCurrentProcess(), // object handle SE_KERNEL_OBJECT, // type of object @@ -14333,6 +14359,9 @@ Cleanup: if (pACL != NULL) { HeapFree(GetProcessHeap(), 0, pACL); } + if (pOwnerRightsSid != NULL) { + HeapFree(GetProcessHeap(), 0, pOwnerRightsSid); + } if (pTokenUser != NULL) { HeapFree(GetProcessHeap(), 0, pTokenUser); } diff --git a/src/Main/TextUserInterface.cpp b/src/Main/TextUserInterface.cpp index 0de76c6b..94919296 100644 --- a/src/Main/TextUserInterface.cpp +++ b/src/Main/TextUserInterface.cpp @@ -668,7 +668,7 @@ namespace VeraCrypt { parentDir = wxT("."); } - if (wxDirExists(parentDir) && wxGetDiskSpace (parentDir, nullptr, &diskSpace)) + if (options->Type == VolumeType::Normal && wxDirExists(parentDir) && wxGetDiskSpace (parentDir, nullptr, &diskSpace)) { AvailableDiskSpace = (uint64) diskSpace.GetValue (); if (maxVolumeSize > AvailableDiskSpace) @@ -678,10 +678,13 @@ namespace VeraCrypt if (options->Size == (uint64) (-1)) { - if (AvailableDiskSpace) + if (options->Type == VolumeType::Hidden) { + throw_err (_("Please do not use maximum size for hidden volume. As we do not mount the outer volume to determine the available space, it is your responsibility to choose a value so that the hidden volume does not overlap the outer volume.")); + } + else if (AvailableDiskSpace) { // caller requesting maximum size - // we use maxVolumeSize because it is guaranteed to be less of equal to AvailableDiskSpace + // we use maxVolumeSize because it is guaranteed to be less or equal to AvailableDiskSpace for outer volumes options->Size = maxVolumeSize; } else @@ -702,14 +705,17 @@ namespace VeraCrypt throw MissingArgument (SRC_POS); uint64 multiplier = 1024 * 1024; - wxString sizeStr = AskString (options->Type == VolumeType::Hidden ? _("\nEnter hidden volume size (sizeK/size[M]/sizeG/sizeT/max): ") : _("\nEnter volume size (sizeK/size[M]/sizeG.sizeT/max): ")); + wxString sizeStr = AskString (options->Type == VolumeType::Hidden ? _("\nEnter hidden volume size (sizeK/size[M]/sizeG/sizeT): ") : _("\nEnter volume size (sizeK/size[M]/sizeG.sizeT/max): ")); if (sizeStr.CmpNoCase(wxT("max")) == 0) { multiplier = 1; - if (AvailableDiskSpace) + if (options->Type == VolumeType::Hidden) { + throw_err (_("Please do not use maximum size for hidden volume. As we do not mount the outer volume to determine the available space, it is your responsibility to choose a value so that the hidden volume does not overlap the outer volume.")); + } + else if (AvailableDiskSpace) { // caller requesting maximum size - // we use maxVolumeSize because it is guaranteed to be less of equal to AvailableDiskSpace + // we use maxVolumeSize because it is guaranteed to be less or equal to AvailableDiskSpace for outer volumes options->Size = maxVolumeSize; } else |