我用十六进制编辑的Windows内核文件c:\windows\system32\ntoskrnl.exe以我需要的方式修复了一些程序集字节。

由于STATUS_IMAGE_CHECKSUM_MISMATCH错误(0xC0000221;启动时恢复屏幕),系统无法启动。

但是无论如何我都需要启动编辑后的版本。如何禁用这种完整性检查?

评论

我一直在尝试做类似的事情,您曾经尝试过吗? (我知道从技术上讲这不是问题,但这是我在互联网上可以找到的关于该主题的唯一内容,没有一定声誉我就无法发表评论)@ xakeapp35

@Reaxt大家好,欢迎来到RE.SE!也许您应该问自己的问题?我确实已经使它能够与旧版BIOS一起工作,而仅设置PE校验和。但是,也就是说,安全启动(UEFI)可能与ELAM(我在回答中提到)可能有所不同。

#1 楼

您无需禁用这种完整性检查,只需设置校验和即可。在此特定情况下相关的一个是IMAGE_OPTIONAL_HEADER中的相应字段,即IMAGE_OPTIONAL_HEADER::CheckSum。我不确定内核本身是否受早期启动扫描的影响,但我认为这些二进制文件也是经过代码签名的,这是有原因的。因此,至少您可能希望从提升的提示中完全禁用完整性检查:bcdedit.exe /set nointegritychecks on(确保随后重新启动)。要考虑的另一点是启用了安全启动的UEFI。在这种情况下,Windows启动管理器将以某种方式检查要求加载的图像。但是由于缺少详细信息,因此尚不清楚是否可能是造成此问题的原因。
可以使用各种函数来计算PE文件的校验和。可能最简单的方法是使用图像帮助库函数MapFileAndCheckSum()或替代(CheckSumMappedFile())。如果我没记错的话,还有更多功能,包括来自Ldr*的一个ntdll.dll函数,可用于此目的。

评论


感谢您的答复,看来这正是我在寻找的东西!我的问题是不正确的,从某种意义上说,这确实不是一个好方法。如果您愿意的话,这里只剩下一件事了,请在简单,易于使用的Checksum计算方法上加几句话,建议您在这种情况下使用。

– xakepp35
18年5月28日在15:03

非常感谢你,那很奏效。我使用了PEChecksum非常简单的工具。如果需要,它只会扫描和更新。现在我被卡在0xc0000428(似乎与数字签名检查有关),并且按F8-7(禁用驱动程序签名检查)和F8-8(禁用反恶意软件)不起作用

– xakepp35
18年5月28日在15:17

@ xakepp35:您是否按照我的描述使用了bcdedit?这是Windows 10的确切版本吗? 32位还是64位?

– 0xC0000022L♦
18年5月28日在15:18

win10pro x64。属性选项卡显示10.0.14393.0文件版本

– xakepp35
18年5月28日在15:26

是。我重新安装了清洁系统。我将bcdedit与bootmenupolicy Legacy,bootstatuspolicy IgnoreAllFailures,disableelamdrivers yes,nointegritychecks,testsigning一起使用。然后,我修补了ntoskrnl.exe(将ssd连接到另一台PC,并更改了对所有人的权限:完全访问权限),并修复了标头中的校验和。在F8中启动时,我尝试选择“禁用ELAM”和“禁用签名”。仍然在ntoskrnl.exe文件上收到0xc0000428数字签名检查错误...

– xakepp35
18年5月28日在17:21