我正在尝试创建远程协助的票证。其中一部分需要创建passstub参数。截至文件:
http://msdn.microsoft.com/en-us/library/cc240115(PROT.10).aspx
passstub:加密的新手计算机的密码字符串。当遥控器
帮助连接字符串通过电子邮件作为文件发送,以提供额外的安全性,
使用密码。
在第16部分中,它们详细说明了如何创建passstub。
在windows xp和windows server 2003中,当使用密码时,使用
prov_rsa_带有md5哈希和calg_rc4的完全预定义加密提供程序,rc4
流加密算法。
因为passstub在文件中是这样的:
passstub=“lk 6lh*gcmndpj”
如果要自己生成一个,请在vista中运行msra.exe或在winxp中运行远程协助工具。
文档中说,这个存根是cryptencrypt函数的结果,该函数使用从密码派生的密钥进行加密,并使用会话id进行加密(它们也在票据文件中)。
问题是cryptencrypt产生的二进制输出方式大于15字节的passstub。而且passstub没有以我以前见过的任何方式进行编码。
关于passstub编码的一些有趣的事情。做了统计分析后,第三个字符总是:!α$和()+-= @ ^。到处可见的符号只有:*否则有效字符为0-9a-z a-z。总共有75个有效字符,它们总是15个字节。
使用相同的密码运行msra.exe总是会生成不同的passstub,这表明它不是直接哈希,而是包含他们所说的rasessionid。
我的另一个想法是,这不是cryptencrypt的直接结果,而是md5散列中rasessionid的结果。在MS-RA中(http://msdn.microsoft.com/en-us/library/cc240013(PROT.10).aspx)。“passstub新手”是简单的十六进制编码,看起来是正确的长度。问题是我不知道如何从任何散列到passstub的样子。
最佳答案
我很好奇,你已经:
考虑使用ISAFEncrypt::EncryptString(bstrEncryptionkey, bstrInputString)
作为直接使用CryptEncrypt
进行所有脏活的高级替代方案?(tlb
在hlpsvc.exe
中)
查看c:\WINDOWS\pchealth\helpctr\Vendors\CN=Microsoft Corporation,L=Redmond,S=Washington,C=US\Remote Assistance\Escalation\Email\rcscreen9.htm
(winxp)内部,查看选择“将邀请另存为文件”(高级)选项并提供密码时发生了什么?(可以在alert()
内添加OnSave()
呼叫)