☆ BOOTKEY/SYSKEY
http://scz.617.cn/windows/200401131357.txt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
SecureBoot REG_DWORD
0x00000001(1) stores a key as part of the operating system, and no interaction is required during system start
0x00000002(2) requires a password to be entered during system start
SecureBoot缺省值为1,也就是说BOOTKEY变相保存在注册表中。我们只修理缺省情形。
关于BOOTKEY/SYSKEY,最完备的(中、英文)公开文档源自flashsky([11]),附有部分 自然语言描述以及C代码。
参考krok的描述有助于程序员立即理清思路([15]),不要为俄文所吓倒,我们只需看 看夹杂其中的英文以及C代码即可。
Class A : C5 1F 3D DE : ("c51f3dde") : (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\JD) Class B : 3F 88 75 0D : ("3f88750d") : (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Skew1) Class C : EE F2 5F C1 : ("eef25fc1") : (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\GBG) Class D : 31 AF 75 4B : ("31af754b") : (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Data) Class : C5 1F 3D DE 3F 88 75 0D EE F2 5F C1 31 AF 75 4B MIX : 08 0A 03 07 02 01 09 0F 00 05 0D 04 0B 06 0C 0E BOOTKEY/SYSKEY : EE 88 3F 3D C1 F2 AF DE C5 75 1F 31 75 5F 4B 0D
用RegQueryInfoKey()查询Class信息,这是一个ASCIZ串,形如"c51f3dde",将之按 big-endian序转换成字节流"C5 1F 3D DE"。最终形成16字节长的Class信息。
MIX是固定的索引序列,用法如下:
我没有跟踪BOOTKEY的生成过程,仅仅验证了一下flashsky、krok的结论,荣誉归于 这二者。
☆ 参考资源
[11] SAM的散列存储加密解密算法以及SYSKEY的计算 - flashsky[2003-06-04] http://www.xfocus.net/releases/200306/a550.html
[15] Шифрование паролей в Windows 2000(俄文) - krok[2003-06-19] http://www.void.ru/content/1090 http://www.void.ru/?do=printable&id=1090