Что нового

Создания Hash RDP пароля в autoit

beliy

Продвинутый
Сообщения
372
Репутация
72
Версия AutoIt: последняя

Описание: Помогите получить способ генерации Hash rdp средствами Autoit

Примечания: это можно делать с помощью разных сторонних утилит, но хотелось бы получать автоматически самим скриптом. Что б вы понимали - пишу скрипт для генерации многих необходимых rdp подключений под конкретные логин/пасс дабы не создавать вручную новым пользователям...
Вот статья которая может помочь - http://www.remkoweijnen.nl/blog/2007/10/18/how-rdp-passwords-are-encrypted/
Заранее большое спасибо...
 
Автор
B

beliy

Продвинутый
Сообщения
372
Репутация
72
Извиняюсь, но вероятно мы не совсем друг друга поняли :whistle:
Уточнения:
1. надо код на Autoit для генерации hash аналогично как это делает сама windows, а не готовая тулза
2. насколько мне известно шифруется hash не в RC4, а с помошью функции CryptProtectData - http://msdn.microsoft.com/en-us/library/ms884464.aspx.

P.S. Проблема уже решена - тему закрываю.

Вот функция Autoit:
Код:
Func CryptRDPPassword($str)
    Local Const $CRYPTPROTECT_UI_FORBIDDEN = 0x1
    Local Const $DATA_BLOB = "int;ptr"

    Local $passStr = DllStructCreate("byte[1024]")
    Local $DataIn = DllStructCreate($DATA_BLOB)
    Local $DataOut = DllStructCreate($DATA_BLOB)
    $pwDescription = 'psw'
    $PwdHash = ""

    DllStructSetData($DataOut, 1, 0)
    DllStructSetData($DataOut, 2, 0)

    DllStructSetData($passStr, 1, StringToBinary($str,2)); UTF16 Little Endian
    DllStructSetData($DataIn, 2, DllStructGetPtr($passStr, 1))
    DllStructSetData($DataIn, 1, StringLen($str)*2)

    $return = DllCall("crypt32.dll","int", "CryptProtectData", _
                                    "ptr", DllStructGetPtr($DataIn), _
                                    "wstr", $pwDescription, _
                                    "ptr", 0, _
                                    "ptr", 0, _
                                    "ptr", 0, _
                                    "dword", $CRYPTPROTECT_UI_FORBIDDEN, _
                                    "ptr", DllStructGetPtr($DataOut))
    If @error Then Return ""

    $len = DllStructGetData($DataOut, 1)
    $PwdHash = Ptr(DllStructGetData($DataOut, 2))
    $PwdHash = DllStructCreate("byte[" & $len & "]", $PwdHash)
    Return DllStructGetData($PwdHash, 1)
EndFunc

Func UncryptRDPPassword($bin)
    Local Const $CRYPTPROTECT_UI_FORBIDDEN = 0x1
    Local Const $DATA_BLOB = "int;ptr"

    Local $passStr = DllStructCreate("byte[1024]")
    Local $DataIn = DllStructCreate($DATA_BLOB)
    Local $DataOut = DllStructCreate($DATA_BLOB)
    $pwDescription = 'psw'
    $PwdHash = ""

    DllStructSetData($DataOut, 1, 0)
    DllStructSetData($DataOut, 2, 0)

    DllStructSetData($passStr, 1, $bin)
    DllStructSetData($DataIn, 2, DllStructGetPtr($passStr, 1))
    DllStructSetData($DataIn, 1, BinaryLen($bin))

    $return = DllCall("crypt32.dll","int", "CryptUnprotectData", _
                                    "ptr", DllStructGetPtr($DataIn), _
                                    "ptr", 0, _
                                    "ptr", 0, _
                                    "ptr", 0, _
                                    "ptr", 0, _
                                    "dword", $CRYPTPROTECT_UI_FORBIDDEN, _
                                    "ptr", DllStructGetPtr($DataOut))
    If @error Then Return ""

    $len = DllStructGetData($DataOut, 1)
    $PwdHash = Ptr(DllStructGetData($DataOut, 2))
    $PwdHash = DllStructCreate("byte[" & $len & "]", $PwdHash)
    Return BinaryToString(DllStructGetData($PwdHash, 1), 2)
EndFunc
 

mrsoros

Новичок
Сообщения
19
Репутация
0
beliy сказал(а):
P.S. Проблема уже решена - тему закрываю.
А для чего тебе это надо было?
Мне надо написать скрипт поднимающий RDP с машиной Windows XP.
Может сможешь помочь?
Используя MsTscAx.MsTscAx - не вариант (не красивое окно - толстые рамки)
Используя кучу:
Код:
...
ControlClick($WindowHandle, '', '[CLASS:ComboBoxEx32; INSTANCE:1]')
ControlSetText($WindowHandle, '', '[CLASS:ComboBoxEx32; INSTANCE:1]', $ADrr)
...

тоже не вариант для ХР
В идеале это надо как-то mstsc.exe заставить поднять соединение автоматом передавая ей логин и пароль.
 
Верх