我有十六进制编辑的 Windows 内核文件,c:\windows\system32\ntoskrnl.exe
以我需要的方式修复一些程序集字节。
由于STATUS_IMAGE_CHECKSUM_MISMATCH
错误,系统无法启动(0xC0000221;启动时恢复屏幕)
但无论如何我都需要启动编辑过的版本。如何禁用这种完整性检查?
我有十六进制编辑的 Windows 内核文件,c:\windows\system32\ntoskrnl.exe
以我需要的方式修复一些程序集字节。
由于STATUS_IMAGE_CHECKSUM_MISMATCH
错误,系统无法启动(0xC0000221;启动时恢复屏幕)
但无论如何我都需要启动编辑过的版本。如何禁用这种完整性检查?
您不会禁用这种完整性检查,您只需设置 checksum。在这种特殊情况下相关的是 中的相应字段IMAGE_OPTIONAL_HEADER
,即IMAGE_OPTIONAL_HEADER::CheckSum
。
也就是说,一旦您解决了这个问题,您可能会遇到其他问题。我不确定内核本身是否受Early Launch scans 的影响,但我认为这些二进制文件也经过代码签名是有原因的。因此,至少您可能希望从提升的提示中完全禁用完整性检查:(bcdedit.exe /set nointegritychecks on
确保之后重新启动)。要考虑的另一点是启用了安全启动的 UEFI。在这种情况下,Windows 启动管理器会以某种方式检查它要求加载的图像。但由于缺少细节,尚不清楚这是否可能是问题的原因。
可以使用各种函数来计算 PE 文件的校验和。可能最简单的方法是使用图像帮助库功能MapFileAndCheckSum()
或 ( CheckSumMappedFile()
)。如果我没记错的话,还有几个,包括一个可以用于此目的的Ldr*
函数ntdll.dll
。