Activar y permitir mÚltiples conexiones por Escritorio Remoto
Aplicable a cualquier Windows Vista (incluidas versiones Vista Home que teóricamente no soportan el Escritorio Remoto). Es aplicable tanto a 32 como a 64 bits.
- Debido a que existen en la red algunas, llamémoslas “herramientas” que lo hacen pero que realmente lo que hacen es meternos también un “bicho” como regalito adjunto, he decidido preparar este artículo. Una de las páginas que nos “regalaban” estas cosas es http://antiwpa.org.ru/Other/TerminalserverNoRestrPatch-1-1/ la cual no está operativa en la actualidad, pero su herramienta es fácil de localizar en Internet. Dicha herramienta contiene al menos un conocido troyano (Trojan.Win32.Agent.jh) y es probable que alguno no detectado.
- Recordemos igualmente que las modificaciones que vamos a realizar:
- Tienen visos de ilegalidad, o al menos, en su defecto absolutamente “no ético”.
- Estas modificaciones implican tocar una DLL del sistema operativo. Por tanto nos quedamos automáticamente fuera de soporte por parte de Microsoft
El proceso consta de los siguientes puntos:
1) Modificación de la DLL del sistema TERMSRV.DLL. Ver en capítulo correspondiente como hacerlo.
2) Para la versión Home Premium, la modificación de claves de registro (incorporar las que tiene Vista Ultimate), lo haremos construyéndonos un .reg. Esto es solamente para Vista Home Premium. Ver en el capítulo correspondiente como hacerlo.
Una vez realizados los puntos anteriores, procedemos a su instalación. Para ello, debemos trabajar en una consola en modo elevado, es decir, en Inicio, Accesorios, botón derecho sobre Símbolo del Sistema y “Ejecutar como Administrador”. Supongo que tenemos la nueva dll modificada y el .reg en una carpeta llamada TMP que cuelga de c:\
3) Realizamos en la consola:
cd \tmp
net stop “Terminal Services”
takeown /a /f %SystemRoot%\System32\termsrv.dll
icacls %SystemRoot%\System32\termsrv.dll /Grant Administrators:F
(si nuestra versión de Windows es la versión española, cambiar en la línea anterior “Administrators” por “Administradores”
ren %SystemRoot%\System32\termsrv.dll termsrv.dll .bak
copy termsrv.dll %SystemRoot%\System32\termsrv.dll4)Si nuestra versión es Home Premium, ejecutams el .reg creado en el punto 2) de la siguiente forma:
regedit /s ts.reg
5) Si deseamos que se pueda por cada usuario tener sesiones independientes (es decir, que si un usuario ya está conectado, entrando con otro usuario, en vez de coger su sesión, se cree una nueva sesión limpia), debemos incorporar una clave de registro que podemos hacer de la siguiente forma:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
Si quisiéramos desactivar esta característica en cualquier momento y tomar control de la sesión existente, podríamos en cualquier momento modificar de nuevo la clave cambiando el valor 0 por un 1 mediante:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 1 /f
6) Debido a que no nos aparece en el Home en la parte de Conexiones remotas, la posibilidad de activar o no el escritorio remoto, debemos realizar esto mediante una clave de registro. Para tener activo el escritorio remoto:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
y en cualquier momento puede desactivarse mediante:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f
7) Arrancar ya el servicio que hemos parado previamente en el punto 3)
net start “Terminal Services”
En Vista Home Premium, debemos abrir en el cortafuegos, creándonos una regla para definir una excepción en un nuevo puerto. Lo hacemos, e indicamos que es el puerto 3389 tcp. En Vista Business y Ultimate, verificar la regla de Escritorio Remoto en el cortafuegos y activar la excepción si fuese necesario.
Lo anterior nos permite ya el poder tener más de una sesión de escritorio remoto abierta e incluso el que se permita más de una con el mismo usuario.
PARTE 1 – MODIFICACIÓN DE LA DLL TERMSRV.DLL
Abrir una consola en modo elevado, y nos creamos una carpeta de trabajo:
cd \
md tmp
cd tmp
copy %SystemRoot%\System32\termsrv.dllCon esto ya tenemos en esta carpeta la DLL a modificar. La modificación consiste en que tenemos que cambiar unos pocos bytes, lo cual, como veremos a continuación, realizaremos con un programa editor hexadecimal, por ejemplo WinHEX.
Los bytes a modificar dependen de si la versión de nuestro Vista es de 32 o 64 bits. A continuación pongo las tablas con lo que hay que modificar cada una de las versiones.
32 bits Offset nuevo valor original000150D8:
000150D9:
000150DA:
000150DB:
000150DD:
000150DF:
000150E0:
000150E1:
000150E2:
000154BF:
0004943C:BA
00
01
00
90
89
91
20
03
90
EB3B
91
20
03
00
0F
84
0C
CA
43
7464 bits Offset nuevo valor original 0005BC8F:
0005BC90:
0005BC91:
0005BC92:
0005BC94:
0005BC95:
0005BC97:
0005BC9B:
0006523E: B8
00
01
00
90
89
38
EB
00 8B
81
38
06
00
39
3C
75
01El programa que voy a usar para modificar es el WinHEX pero puede servir cualquier otro editor hexadecimal. WinHEX lo tenemos en: http://www.winhex.com/winhex/index-e.html
Es muy intuitivo, veamos la DLL para Vista de 64 bits:
En el menú File, cargamos la DLL desde la carpeta c:\tmp en donde acabamos de copiarla.
Si nos fijamos en el cuadro anterior, la primera dirección a modificar (en 64 bits) es la 0005BC8F la cual corresponde a la última posición (ver columnas superiores) de la fila que comienza por 0005BC80 y que la he resaltado en azul. Fijemonos que contiene un 8B, tal y como dice el cuadro superior de cambios, y lo tenemos que cambiar por un B8. Así hacemos por cada una de las direcciones marcadas en el cuadro superior. Hay que verificar que realmente lo que contiene la DLL actual es lo MISMO que he puesto en el cuadro. Si no lo fuese, es que esa DLL no es de la versión final de Vista o ha sido ya parcheada por Microsoft, en cuyo caso el presente método no sirve y no debemos continuar.
Al final de la modificación, guardamos la DLL y nos salimos de programa.
PARTE 2 – CREACIÓN DEL ARCHIVO DE REGISTRO TS.REG (sólo para Home Premium)
Con el cuaderno de notas nos creamos un archivo llamado TS.REG que guardaremos en c:\tmp. El contenido del archivo debe ser:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
“fDenyTSConnections”=dword:00000000
“StartRCM”=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\Clip Redirector]
“Type”=dword:00000003
“Name”=”RDPClip”
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\DND Redirector]
“Type”=dword:00000003
“Name”=”RDPDND”
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\Dynamic VC]
“Type”=dword:00000000
“Name”=”\\Device\\DrDynVc”
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\Sound Redirector]
“Type”=dword:00000003
“Name”=”RDPSound”
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\Terminal Server Redirector]
“Type”=dword:00000000
“Name”=”\\Device\\RdpDr”
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\DefaultUserConfiguration]
“fInheritAutoLogon”=dword:00000001
“fInheritResetBroken”=dword:00000001
“fInheritReconnectSame”=dword:00000001
“fInheritInitialProgram”=dword:00000001
“fInheritCallback”=dword:00000000
“fInheritCallbackNumber”=dword:00000001
“fInheritShadow”=dword:00000001
“fInheritMaxSessionTime”=dword:00000001
“fInheritMaxDisconnectionTime”=dword:00000001
“fInheritMaxIdleTime”=dword:00000001
“fInheritAutoClient”=dword:00000001
“fInheritSecurity”=dword:00000000
“fPromptForPassword”=dword:00000000
“fInheritColorDepth”=dword:00000001
“fResetBroken”=dword:00000000
“fReconnectSame”=dword:00000000
“fLogonDisabled”=dword:00000000
“fAutoClientDrives”=dword:00000001
“fAutoClientLpts”=dword:00000001
“fForceClientLptDef”=dword:00000001
“fDisableEncryption”=dword:00000001
“fHomeDirectoryMapRoot”=dword:00000000
“fUseDefaultGina”=dword:00000000
“fDisableCpm”=dword:00000000
“fDisableCdm”=dword:00000000
“fDisableCcm”=dword:00000000
“fDisableLPT”=dword:00000000
“fDisableClip”=dword:00000000
“fDisableExe”=dword:00000000
“fDisableCam”=dword:00000000
“Username”=”"
“Domain”=”"
“WorkDirectory”=”"
“InitialProgram”=”"
“CallbackNumber”=”"
“Callback”=dword:00000000
“Shadow”=dword:00000001
“MaxConnectionTime”=dword:00000000
“MaxDisconnectionTime”=dword:00000000
“MaxIdleTime”=dword:00000000
“KeyboardLayout”=dword:00000000
“MinEncryptionLevel”=dword:00000001
“ColorDepth”=dword:00000001
“NWLogonServer”=”"
“WFProfilePath”=”"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\SysProcs]
“rdpclip.exe”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Utilities]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Utilities\change]
“winsta”=hex(7):31,00,00,00,57,00,49,00,4e,00,53,00,54,00,41,00,00,00,63,00,68,\
00,67,00,6c,00,6f,00,67,00,6f,00,6e,00,2e,00,65,00,78,00,65,00,00,00,00,00
“port”=hex(7):30,00,00,00,31,00,00,00,50,00,4f,00,52,00,54,00,00,00,63,00,68,\
00,67,00,70,00,6f,00,72,00,74,00,2e,00,65,00,78,00,65,00,00,00,00,00
“logon”=hex(7):30,00,00,00,31,00,00,00,4c,00,4f,00,47,00,4f,00,4e,00,00,00,63,\
00,68,00,67,00,6c,00,6f,00,67,00,6f,00,6e,00,2e,00,65,00,78,00,65,00,00,00,\
00,00
“user”=hex(7):30,00,00,00,31,00,00,00,55,00,53,00,45,00,52,00,00,00,63,00,68,\
00,67,00,75,00,73,00,72,00,2e,00,65,00,78,00,65,00,00,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Utilities\query]
“winsta”=hex(7):31,00,00,00,57,00,49,00,4e,00,53,00,54,00,41,00,00,00,71,00,77,\
00,69,00,6e,00,73,00,74,00,61,00,2e,00,65,00,78,00,65,00,00,00,00,00
“appserver”=hex(7):30,00,00,00,32,00,00,00,54,00,45,00,52,00,4d,00,53,00,45,00,\
52,00,56,00,45,00,52,00,00,00,71,00,61,00,70,00,70,00,73,00,72,00,76,00,2e,\
00,65,00,78,00,65,00,00,00,00,00
“session”=hex(7):30,00,00,00,31,00,00,00,53,00,45,00,53,00,53,00,49,00,4f,00,\
4e,00,00,00,71,00,77,00,69,00,6e,00,73,00,74,00,61,00,2e,00,65,00,78,00,65,\
00,00,00,00,00
“process”=hex(7):30,00,00,00,31,00,00,00,50,00,52,00,4f,00,43,00,45,00,53,00,\
53,00,00,00,71,00,70,00,72,00,6f,00,63,00,65,00,73,00,73,00,2e,00,65,00,78,\
00,65,00,00,00,00,00
“user”=hex(7):30,00,00,00,31,00,00,00,55,00,53,00,45,00,52,00,00,00,71,00,75,\
00,73,00,65,00,72,00,2e,00,65,00,78,00,65,00,00,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Utilities\reset]
“winsta”=hex(7):31,00,00,00,57,00,49,00,4e,00,53,00,54,00,41,00,00,00,72,00,77,\
00,69,00,6e,00,73,00,74,00,61,00,2e,00,65,00,78,00,65,00,00,00,00,00
“session”=hex(7):30,00,00,00,31,00,00,00,53,00,45,00,53,00,53,00,49,00,4f,00,\
4e,00,00,00,72,00,77,00,69,00,6e,00,73,00,74,00,61,00,2e,00,65,00,78,00,65,\
00,00,00,00,00--
|
25 - septiembre - 2007