This commit is contained in:
DavidXanatos 2022-06-08 11:53:59 +02:00
parent e806da601b
commit 2859471549
2 changed files with 28 additions and 24 deletions

View File

@ -247,7 +247,7 @@ _FX BOOLEAN AdvApi_Init(HMODULE module)
// only hook SetSecurityInfo if this is Chrome. Outlook 2013 uses delayed loading and will cause infinite callbacks // only hook SetSecurityInfo if this is Chrome. Outlook 2013 uses delayed loading and will cause infinite callbacks
// Starting with Win 10, we only want to hook ntmarta!SetSecurityInfo. Do NOT hook advapi!SetSecurityInfo. Delay loading for advapi will cause infinite recursion. // Starting with Win 10, we only want to hook ntmarta!SetSecurityInfo. Do NOT hook advapi!SetSecurityInfo. Delay loading for advapi will cause infinite recursion.
// Note: the infinite recursion issue has been resolved int 5.43 // Note: the infinite recursion issue has been resolved int 5.43
if ((Dll_ImageType == DLL_IMAGE_GOOGLE_CHROME) || (Dll_ImageType == DLL_IMAGE_ACROBAT_READER)) { if ((Dll_ImageType == DLL_IMAGE_GOOGLE_CHROME) || (Dll_ImageType == DLL_IMAGE_ACROBAT_READER) || Config_GetSettingsForImageName_bool(L"UseSbieDeskHack", FALSE)) {
SetSecurityInfo = __sys_SetSecurityInfo; SetSecurityInfo = __sys_SetSecurityInfo;
GetSecurityInfo = __sys_GetSecurityInfo; GetSecurityInfo = __sys_GetSecurityInfo;
SBIEDLL_HOOK(AdvApi_, SetSecurityInfo); SBIEDLL_HOOK(AdvApi_, SetSecurityInfo);
@ -730,7 +730,7 @@ _FX BOOLEAN Ntmarta_Init(HMODULE module)
#define GETPROC2(x,s) __sys_Ntmarta_##x##s = (P_##x) Ldr_GetProcAddrNew(DllName_ntmarta, L#x L#s,#x #s); #define GETPROC2(x,s) __sys_Ntmarta_##x##s = (P_##x) Ldr_GetProcAddrNew(DllName_ntmarta, L#x L#s,#x #s);
GETPROC2(GetSecurityInfo, ); GETPROC2(GetSecurityInfo, );
if ((Dll_ImageType == DLL_IMAGE_GOOGLE_CHROME) || (Dll_ImageType == DLL_IMAGE_ACROBAT_READER)) { if ((Dll_ImageType == DLL_IMAGE_GOOGLE_CHROME) || (Dll_ImageType == DLL_IMAGE_ACROBAT_READER) || Config_GetSettingsForImageName_bool(L"UseSbieDeskHack", FALSE)) {
GetSecurityInfo = __sys_Ntmarta_GetSecurityInfo; GetSecurityInfo = __sys_Ntmarta_GetSecurityInfo;
if (GetSecurityInfo) if (GetSecurityInfo)

View File

@ -578,18 +578,22 @@ _FX HDESK Gui_OpenDesktopA(
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
//Gui_CreateWindowStationW //Gui_CreateWindowStationW
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
extern HANDLE Sandboxie_WinSta;
_FX HANDLE Gui_CreateWindowStationW (void *lpwinsta, DWORD dwFlags, ACCESS_MASK dwDesiredAccess, LPSECURITY_ATTRIBUTES lpsa) {
_FX HANDLE Gui_CreateWindowStationW (void *lpwinsta, DWORD dwFlags, ACCESS_MASK dwDesiredAccess, LPSECURITY_ATTRIBUTES lpsa)
{
HANDLE myHandle = 0; HANDLE myHandle = 0;
myHandle = __sys_CreateWindowStationW(lpwinsta, dwFlags, dwDesiredAccess, lpsa); myHandle = __sys_CreateWindowStationW(lpwinsta, dwFlags, dwDesiredAccess, lpsa);
if (!myHandle) { if (myHandle)
if(Sandboxie_WinSta) return myHandle;
return Sandboxie_WinSta;
SbieApi_Log(2205, L"CreateWindowStation"); extern HANDLE Sandboxie_WinSta;
} if(Sandboxie_WinSta && ((Dll_ImageType == DLL_IMAGE_GOOGLE_CHROME) || (Dll_ImageType == DLL_IMAGE_MOZILLA_FIREFOX) || Config_GetSettingsForImageName_bool(L"UseSbieWndStation", TRUE)))
return myHandle; return Sandboxie_WinSta;
SbieApi_Log(2205, L"CreateWindowStation");
return 0;
} }
@ -598,22 +602,26 @@ _FX HANDLE Gui_CreateWindowStationW (void *lpwinsta, DWORD dwFlags, ACCESS_MASK
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
_FX HANDLE Gui_CreateWindowStationA (void *lpwinsta, DWORD dwFlags, ACCESS_MASK dwDesiredAccess, LPSECURITY_ATTRIBUTES lpsa) { _FX HANDLE Gui_CreateWindowStationA (void *lpwinsta, DWORD dwFlags, ACCESS_MASK dwDesiredAccess, LPSECURITY_ATTRIBUTES lpsa)
{
HANDLE myHandle = 0; HANDLE myHandle = 0;
myHandle = __sys_CreateWindowStationA(lpwinsta, dwFlags, dwDesiredAccess, lpsa); myHandle = __sys_CreateWindowStationA(lpwinsta, dwFlags, dwDesiredAccess, lpsa);
if (!myHandle) { if (myHandle)
if(Sandboxie_WinSta) return myHandle;
return Sandboxie_WinSta;
SbieApi_Log(2205, L"CreateWindowStation"); extern HANDLE Sandboxie_WinSta;
} if(Sandboxie_WinSta && ((Dll_ImageType == DLL_IMAGE_GOOGLE_CHROME) || (Dll_ImageType == DLL_IMAGE_MOZILLA_FIREFOX) || Config_GetSettingsForImageName_bool(L"UseSbieWndStation", TRUE)))
return myHandle; return Sandboxie_WinSta;
SbieApi_Log(2205, L"CreateWindowStation");
return 0;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Gui_CreateDesktopW // Gui_CreateDesktopW
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
extern HANDLE Sandboxie_Desktop;
_FX HDESK Gui_CreateDesktopW( _FX HDESK Gui_CreateDesktopW(
void *lpszDesktop, void *lpszDevice, void *DevMode, ULONG dwFlags, void *lpszDesktop, void *lpszDevice, void *DevMode, ULONG dwFlags,
@ -625,7 +633,7 @@ _FX HDESK Gui_CreateDesktopW(
if (rc) if (rc)
return rc; return rc;
if (!Config_GetSettingsForImageName_bool(L"UseSbieWndStation", TRUE) && (Dll_ImageType != DLL_IMAGE_GOOGLE_CHROME) && (Dll_ImageType != DLL_IMAGE_MOZILLA_FIREFOX)) if ((Dll_ImageType == DLL_IMAGE_GOOGLE_CHROME) || (Dll_ImageType == DLL_IMAGE_ACROBAT_READER) || Config_GetSettingsForImageName_bool(L"UseSbieDeskHack", FALSE))
{ {
//Call the system CreateDesktopW without a security context. //Call the system CreateDesktopW without a security context.
//This works in tandem with the Ntmarta_GetSecurityInfo hook (see in advapi.c). //This works in tandem with the Ntmarta_GetSecurityInfo hook (see in advapi.c).
@ -639,8 +647,6 @@ _FX HDESK Gui_CreateDesktopW(
return rc; return rc;
} }
if (Sandboxie_Desktop)
return Sandboxie_Desktop;
SbieApi_Log(2205, L"CreateDesktop"); SbieApi_Log(2205, L"CreateDesktop");
return CreateEvent(NULL, FALSE, FALSE, NULL); return CreateEvent(NULL, FALSE, FALSE, NULL);
} }
@ -661,15 +667,13 @@ _FX HDESK Gui_CreateDesktopA(
if (rc) if (rc)
return rc; return rc;
if (!Config_GetSettingsForImageName_bool(L"UseSbieWndStation", TRUE) && (Dll_ImageType != DLL_IMAGE_GOOGLE_CHROME) && (Dll_ImageType != DLL_IMAGE_MOZILLA_FIREFOX)) if ((Dll_ImageType == DLL_IMAGE_GOOGLE_CHROME) || (Dll_ImageType == DLL_IMAGE_ACROBAT_READER) || Config_GetSettingsForImageName_bool(L"UseSbieDeskHack", FALSE))
{ {
rc = __sys_CreateDesktopA(lpszDesktop, NULL, NULL, dwFlags, dwDesiredAccess, NULL); rc = __sys_CreateDesktopA(lpszDesktop, NULL, NULL, dwFlags, dwDesiredAccess, NULL);
if (rc) if (rc)
return rc; return rc;
} }
if (Sandboxie_Desktop)
return Sandboxie_Desktop;
SbieApi_Log(2205, L"CreateDesktop"); SbieApi_Log(2205, L"CreateDesktop");
return CreateEvent(NULL, FALSE, FALSE, NULL); return CreateEvent(NULL, FALSE, FALSE, NULL);
} }