Головоломка шифрования / Как создать PassStub для билета Remote Assistance - PullRequest
2 голосов
/ 03 апреля 2010

Я пытаюсь создать тикет для удаленного помощника. Часть этого требует создания параметра PassStub. По состоянию на документацию:

http://msdn.microsoft.com/en-us/library/cc240115(PROT.10).aspx

PassStub: зашифрованная строка пароля начинающего компьютера. Когда пульт Строка подключения Assistance отправляется в виде файла по электронной почте, чтобы обеспечить дополнительную безопасность, используется пароль. <16>

В части 16 они подробно описывают, как создать как PassStub. В Windows XP и Windows Server 2003, когда используется пароль, он шифруется с использованием PROV_RSA_FULL предопределенный провайдер криптографии с хешированием MD5 и CALG_RC4, RC4 алгоритм потокового шифрования.

Как PassStub выглядит так в файле: PassStub = "LK # 6Lh * gCmNDpj"

Если вы хотите создать его самостоятельно, запустите msra.exe в Vista или запустите средство удаленного помощника в WinXP.

В документации говорится, что эта заглушка является результатом функции CryptEncrypt с ключом, полученным из пароля и зашифрованным с помощью идентификатора сеанса (они также находятся в файле заявки).

Проблема в том, что CryptEncrypt создает двоичный выходной путь, превышающий 15-байтовый PassStub. Также PassStub не кодирует никоим образом, который я видел прежде.

Несколько интересных вещей о кодировке PassStub. После проведения статистического анализа 3-й символ всегда является одним из:! # $ & () + - = @ ^. Только символы, видимые повсюду: * _. В противном случае допустимыми символами являются 0-9 a-z A-Z. Всего допустимых 75 символов, и они всегда 15 байтов.

Запуск msra.exe с одним и тем же паролем всегда генерирует другой PassStub, указывая на то, что это не прямой хеш, а, как говорится, включает rasessionid.

Другая идея, которая у меня возникла, заключается в том, что это не прямой результат CryptEncrypt, а результат рассионионида в хеше MD5. В MS-RA (http://msdn.microsoft.com/en-us/library/cc240013(PROT.10).aspx). "Новичок PassStub" просто закодирован в шестнадцатеричном формате и выглядит как правильная длина. Проблема в том, что я понятия не имею, как перейти от любого хэша к тому, как выглядит PassStub.

1 Ответ

2 голосов
/ 10 апреля 2010

Мне любопытно, вы уже:

  • Рассматривается ли использование 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())
...