mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
Compare commits
2 commits
43764268de
...
7eb9a6f16b
Author | SHA1 | Date | |
---|---|---|---|
|
7eb9a6f16b | ||
|
be5b590cfb |
11 changed files with 219 additions and 2413 deletions
|
@ -13,7 +13,9 @@
|
||||||
[cmdletbinding()]
|
[cmdletbinding()]
|
||||||
param(
|
param(
|
||||||
# (Optional) The path to the .p7b to process
|
# (Optional) The path to the .p7b to process
|
||||||
[string]$BinaryFilePath = "SkuSiPolicyp.p7b"
|
[string]$BinaryFilePath = "SkuSiPolicy.p7b",
|
||||||
|
# (Optional) Output the straight values
|
||||||
|
[switch]$Raw = $false
|
||||||
)
|
)
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -55,7 +57,7 @@ try {
|
||||||
$ContentType = $null
|
$ContentType = $null
|
||||||
try {
|
try {
|
||||||
$ContentType = [Security.Cryptography.Pkcs.ContentInfo]::GetContentType($CIPolicyBytes)
|
$ContentType = [Security.Cryptography.Pkcs.ContentInfo]::GetContentType($CIPolicyBytes)
|
||||||
} catch { Write-Host "WTF!" }
|
} catch { }
|
||||||
|
|
||||||
# Check for PKCS#7 ASN.1 SignedData type
|
# Check for PKCS#7 ASN.1 SignedData type
|
||||||
if ($ContentType -and $ContentType.Value -eq '1.2.840.113549.1.7.2') {
|
if ($ContentType -and $ContentType.Value -eq '1.2.840.113549.1.7.2') {
|
||||||
|
@ -183,14 +185,17 @@ try {
|
||||||
# Sort the array and remove duplicates
|
# Sort the array and remove duplicates
|
||||||
$HashArray.Sort()
|
$HashArray.Sort()
|
||||||
$HashArray = $HashArray | Select-Object -Unique
|
$HashArray = $HashArray | Select-Object -Unique
|
||||||
# Output as C array data
|
|
||||||
foreach ($HashStr in $HashArray) {
|
foreach ($HashStr in $HashArray) {
|
||||||
$HashChars = $HashStr.ToCharArray()
|
if ($Raw) {
|
||||||
$Line = "`t"
|
Write-Output $HashStr
|
||||||
for ($i = 0; $i -lt $Pe256HashLength; $i++) {
|
} else {
|
||||||
$Line += "0x" + $HashChars[2 * $i] + $HashChars[2 * $i + 1] + ", "
|
$HashChars = $HashStr.ToCharArray()
|
||||||
|
$Line = "`t"
|
||||||
|
for ($i = 0; $i -lt $Pe256HashLength; $i++) {
|
||||||
|
$Line += "0x" + $HashChars[2 * $i] + $HashChars[2 * $i + 1] + ", "
|
||||||
|
}
|
||||||
|
Write-Output $Line
|
||||||
}
|
}
|
||||||
Write-Output $Line
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
12
src/format.c
12
src/format.c
|
@ -1908,6 +1908,18 @@ DWORD WINAPI FormatThread(void* param)
|
||||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_CANT_PATCH);
|
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_CANT_PATCH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if ((target_type == TT_UEFI) && IS_WINDOWS_1X(img_report) && pe256ssp_size > 0) {
|
||||||
|
// Copy this system's SkuSiPolicy.p7b to the target drive so that UEFI bootloaders
|
||||||
|
// revoked by Windows through WDAC policy do get flagged as revoked.
|
||||||
|
char src[MAX_PATH], dst[MAX_PATH];
|
||||||
|
struct __stat64 stat64 = { 0 };
|
||||||
|
static_sprintf(src, "%s\\SecureBootUpdates\\SKUSiPolicy.p7b", system_dir);
|
||||||
|
static_sprintf(dst, "%s\\efi\\microsoft\\boot\\SKUSiPolicy.p7b", drive_name);
|
||||||
|
if ((_stat64U(dst, &stat64) != 0) && (_stat64U(src, &stat64) == 0)) {
|
||||||
|
uprintf("Copying: %s (%s) (from %s)", dst, SizeToHumanReadable(stat64.st_size, FALSE, FALSE), src);
|
||||||
|
if (!CopyFileU(src, dst, TRUE))
|
||||||
|
uprintf(" Error writing file: %s", WindowsErrorString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( (target_type == TT_BIOS) && HAS_WINPE(img_report) ) {
|
if ( (target_type == TT_BIOS) && HAS_WINPE(img_report) ) {
|
||||||
// Apply WinPE fixup
|
// Apply WinPE fixup
|
||||||
|
|
|
@ -123,6 +123,8 @@ DWORD read_size[NUM_BUFFERS];
|
||||||
BOOL enable_extra_hashes = FALSE;
|
BOOL enable_extra_hashes = FALSE;
|
||||||
uint8_t ALIGNED(64) buffer[NUM_BUFFERS][BUFFER_SIZE];
|
uint8_t ALIGNED(64) buffer[NUM_BUFFERS][BUFFER_SIZE];
|
||||||
extern int default_thread_priority;
|
extern int default_thread_priority;
|
||||||
|
uint32_t pe256ssp_size = 0;
|
||||||
|
uint8_t* pe256ssp = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Rotate 32 or 64 bit integers by n bytes.
|
* Rotate 32 or 64 bit integers by n bytes.
|
||||||
|
@ -2117,14 +2119,14 @@ BOOL IsFileInDB(const char* path)
|
||||||
|
|
||||||
int IsUefiBootloaderRevoked(const char* path)
|
int IsUefiBootloaderRevoked(const char* path)
|
||||||
{
|
{
|
||||||
int i;
|
uint32_t i;
|
||||||
uint8_t hash[SHA256_HASHSIZE];
|
uint8_t hash[SHA256_HASHSIZE];
|
||||||
if (!PE256File(path, hash))
|
if (!PE256File(path, hash))
|
||||||
return -1;
|
return -1;
|
||||||
for (i = 0; i < ARRAYSIZE(pe256dbx); i += SHA256_HASHSIZE)
|
for (i = 0; i < ARRAYSIZE(pe256dbx); i += SHA256_HASHSIZE)
|
||||||
if (memcmp(hash, &pe256dbx[i], SHA256_HASHSIZE) == 0)
|
if (memcmp(hash, &pe256dbx[i], SHA256_HASHSIZE) == 0)
|
||||||
return 1;
|
return 1;
|
||||||
for (i = 0; i < ARRAYSIZE(pe256ssp); i += SHA256_HASHSIZE)
|
for (i = 0; i < pe256ssp_size * SHA256_HASHSIZE; i += SHA256_HASHSIZE)
|
||||||
if (memcmp(hash, &pe256ssp[i], SHA256_HASHSIZE) == 0)
|
if (memcmp(hash, &pe256ssp[i], SHA256_HASHSIZE) == 0)
|
||||||
return 2;
|
return 2;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1274,7 +1274,6 @@ out:
|
||||||
to_windows_path(symlinked_syslinux);
|
to_windows_path(symlinked_syslinux);
|
||||||
uprintf("Created: %s\\%s → %s", symlinked_syslinux, efi_cfg_name[i], &path[2]);
|
uprintf("Created: %s\\%s → %s", symlinked_syslinux, efi_cfg_name[i], &path[2]);
|
||||||
to_unix_path(symlinked_syslinux);
|
to_unix_path(symlinked_syslinux);
|
||||||
fd = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (HAS_BOOTMGR(img_report) && enable_ntfs_compression) {
|
} else if (HAS_BOOTMGR(img_report) && enable_ntfs_compression) {
|
||||||
|
|
|
@ -344,23 +344,19 @@ static __inline int DrawTextU(HDC hDC, LPCSTR lpText, int nCount, LPRECT lpRect,
|
||||||
static __inline int GetWindowTextU(HWND hWnd, char* lpString, int nMaxCount)
|
static __inline int GetWindowTextU(HWND hWnd, char* lpString, int nMaxCount)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
DWORD err = ERROR_INVALID_DATA;
|
DWORD err = ERROR_INVALID_PARAMETER;
|
||||||
if (nMaxCount < 0)
|
if (lpString == NULL || nMaxCount < 1)
|
||||||
return 0;
|
goto out;
|
||||||
// Handle the empty string as GetWindowTextW() returns 0 then
|
// Handle the empty string as GetWindowTextW() returns 0 then
|
||||||
if ((lpString != NULL) && (nMaxCount > 0))
|
lpString[0] = 0;
|
||||||
lpString[0] = 0;
|
|
||||||
// coverity[returned_null]
|
|
||||||
walloc(lpString, nMaxCount);
|
walloc(lpString, nMaxCount);
|
||||||
ret = GetWindowTextW(hWnd, wlpString, nMaxCount);
|
ret = GetWindowTextW(hWnd, wlpString, nMaxCount);
|
||||||
err = GetLastError();
|
err = GetLastError();
|
||||||
// coverity[var_deref_model]
|
if ((ret != 0) && ((ret = wchar_to_utf8_no_alloc(wlpString, lpString, nMaxCount)) == 0))
|
||||||
if ( (ret != 0) && ((ret = wchar_to_utf8_no_alloc(wlpString, lpString, nMaxCount)) == 0) ) {
|
|
||||||
err = GetLastError();
|
err = GetLastError();
|
||||||
}
|
|
||||||
wfree(lpString);
|
wfree(lpString);
|
||||||
if (lpString != NULL)
|
lpString[nMaxCount - 1] = 0;
|
||||||
lpString[nMaxCount - 1] = 0;
|
out:
|
||||||
SetLastError(err);
|
SetLastError(err);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
10
src/parser.c
10
src/parser.c
|
@ -800,10 +800,8 @@ out:
|
||||||
fclose(fd_in);
|
fclose(fd_in);
|
||||||
fd_in = NULL;
|
fd_in = NULL;
|
||||||
}
|
}
|
||||||
if (fd_out != NULL) {
|
if (fd_out != NULL)
|
||||||
fclose(fd_out);
|
fclose(fd_out);
|
||||||
fd_out = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If an insertion occurred, delete existing file and use the new one
|
// If an insertion occurred, delete existing file and use the new one
|
||||||
if (ret != NULL) {
|
if (ret != NULL) {
|
||||||
|
@ -821,8 +819,10 @@ out:
|
||||||
} else {
|
} else {
|
||||||
uprintf("Could not write '%s' - original file has been left unmodified\n", filename);
|
uprintf("Could not write '%s' - original file has been left unmodified\n", filename);
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
if (fd_in != NULL) fclose(fd_in);
|
if (fd_in != NULL)
|
||||||
if (fd_out != NULL) fclose(fd_out);
|
fclose(fd_in);
|
||||||
|
if (fd_out != NULL)
|
||||||
|
fclose(fd_out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (wtmpname != NULL)
|
if (wtmpname != NULL)
|
||||||
|
|
165
src/pki.c
165
src/pki.c
|
@ -48,18 +48,62 @@ const char* cert_name[3] = { "Akeo Consulting", "Akeo Systems", "Pete Batard" };
|
||||||
const char* cert_country = "IE";
|
const char* cert_country = "IE";
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LPWSTR lpszProgramName;
|
LPWSTR lpszProgramName;
|
||||||
LPWSTR lpszPublisherLink;
|
LPWSTR lpszPublisherLink;
|
||||||
LPWSTR lpszMoreInfoLink;
|
LPWSTR lpszMoreInfoLink;
|
||||||
} SPROG_PUBLISHERINFO, *PSPROG_PUBLISHERINFO;
|
} SPROG_PUBLISHERINFO, *PSPROG_PUBLISHERINFO;
|
||||||
|
|
||||||
// https://msdn.microsoft.com/en-us/library/ee442238.aspx
|
// https://msdn.microsoft.com/en-us/library/ee442238.aspx
|
||||||
typedef struct {
|
typedef struct {
|
||||||
BLOBHEADER BlobHeader;
|
BLOBHEADER BlobHeader;
|
||||||
RSAPUBKEY RsaHeader;
|
RSAPUBKEY RsaHeader;
|
||||||
BYTE Modulus[256]; // 2048 bit modulus
|
BYTE Modulus[256]; // 2048 bit modulus
|
||||||
} RSA_2048_PUBKEY;
|
} RSA_2048_PUBKEY;
|
||||||
|
|
||||||
|
// For PKCS7 WDAC Code Integrity processing
|
||||||
|
#define PE256_HASHSIZE 32
|
||||||
|
|
||||||
|
const GUID SKU_CODE_INTEGRITY_POLICY = { 0x976d12c8, 0xcb9f, 0x4730, { 0xbe, 0x52, 0x54, 0x60, 0x08, 0x43, 0x23, 0x8e} };
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
WORD Nano;
|
||||||
|
WORD Micro;
|
||||||
|
WORD Minor;
|
||||||
|
WORD Major;
|
||||||
|
} CIVersion;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
DWORD PolicyFormatVersion;
|
||||||
|
GUID PolicyTypeGUID;
|
||||||
|
GUID PlatformGUID;
|
||||||
|
DWORD OptionFlags;
|
||||||
|
DWORD EKURuleEntryCount;
|
||||||
|
DWORD FileRuleEntryCount;
|
||||||
|
DWORD SignerRuleEntryCount;
|
||||||
|
DWORD SignerScenarioEntryCount;
|
||||||
|
CIVersion PolicyVersion;
|
||||||
|
DWORD HeaderLength;
|
||||||
|
} CIHeader;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
DWORD Type;
|
||||||
|
DWORD FileNameLength;
|
||||||
|
WCHAR FileName[0];
|
||||||
|
} CIFileRuleHeader;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
DWORD Unknown;
|
||||||
|
CIVersion Version;
|
||||||
|
DWORD HashLength;
|
||||||
|
BYTE Hash[0];
|
||||||
|
} CIFileRuleData;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CI_DENY = 0,
|
||||||
|
CI_ALLOW,
|
||||||
|
CI_FILE_ATTRIBUTES,
|
||||||
|
};
|
||||||
|
|
||||||
// The RSA public key modulus for the private key we use to sign the files on the server.
|
// The RSA public key modulus for the private key we use to sign the files on the server.
|
||||||
// NOTE 1: This openssl modulus must be *REVERSED* to be usable with Microsoft APIs
|
// NOTE 1: This openssl modulus must be *REVERSED* to be usable with Microsoft APIs
|
||||||
// NOTE 2: Also, this modulus is 2052 bits, and not 2048, because openssl adds an extra
|
// NOTE 2: Also, this modulus is 2052 bits, and not 2048, because openssl adds an extra
|
||||||
|
@ -747,3 +791,112 @@ out:
|
||||||
CryptReleaseContext(hProv, 0);
|
CryptReleaseContext(hProv, 0);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL ParseSKUSiPolicy(void)
|
||||||
|
{
|
||||||
|
char path[MAX_PATH];
|
||||||
|
wchar_t* wpath = NULL;
|
||||||
|
BOOL r = FALSE;
|
||||||
|
DWORD i, dwEncoding, dwContentType, dwFormatType;
|
||||||
|
DWORD dwPolicySize = 0, dwBaseIndex = 0, dwSizeCount;
|
||||||
|
HCRYPTMSG hMsg = NULL;
|
||||||
|
CRYPT_DATA_BLOB pkcsData = { 0 };
|
||||||
|
DWORD* pdwEkuRules;
|
||||||
|
BYTE* pbRule;
|
||||||
|
CIHeader* Header;
|
||||||
|
CIFileRuleHeader* FileRuleHeader;
|
||||||
|
CIFileRuleData* FileRuleData;
|
||||||
|
|
||||||
|
pe256ssp_size = 0;
|
||||||
|
safe_free(pe256ssp);
|
||||||
|
static_sprintf(path, "%s\\SecureBootUpdates\\SKUSiPolicy.p7b", system_dir);
|
||||||
|
wpath = utf8_to_wchar(path);
|
||||||
|
if (wpath == NULL)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
r = CryptQueryObject(CERT_QUERY_OBJECT_FILE, wpath, CERT_QUERY_CONTENT_FLAG_ALL,
|
||||||
|
CERT_QUERY_FORMAT_FLAG_ALL, 0, &dwEncoding, &dwContentType, &dwFormatType, NULL,
|
||||||
|
&hMsg, NULL);
|
||||||
|
if (!r || dwContentType != CERT_QUERY_CONTENT_PKCS7_SIGNED)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
r = CryptMsgGetParam(hMsg, CMSG_CONTENT_PARAM, 0, NULL, &pkcsData.cbData);
|
||||||
|
if (!r || pkcsData.cbData == 0) {
|
||||||
|
uprintf("ParseSKUSiPolicy: Failed to retreive CMSG_CONTENT_PARAM size: %s", WindowsErrorString());
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
pkcsData.pbData = malloc(pkcsData.cbData);
|
||||||
|
if (pkcsData.pbData == NULL)
|
||||||
|
goto out;
|
||||||
|
r = CryptMsgGetParam(hMsg, CMSG_CONTENT_PARAM, 0, pkcsData.pbData, &pkcsData.cbData);
|
||||||
|
if (!r) {
|
||||||
|
uprintf("ParseSKUSiPolicy: Failed to retreive CMSG_CONTENT_PARAM: %s", WindowsErrorString());
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now process the actual Security Policy content
|
||||||
|
if (pkcsData.pbData[0] == 4) {
|
||||||
|
dwPolicySize = pkcsData.pbData[1];
|
||||||
|
dwBaseIndex = 2;
|
||||||
|
if ((dwPolicySize & 0x80) == 0x80) {
|
||||||
|
dwSizeCount = dwPolicySize & 0x7F;
|
||||||
|
dwBaseIndex += dwSizeCount;
|
||||||
|
dwPolicySize = 0;
|
||||||
|
for (i = 0; i < dwSizeCount; i++) {
|
||||||
|
dwPolicySize = dwPolicySize << 8;
|
||||||
|
dwPolicySize = dwPolicySize | pkcsData.pbData[2 + i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sanity checks
|
||||||
|
Header = (CIHeader*)&pkcsData.pbData[dwBaseIndex];
|
||||||
|
if (Header->HeaderLength + sizeof(uint32_t) != sizeof(CIHeader)) {
|
||||||
|
uprintf("ParseSKUSiPolicy: Unexpected Code Integrity Header size (0x%02x)", Header->HeaderLength);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
if (!CompareGUID(&Header->PolicyTypeGUID, &SKU_CODE_INTEGRITY_POLICY)) {
|
||||||
|
uprintf("ParseSKUSiPolicy: Unexpected Policy Type GUID %s", GuidToString(&Header->PolicyTypeGUID));
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Skip the EKU Rules
|
||||||
|
pdwEkuRules = (DWORD*) &pkcsData.pbData[dwBaseIndex + sizeof(CIHeader)];
|
||||||
|
for (i = 0; i < Header->EKURuleEntryCount; i++)
|
||||||
|
pdwEkuRules = &pdwEkuRules[(*pdwEkuRules + (2 * sizeof(DWORD) - 1)) / sizeof(DWORD)];
|
||||||
|
|
||||||
|
// Process the Files Rules
|
||||||
|
pbRule = (BYTE*)pdwEkuRules;
|
||||||
|
pe256ssp = malloc(Header->FileRuleEntryCount * PE256_HASHSIZE);
|
||||||
|
if (pe256ssp == NULL)
|
||||||
|
goto out;
|
||||||
|
for (i = 0; i < Header->FileRuleEntryCount; i++) {
|
||||||
|
FileRuleHeader = (CIFileRuleHeader*)pbRule;
|
||||||
|
pbRule = &pbRule[sizeof(CIFileRuleHeader)];
|
||||||
|
if (FileRuleHeader->FileNameLength != 0) {
|
||||||
|
// uprintf("%S", FileRuleHeader->FileName);
|
||||||
|
pbRule = &pbRule[((FileRuleHeader->FileNameLength + sizeof(DWORD) - 1) / sizeof(DWORD)) * sizeof(DWORD)];
|
||||||
|
}
|
||||||
|
FileRuleData = (CIFileRuleData*)pbRule;
|
||||||
|
if (FileRuleData->HashLength > 0x80) {
|
||||||
|
uprintf("ParseSKUSiPolicy: Unexpected hash length for entry %d (0x%02x)", i, FileRuleData->HashLength);
|
||||||
|
// We're probably screwed, so bail out
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// We are only interested in 'DENY' type with PE256 hashes
|
||||||
|
if (FileRuleHeader->Type == CI_DENY && FileRuleData->HashLength == PE256_HASHSIZE) {
|
||||||
|
memcpy(&pe256ssp[pe256ssp_size * PE256_HASHSIZE], FileRuleData->Hash, PE256_HASHSIZE);
|
||||||
|
pe256ssp_size++;
|
||||||
|
}
|
||||||
|
pbRule = &pbRule[sizeof(CIFileRuleData) + ((FileRuleData->HashLength + sizeof(DWORD) - 1) / sizeof(DWORD)) * sizeof(DWORD)];
|
||||||
|
}
|
||||||
|
|
||||||
|
r = TRUE;
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (hMsg != NULL)
|
||||||
|
CryptMsgClose(hMsg);
|
||||||
|
free(pkcsData.pbData);
|
||||||
|
free(wpath);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
17
src/rufus.c
17
src/rufus.c
|
@ -2061,6 +2061,10 @@ static void InitDialog(HWND hDlg)
|
||||||
"one. Because of this, some messages will only be displayed in English.", selected_locale->txt[1]);
|
"one. Because of this, some messages will only be displayed in English.", selected_locale->txt[1]);
|
||||||
uprintf("If you think you can help update this translation, please e-mail the author of this application");
|
uprintf("If you think you can help update this translation, please e-mail the author of this application");
|
||||||
}
|
}
|
||||||
|
if (ParseSKUSiPolicy())
|
||||||
|
uprintf("Found %d revoked UEFI bootloaders from this system's SKUSiPolicy", pe256ssp_size);
|
||||||
|
else
|
||||||
|
uprintf("WARNING: Could not parse this system's SkuSiPolicy");
|
||||||
// Detect and report system limitations
|
// Detect and report system limitations
|
||||||
if (ReadRegistryKeyBool(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Policies\\Microsoft\\FVE"))
|
if (ReadRegistryKeyBool(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Policies\\Microsoft\\FVE"))
|
||||||
uprintf("WARNING: This system has a policy set to prevent write access to FIXED drives not using BitLocker");
|
uprintf("WARNING: This system has a policy set to prevent write access to FIXED drives not using BitLocker");
|
||||||
|
@ -3885,17 +3889,7 @@ extern int TestHashes(void);
|
||||||
// Ctrl-T => Alternate Test mode that doesn't require a full rebuild
|
// Ctrl-T => Alternate Test mode that doesn't require a full rebuild
|
||||||
if ((ctrl_without_focus || ((GetKeyState(VK_CONTROL) & 0x8000) && (msg.message == WM_KEYDOWN)))
|
if ((ctrl_without_focus || ((GetKeyState(VK_CONTROL) & 0x8000) && (msg.message == WM_KEYDOWN)))
|
||||||
&& (msg.wParam == 'T')) {
|
&& (msg.wParam == 'T')) {
|
||||||
uint8_t sum[32] = { 0 };
|
TestHashes();
|
||||||
PE256File("C:\\Projects\\rufus\\winload_win10_1511.exe", sum);
|
|
||||||
DumpBufferHex(sum, 32);
|
|
||||||
|
|
||||||
int aya = IsUefiBootloaderRevoked("C:\\Projects\\WDACTools\\en_windows_10_multiple_editions_version_1607_updated_jan_2017_x64_dvd_9714399.iso\\efi\\boot\\bootx64.efi");
|
|
||||||
if (aya > 0) {
|
|
||||||
MessageBoxExU(hMainDialog, lmprintf(MSG_339,
|
|
||||||
(aya == 1) ? lmprintf(MSG_340) : lmprintf(MSG_341, "Error code: 0xc0000428")),
|
|
||||||
lmprintf(MSG_338), MB_ICONWARNING | MB_IS_RTL, selected_langid);
|
|
||||||
}
|
|
||||||
// TestHashes();
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -4236,6 +4230,7 @@ out:
|
||||||
safe_free(grub2_buf);
|
safe_free(grub2_buf);
|
||||||
safe_free(fido_url);
|
safe_free(fido_url);
|
||||||
safe_free(fido_script);
|
safe_free(fido_script);
|
||||||
|
safe_free(pe256ssp);
|
||||||
if (argv != NULL) {
|
if (argv != NULL) {
|
||||||
for (i=0; i<argc; i++) safe_free(argv[i]);
|
for (i=0; i<argc; i++) safe_free(argv[i]);
|
||||||
safe_free(argv);
|
safe_free(argv);
|
||||||
|
|
14
src/rufus.h
14
src/rufus.h
|
@ -577,16 +577,17 @@ extern RUFUS_UPDATE update;
|
||||||
extern RUFUS_IMG_REPORT img_report;
|
extern RUFUS_IMG_REPORT img_report;
|
||||||
extern HINSTANCE hMainInstance;
|
extern HINSTANCE hMainInstance;
|
||||||
extern HWND hMainDialog, hLogDialog, hStatus, hDeviceList, hCapacity, hImageOption;
|
extern HWND hMainDialog, hLogDialog, hStatus, hDeviceList, hCapacity, hImageOption;
|
||||||
extern HWND hPartitionScheme, hTargetSystem, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog;
|
extern HWND hPartitionScheme, hTargetSystem, hFileSystem, hClusterSize, hLabel, hBootType;
|
||||||
extern HWND hInfo, hProgress, hDiskID;
|
extern HWND hNBPasses, hLog, hInfo, hProgress, hDiskID;
|
||||||
extern WORD selected_langid;
|
extern WORD selected_langid;
|
||||||
extern DWORD FormatStatus, DownloadStatus, MainThreadId, LastWriteError;
|
extern DWORD FormatStatus, DownloadStatus, MainThreadId, LastWriteError;
|
||||||
extern BOOL use_own_c32[NB_OLD_C32], detect_fakes, op_in_progress, right_to_left_mode;
|
extern BOOL use_own_c32[NB_OLD_C32], detect_fakes, op_in_progress, right_to_left_mode;
|
||||||
extern BOOL allow_dual_uefi_bios, large_drive, usb_debug;
|
extern BOOL allow_dual_uefi_bios, large_drive, usb_debug;
|
||||||
extern int64_t iso_blocking_status;
|
extern uint8_t image_options, *pe256ssp;
|
||||||
extern uint8_t image_options;
|
|
||||||
extern uint16_t rufus_version[3], embedded_sl_version[2];
|
extern uint16_t rufus_version[3], embedded_sl_version[2];
|
||||||
|
extern uint32_t pe256ssp_size;
|
||||||
extern uint64_t persistence_size;
|
extern uint64_t persistence_size;
|
||||||
|
extern int64_t iso_blocking_status;
|
||||||
extern size_t ubuffer_pos;
|
extern size_t ubuffer_pos;
|
||||||
extern const int nb_steps[FS_MAX];
|
extern const int nb_steps[FS_MAX];
|
||||||
extern float fScale;
|
extern float fScale;
|
||||||
|
@ -594,8 +595,8 @@ extern windows_version_t WindowsVersion;
|
||||||
extern int dialog_showing, force_update, fs_type, boot_type, partition_type, target_type;
|
extern int dialog_showing, force_update, fs_type, boot_type, partition_type, target_type;
|
||||||
extern unsigned long syslinux_ldlinux_len[2];
|
extern unsigned long syslinux_ldlinux_len[2];
|
||||||
extern char ubuffer[UBUFFER_SIZE], embedded_sl_version_str[2][12];
|
extern char ubuffer[UBUFFER_SIZE], embedded_sl_version_str[2][12];
|
||||||
extern char szFolderPath[MAX_PATH], app_dir[MAX_PATH], temp_dir[MAX_PATH], system_dir[MAX_PATH], sysnative_dir[MAX_PATH];
|
extern char szFolderPath[MAX_PATH], app_dir[MAX_PATH], temp_dir[MAX_PATH], system_dir[MAX_PATH];
|
||||||
extern char app_data_dir[MAX_PATH], *image_path, *fido_url;
|
extern char sysnative_dir[MAX_PATH], app_data_dir[MAX_PATH], *image_path, *fido_url;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Shared prototypes
|
* Shared prototypes
|
||||||
|
@ -690,6 +691,7 @@ extern char* GetSignatureName(const char* path, const char* country_code, BOOL b
|
||||||
extern uint64_t GetSignatureTimeStamp(const char* path);
|
extern uint64_t GetSignatureTimeStamp(const char* path);
|
||||||
extern LONG ValidateSignature(HWND hDlg, const char* path);
|
extern LONG ValidateSignature(HWND hDlg, const char* path);
|
||||||
extern BOOL ValidateOpensslSignature(BYTE* pbBuffer, DWORD dwBufferLen, BYTE* pbSignature, DWORD dwSigLen);
|
extern BOOL ValidateOpensslSignature(BYTE* pbBuffer, DWORD dwBufferLen, BYTE* pbSignature, DWORD dwSigLen);
|
||||||
|
extern BOOL ParseSKUSiPolicy(void);
|
||||||
extern BOOL IsFontAvailable(const char* font_name);
|
extern BOOL IsFontAvailable(const char* font_name);
|
||||||
extern BOOL WriteFileWithRetry(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite,
|
extern BOOL WriteFileWithRetry(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite,
|
||||||
LPDWORD lpNumberOfBytesWritten, DWORD nNumRetries);
|
LPDWORD lpNumberOfBytesWritten, DWORD nNumRetries);
|
||||||
|
|
10
src/rufus.rc
10
src/rufus.rc
|
@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_ACCEPTFILES
|
EXSTYLE WS_EX_ACCEPTFILES
|
||||||
CAPTION "Rufus 4.2.2050"
|
CAPTION "Rufus 4.2.2052"
|
||||||
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
||||||
|
@ -392,8 +392,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 4,2,2050,0
|
FILEVERSION 4,2,2052,0
|
||||||
PRODUCTVERSION 4,2,2050,0
|
PRODUCTVERSION 4,2,2052,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -411,13 +411,13 @@ BEGIN
|
||||||
VALUE "Comments", "https://rufus.ie"
|
VALUE "Comments", "https://rufus.ie"
|
||||||
VALUE "CompanyName", "Akeo Consulting"
|
VALUE "CompanyName", "Akeo Consulting"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "4.2.2050"
|
VALUE "FileVersion", "4.2.2052"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011-2023 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011-2023 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html"
|
VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html"
|
||||||
VALUE "OriginalFilename", "rufus-4.2.exe"
|
VALUE "OriginalFilename", "rufus-4.2.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "4.2.2050"
|
VALUE "ProductVersion", "4.2.2052"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue