1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2025-11-11 11:08:02 -06:00

Add Option to Enable/Disable Screen Capture (#1418)

Veracrypt currently appears in screenshots and screen captures,
which can unintentionally expose sensitive information, such as
the fact that Veracrypt is running or the location of your volumes.

Both Windows and macOS offer mechanisms to exclude specific windows
from being captured. While not foolproof, this is a useful preventative
measure. The method is a no-op for Linux/FreeBSD.

For more details on the wxWidgets API, see:
https://docs.wxwidgets.org/3.2/classwx_top_level_window.html#a337b9cec62b0cbd3b1b1545a83270f64
This commit is contained in:
Deniz Türkoglu
2024-09-17 08:05:21 +10:00
committed by GitHub
parent eb0eec7b39
commit e0a46f6b2b
6 changed files with 22 additions and 0 deletions

View File

@@ -29,6 +29,7 @@ namespace VeraCrypt
ArgPim (-1), ArgPim (-1),
ArgSize (0), ArgSize (0),
ArgVolumeType (VolumeType::Unknown), ArgVolumeType (VolumeType::Unknown),
ArgAllowScreencapture (false),
ArgDisableFileSizeCheck (false), ArgDisableFileSizeCheck (false),
ArgUseLegacyPassword (false), ArgUseLegacyPassword (false),
#if defined(TC_LINUX ) || defined (TC_FREEBSD) #if defined(TC_LINUX ) || defined (TC_FREEBSD)
@@ -41,6 +42,7 @@ namespace VeraCrypt
parser.SetSwitchChars (L"-"); parser.SetSwitchChars (L"-");
parser.AddSwitch (L"", L"allow-screencapture", _("Allow window to be included in screenshots and screen captures (Windows/MacOS)"));
parser.AddOption (L"", L"auto-mount", _("Auto mount device-hosted/favorite volumes")); parser.AddOption (L"", L"auto-mount", _("Auto mount device-hosted/favorite volumes"));
parser.AddSwitch (L"", L"backup-headers", _("Backup volume headers")); parser.AddSwitch (L"", L"backup-headers", _("Backup volume headers"));
parser.AddSwitch (L"", L"background-task", _("Start Background Task")); parser.AddSwitch (L"", L"background-task", _("Start Background Task"));
@@ -142,6 +144,8 @@ namespace VeraCrypt
ArgMountOptions = Preferences.DefaultMountOptions; ArgMountOptions = Preferences.DefaultMountOptions;
} }
ArgAllowScreencapture = parser.Found (L"allow-screencapture");
// Commands // Commands
if (parser.Found (L"auto-mount", &str)) if (parser.Found (L"auto-mount", &str))
{ {

View File

@@ -84,6 +84,7 @@ namespace VeraCrypt
VolumeInfoList ArgVolumes; VolumeInfoList ArgVolumes;
VolumeType::Enum ArgVolumeType; VolumeType::Enum ArgVolumeType;
shared_ptr<SecureBuffer> ArgTokenPin; shared_ptr<SecureBuffer> ArgTokenPin;
bool ArgAllowScreencapture;
bool ArgDisableFileSizeCheck; bool ArgDisableFileSizeCheck;
bool ArgUseLegacyPassword; bool ArgUseLegacyPassword;
#if defined(TC_LINUX ) || defined (TC_FREEBSD) #if defined(TC_LINUX ) || defined (TC_FREEBSD)

View File

@@ -84,6 +84,7 @@ namespace VeraCrypt
InitTaskBarIcon(); InitTaskBarIcon();
InitEvents(); InitEvents();
InitMessageFilter(); InitMessageFilter();
InitWindowPrivacy();
if (!GetPreferences().SecurityTokenModule.IsEmpty() && !SecurityToken::IsInitialized()) if (!GetPreferences().SecurityTokenModule.IsEmpty() && !SecurityToken::IsInitialized())
{ {
@@ -470,6 +471,12 @@ namespace VeraCrypt
#endif #endif
} }
void MainFrame::InitWindowPrivacy ()
{
Gui->SetContentProtection(!CmdLine->ArgAllowScreencapture);
}
void MainFrame::InitPreferences () void MainFrame::InitPreferences ()
{ {
try try

View File

@@ -84,6 +84,7 @@ namespace VeraCrypt
void InitMessageFilter (); void InitMessageFilter ();
void InitPreferences (); void InitPreferences ();
void InitTaskBarIcon (); void InitTaskBarIcon ();
void InitWindowPrivacy();
bool IsFreeSlotSelected () const { return SlotListCtrl->GetSelectedItemCount() == 1 && Gui->GetListCtrlSubItemText (SlotListCtrl, SelectedItemIndex, ColumnPath).empty(); } bool IsFreeSlotSelected () const { return SlotListCtrl->GetSelectedItemCount() == 1 && Gui->GetListCtrlSubItemText (SlotListCtrl, SelectedItemIndex, ColumnPath).empty(); }
bool IsMountedSlotSelected () const { return SlotListCtrl->GetSelectedItemCount() == 1 && !Gui->GetListCtrlSubItemText (SlotListCtrl, SelectedItemIndex, ColumnPath).empty(); } bool IsMountedSlotSelected () const { return SlotListCtrl->GetSelectedItemCount() == 1 && !Gui->GetListCtrlSubItemText (SlotListCtrl, SelectedItemIndex, ColumnPath).empty(); }
void LoadFavoriteVolumes (); void LoadFavoriteVolumes ();

View File

@@ -1874,6 +1874,14 @@ namespace VeraCrypt
listCtrl->SetMinSize (wxSize (width, listCtrl->GetMinSize().GetHeight())); listCtrl->SetMinSize (wxSize (width, listCtrl->GetMinSize().GetHeight()));
} }
void GraphicUserInterface::SetContentProtection (bool enable) const
{
#if defined(TC_WINDOWS) || defined(TC_MACOSX)
GetActiveWindow()->SetContentProtection(enable ? wxCONTENT_PROTECTION_ENABLED : wxCONTENT_PROTECTION_NONE);
#endif
}
void GraphicUserInterface::ShowErrorTopMost (const wxString &message) const void GraphicUserInterface::ShowErrorTopMost (const wxString &message) const
{ {
ShowMessage (message, wxOK | wxICON_ERROR, true); ShowMessage (message, wxOK | wxICON_ERROR, true);

View File

@@ -86,6 +86,7 @@ namespace VeraCrypt
virtual void SetListCtrlColumnWidths (wxListCtrl *listCtrl, list <int> columnWidthPermilles, bool hasVerticalScrollbar = true) const; virtual void SetListCtrlColumnWidths (wxListCtrl *listCtrl, list <int> columnWidthPermilles, bool hasVerticalScrollbar = true) const;
virtual void SetListCtrlHeight (wxListCtrl *listCtrl, size_t rowCount) const; virtual void SetListCtrlHeight (wxListCtrl *listCtrl, size_t rowCount) const;
virtual void SetListCtrlWidth (wxListCtrl *listCtrl, size_t charCount, bool hasVerticalScrollbar = true) const; virtual void SetListCtrlWidth (wxListCtrl *listCtrl, size_t charCount, bool hasVerticalScrollbar = true) const;
virtual void SetContentProtection(bool enable) const;
virtual void ShowErrorTopMost (char *langStringId) const { ShowErrorTopMost (LangString[langStringId]); } virtual void ShowErrorTopMost (char *langStringId) const { ShowErrorTopMost (LangString[langStringId]); }
virtual void ShowErrorTopMost (const wxString &message) const; virtual void ShowErrorTopMost (const wxString &message) const;
virtual void ShowInfoTopMost (char *langStringId) const { ShowInfoTopMost (LangString[langStringId]); } virtual void ShowInfoTopMost (char *langStringId) const { ShowInfoTopMost (LangString[langStringId]); }