Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Davigotchi en 1 Marzo 2020, 20:20 pm



Título: [AYUDA] [VBS SCRIPT] Script para registro windows q no m funciona
Publicado por: Davigotchi en 1 Marzo 2020, 20:20 pm
Buenas tardes a todos:
He realizado un Script para modificar un valor del registro de Windows, se me hizo complicado por que la CADENA DEL REGISTRO donde se almacena el valor a modificar depende del usuario activo, asiq el Script no puede ser genérico, depende del SID del Usuario Actual.

Código
  1. strComputer = "."
  2. Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
  3.  
  4. Dim USUARIO
  5. Dim DOMINIO
  6. Dim SID
  7.  
  8. Set objshell = createobject("wscript.shell")
  9. USUARIO = objshell.expandenvironmentstrings("%USERNAME%")
  10. DOMINIO = objshell.expandenvironmentstrings("%USERDOMAIN%")
  11.  
  12. Set objAccount = objWMIService.Get _
  13. ("Win32_UserAccount.Name='" & USUARIO & "',Domain='" & DOMINIO & "'")
  14.  
  15. SID = objAccount.SID
  16.  
  17. Msgbox objshell.expandenvironmentstrings(SID)
  18.  
  19. DIM CADENA
  20. CADENA = objshell.expandenvironmentstrings("HKEY_USERS\"&SID&"\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications\GlobalUserDisabled")
  21.  
  22. Msgbox objshell.expandenvironmentstrings(CADENA)
  23.  
  24. On Error Resume Next
  25.  
  26. Set oShell = WScript.CreateObject("WScript.Shell")
  27. dato = oShell.RegRead(CADENA)
  28.  
  29. Msgbox objshell.expandenvironmentstrings(dato)
  30.  
  31. Dim WshShell, bKey
  32. Set WshShell = WScript.CreateObject("WScript.Shell")
  33.  
  34. IF Err.Number <> 0 THEN  'Ha ocurrido un error
  35.  IF Err.Number = -2147024894 THEN
  36.    WshShell.RegWrite "CADENA", 1, "REG_DWORD"
  37. MsgBox ("Opcion 1")
  38.  END IF
  39. WScript.Quit
  40. ELSE                     'Valor encontrado
  41.  IF dato = 0 THEN  
  42.  WshShell.RegWrite "CADENA", 1, "REG_DWORD"
  43.  Msgbox("Opcion2")
  44.  END IF
  45. END IF
  46.  
  47. Msgbox("FIN")

En el código he puesto varios mensajes para ir viendo que todas las variables almacenan los datos correctos... pero las funciones de escribir en el Registro de Windows no me funcionan :( :(

Alguien sabría en que estoy fallando¿?

Muchas gracias por adelantado.


Título: Re: [AYUDA] [VBS SCRIPT] Script para registro windows q no m funciona
Publicado por: MCKSys Argentina en 1 Marzo 2020, 21:17 pm
Hola!

No he probado el script, pero veo que al escribir no usas la variable, sinó una string con el nobre de la variable. Prueba cambiar lo siguiente:

Código
  1. shShell.RegWrite "CADENA", 1, "REG_DWORD"

por

Código
  1. shShell.RegWrite CADENA, 1, "REG_DWORD"

Saludos!


Título: Re: [AYUDA] [VBS SCRIPT] Script para registro windows q no m funciona
Publicado por: Davigotchi en 1 Marzo 2020, 21:34 pm
Buenas tardes:

Si señor!!! Cuanta razón... ya funciona, fallo mio xD
Muchas gracias :) .
Pero ahora quiero después de ese IF montar otro pero no se en que fallo ahora :( ...

Código
  1. strComputer = "."
  2. Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
  3.  
  4. Dim USUARIO
  5. Dim DOMINIO
  6. Dim SID
  7.  
  8. Set objshell = createobject("wscript.shell")
  9. USUARIO = objshell.expandenvironmentstrings("%USERNAME%")
  10. DOMINIO = objshell.expandenvironmentstrings("%USERDOMAIN%")
  11.  
  12. Set objAccount = objWMIService.Get _
  13. ("Win32_UserAccount.Name='" & USUARIO & "',Domain='" & DOMINIO & "'")
  14.  
  15. SID = objAccount.SID
  16.  
  17. Msgbox objshell.expandenvironmentstrings(SID)
  18.  
  19. DIM CADENA
  20. CADENA = objshell.expandenvironmentstrings("HKEY_USERS\"&SID&"\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications\GlobalUserDisabled")
  21.  
  22. Msgbox objshell.expandenvironmentstrings(CADENA)
  23.  
  24. DIM CADENA2
  25. CADENA2 = objshell.expandenvironmentstrings("HKEY_USERS\"&SID&"\Control Panel\International\User Profile\HttpAcceptLanguageOptOut")
  26.  
  27. Msgbox objshell.expandenvironmentstrings(CADENA2)
  28.  
  29. On Error Resume Next
  30.  
  31. Set oShell = WScript.CreateObject("WScript.Shell")
  32. dato = oShell.RegRead(CADENA)
  33.  
  34. Msgbox objshell.expandenvironmentstrings(dato)
  35.  
  36. DIM WshShell
  37. Set WshShell = WScript.CreateObject("WScript.Shell")
  38.  
  39. IF Err.Number <> 0 THEN  'Ha ocurrido un error
  40.  IF Err.Number = -2147024894 THEN
  41.    WshShell.RegWrite CADENA, 1, "REG_DWORD"
  42. MsgBox ("Opcion 1")
  43.  END IF
  44. WScript.Quit
  45. ELSE                     'Valor encontrado
  46.  IF dato = 0 THEN  
  47.  WshShell.RegWrite CADENA, 1, "REG_DWORD"
  48.  Msgbox("Opcion2")
  49.  END IF
  50. END IF
  51.  
  52. DIM WshShell2
  53. Set oShell = WScript.CreateObject("WScript.Shell")
  54. dato2 = oShell.RegRead(CADENA)
  55.  
  56. Msgbox objshell.expandenvironmentstrings(dato2)
  57.  
  58. Set WshShell2 = WScript.CreateObject("WScript.Shell")
  59.  
  60. IF Err.Number <> 0 THEN  'Ha ocurrido un error
  61.  IF Err.Number = -2147024894 THEN
  62.    WshShell2.RegWrite CADENA2, 1, "REG_DWORD"
  63. MsgBox ("Opcion 1_2")
  64.  END IF
  65. WScript.Quit
  66. ELSE                     'Valor encontrado
  67.  IF dato2 = 0 THEN  
  68.  WshShell2.RegWrite CADENA2, 1, "REG_DWORD"
  69.  Msgbox("Opcion2_2")
  70.  END IF
  71. END IF
  72.  
  73.  
  74. Msgbox("FIN")

Derspues de este comando:
Msgbox objshell.expandenvironmentstrings(dato2)
Me muestra el valor correspondiente pero no se ejecuta nada más... pasa directamente al mensaje:
Msgbox("FIN")

Alguien sabe que se me está pasando¿?

Gracias de nuevo. ;)


Título: Re: [AYUDA] [VBS SCRIPT] Script para registro windows q no m funciona
Publicado por: Serapis en 2 Marzo 2020, 01:20 am
Citar
CADENA = objshell.expandenvironmentstrings("HKEY_USERS\"&SID&"\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications\GlobalUserDisabled")
 
CADENA2 = objshell.expandenvironmentstrings("HKEY_USERS\"&SID&"\Control Panel\International\User Profile\HttpAcceptLanguageOptOut")

Tienes mal formadas las cadenas...
Las cadenas se concatenan con ' & ', es decir debe haber un espacio a ambos lados del ampersand (no he probado, nada simplemente viendo ese error de sintaxis y debajo un 'on error resume next', no he mirado nada más).

El tratamiento de errores, no debe ser así. Se pone cuando se cree posible que pueda suceder un error y tras la instrucción que cabría haber un errror se le interroga: If err.number <> 0 .... es decir se pone justo delante de donde cree que podría darse un error y en tal caso estás obligado a preguntarle inmediatamente después, si no para qué ponerlo???... tampoco tiene sentido ponerlo en otro sitio si se espera que un error pueda suceder en la línea x, debe preceder a la línea x... indistintamente de que tú luego cometas otros errores. Además errores de sintaxis, no son correctos que lleven un tratamiento de error, para eso está el IDE, si no el código no tendría fin, porque con cada variable se puede cometer errores.


Parece que la gente prefiere usar el bloc de notas, a causa de las idioteces de las películas...: Aunque estés operando con VBScript, usa el IDE de VB6, para editar tus scripts...
Simplemente abre un proyecto, elimina el formulario, añade un módulo escribe una función "Sub Main", escribe dentro tu código, en propiedades del proyecto dile que arranca desde 'Main'...
...y así podrás probar tus scripts si funcionan o no, como mínimo te marcará errores tontos como este con la sintaxis... y cuando algo falle, ejecutas paso a paso (tecla de función 'F8')... el debugger de VB6 es muy potente... Y una vez que esté correcto, ya lo guardas donde quieras...

en la imagen se ve la ayuda y una de las 'cadena's corregidas...
(https://i.imgur.com/V3ez1Q7.png)


Título: Re: [AYUDA] [VBS SCRIPT] Script para registro windows q no m funciona
Publicado por: Davigotchi en 2 Marzo 2020, 09:26 am
Buenos días:

Muchisimas gracias por tus consejos :) ya los estoy aplicando ;) .

Finalmente ya me funciona solamente tenía mal la llamada a una variable en el último IF ya q llamaba a CADENA cuando tendría que llamar a CADENA2, un fallo tonto.

Muchas gracias nuevamente, poco a poco gracias a todos vosotros estoy aprendiendo un poco de este mundo xD .