我正在尝试为远程协助创建票证。其中一部分需要创建 PassStub 参数。从文档开始:
http://msdn.microsoft.com/en-us/library/cc240115(PROT.10).aspx
PassStub:加密的新手计算机的密码字符串。当远程协助连接字符串作为文件通过电子邮件发送时,为了提供额外的安全性,使用密码。<16>
在第 16 部分中,他们详细介绍了如何创建为 PassStub。在 Windows XP 和 Windows Server 2003 中,使用密码时,会使用 PROV_RSA_FULL 预定义的加密提供程序以及 MD5 散列和 CALG_RC4(RC4 流加密算法)对其进行加密。
由于 PassStub 在文件中看起来像这样: PassStub="LK#6Lh*gCmNDpj"
如果您想自己生成一个,请在 Vista 中运行 msra.exe 或在 WinXP 中运行远程协助工具。
文档说这个存根是函数 CryptEncrypt 的结果,其密钥从密码派生并使用会话 ID 加密(这些也在票证文件中)。
问题是 CryptEncrypt 产生的二进制输出方式大于 15 字节的 PassStub。PassStub 也没有以我以前见过的任何方式进行编码。
关于 PassStub 编码的一些有趣的事情。进行统计分析后,第 3 个字符始终是以下字符之一:!#$&()+-=@^。只有随处可见的符号是: *_ 。否则,有效字符为 0-9 az AZ。共有 75 个有效字符,它们总是 15 个字节。
使用相同的密码运行 msra.exe 始终会生成不同的 PassStub,这表明它不是直接哈希,而是包含他们所说的 rasessionid。
我的另一个想法是它不是 CryptEncrypt 的直接结果,而是 MD5 哈希中的 rasessionid 的结果。在 MS-RA ( http://msdn.microsoft.com/en-us/library/cc240013(PROT.10).aspx )。“PassStub Novice”只是简单的十六进制编码,并且看起来是正确的长度。问题是我不知道如何从任何散列到 PassStub 的样子。