2

我正在尝试为远程协助创建票证。其中一部分需要创建 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 的样子。

4

1 回答 1

2

我很好奇,你已经:

  • 考虑将ISAFEncrypt::EncryptString(bstrEncryptionkey, bstrInputString)其用作直接使用CryptEncrypt? (在tlbhlpsvc.exe
  • 当您选择将邀请另存为文件(高级)选项并提供密码时,查看内部c:\WINDOWS\pchealth\helpctr\Vendors\CN=Microsoft Corporation,L=Redmond,S=Washington,C=US\Remote Assistance\Escalation\Email\rcscreen9.htm(WinXP) 以查看发生了什么?(随意在里面添加调用)alert()OnSave()
于 2010-04-10T09:02:48.503 回答