Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: softer2 en 16 Julio 2014, 04:50 am



Título: Editar archivo de windows con VBS en W7
Publicado por: softer2 en 16 Julio 2014, 04:50 am
Buenas ando mirando codigos en VBS para editararchivos

En este caso especifico quisiera editar el archivo HOsts del windows

Código:
c:\windows\system32\drivers\etc\hosts


estuve leyendo y es con Set.FileSystemObject  ,

pero quisiera saber un codigo donde tenga el manifest , osea para que edite en Windows 7 alguna ayuda ?


Título: Re: Editar archivo de windows con VBS en W7
Publicado por: Eleкtro en 16 Julio 2014, 15:06 pm
estuve leyendo y es con Set.FileSystemObject

FileSystemObject es un objeto:
http://msdn.microsoft.com/en-us/library/aa242706%28v=vs.60%29.aspx

El cual proporciona métodos para crear un archivo, escribir, etc... basicamente son métodos para llevar a cado tareas relacionadas con el FileSystem de Windows:
http://msdn.microsoft.com/en-us/library/6tkce7xa%28v=vs.84%29.aspx

Por lo tanto si, te sirve para la tarea, usando los métodos de escritura, ya que el archivo HOSTS no es más que un archivo de texto plano.

PD: Creo que deberías estudiar los conceptos básicos, la sintaxis del lenguaje, y demás, si realmente estás interesado en desarrollar códigos propios:
http://msdn.microsoft.com/en-us/library/0ad0dkea%28v=vs.84%29.aspx


quisiera saber un codigo donde tenga el manifest, osea para que edite en Windows 7 alguna ayuda ?

No he entendido tu pregunta, no debes interactuar con ningún ".manifest" para editar un archivo de texto.

Respecto a proporcionarte un código, la verdad es que no se si buscas un set completo de edición que te permita eliminar, modificar, y añadir entradas, o que es lo que buscas exactamente, así que te haré dos ejemplos básicos:

Código
  1. Sub AddEntry(ByVal Ip, Byval Alias)
  2.  
  3.    Const HostsFile  = "C:\Windows\System32\Drivers\etc\Hosts"
  4.    Set   objHosts   = CreateObject("Scripting.FileSystemObject"). _
  5.                       OpenTextFile(HostsFile, 8, True)
  6.  
  7.    objHosts.Writeline(vbNewLine & Ip & vbtab & Alias)
  8.    objHosts.Close
  9.  
  10. End Sub

Código
  1. Function GetAliases(ByVal Ip)
  2.  
  3.    Dim Aliases
  4.    Const HostsFile  = "C:\Windows\System32\Drivers\etc\Hosts"
  5.    Set   objHosts   = CreateObject("Scripting.FileSystemObject"). _
  6.                       OpenTextFile(HostsFile, 1)
  7.  
  8.    Do Until objHosts.AtEndOfStream
  9.  
  10.        HostEntry = Split(Replace(objHosts.Readline, vbTab, " "), " ")
  11.        HostIP    = Trim(HostEntry(0))
  12.        HostAlias = Trim(HostEntry(1))
  13.  
  14.        On Error Resume Next
  15.  
  16.        If HostIP = Ip Then
  17.            Aliases = Aliases & HostAlias & vbNewLine
  18.        End If
  19.  
  20.    Loop
  21.  
  22.    objHosts.Close
  23.  
  24.    GetAliases = Split(Aliases, vbNewLine)
  25.  
  26. End Function

Ejemplos de uso:
Código
  1. AddEntry("LOCALHOST", "www.test.com")
  2. MsgBox(GetAliases("LOCALHOST")(0))

Saludos.

EDITO: Una Helper Class gigantesca con todos los métodos que puedas llegar a necesitar:
www.codeproject.com/Articles/11354/VBScript-for-reading-and-writing-to-the-Windows-ho


Título: Re: Editar archivo de windows con VBS en W7
Publicado por: softer2 en 16 Julio 2014, 19:50 pm
Wauo muxas gracias por el codigo

NOse si me dejo explicar con eso del manifest , OSEA con archivos que estan en Windows se necesita elevar privilegios para poder modificar algun archivo ( en vb6 lo hacia con manifest)

y lo que si andaba queriendo exatamente era , que

1: Abrir el archivo hosts y borrar su contenido y poner mi contenido

o

2: Eliminar el archivo hosts y crear uno nuevo con el contenido especifico que quiera



EDITADO : osea a esto me refiero


Código:
Set objShell = CreateObject("Shell.Application")
    objShell.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " RunAsAdministrator", "", "runas", 1



EL codigo ya esta en si .sube prvilegios , abre y añade 1 linea al archivo

Pero lo que quiero es borrar todo el contenido del archivo hosts y añadir recien mis lineas

espero se entienda


Título: Re: Editar archivo de windows con VBS en W7
Publicado por: Eleкtro en 17 Julio 2014, 16:24 pm
lo que quiero es borrar todo el contenido del archivo hosts y añadir recien mis lineas

Cuando instancies el objeto, asigna el valor correcto para el parámetro IOmode (ForWriting).
http://msdn.microsoft.com/en-us/library/314cz14s%28v=vs.84%29.aspx

Ejemplo:
Código
  1. CreateObject("Scripting.FileSystemObject").OpenTextFile(HostsFile, 2, True)

Entonces, cuando uses el método Write/WriteLine, se reemplazará el contenido existente del archivo, y podrás seguír utilizando dicho método para continuar escribiendo, hasta que liberes el objeto con el método Close.

Ejemplo:
Código
  1. Const HostsFile  = "C:\Windows\System32\Drivers\etc\Hosts"
  2. Set objHosts     = CreateObject("Scripting.FileSystemObject"). _
  3.                   OpenTextFile(HostsFile, 2, True)
  4.  
  5. With objHosts
  6.  
  7.    .Writeline(vbNewLine)
  8.    .Writeline("127.0.0.1" & vbtab & "www.1.com")
  9.    .Writeline("127.0.0.2" & vbtab & "www.2.com")
  10.    .Writeline("127.0.0.3" & vbtab & "www.3.com")
  11.  
  12.    .Close
  13.  
  14. End With

Saludos.


Título: Re: Editar archivo de windows con VBS en W7
Publicado por: softer2 en 17 Julio 2014, 16:58 pm
Execelente era lo que buscaba

gracias por tu ayuda


Adjuntando el codigo de elevar privilegios en W7 al script queda muybien

si funciona en W7 y W8 el problema es el sigiente

que tambien en Windows XP , al ejecutar el script tbm pide ejecutar como administrador


QUuisiera saber como hacer para que primero el script decte el S.O

Si es XP ejecutar el scrip sin elevarle privilegios

y si es Wvista o W7 o W8 ejecutar el script donde le subo privilegios ..


espero su ayuda , recien ando aprendiendo esto del VBS


Título: Re: Editar archivo de windows con VBS en W7
Publicado por: Eleкtro en 17 Julio 2014, 21:01 pm
espero su ayuda , recien ando aprendiendo esto del VBS

Puedes hacer una query a WMI para obtener la versión NT del Windows operativo actual.

San-Google está lleno de ejemplos como este (http://bit.ly/1qLaxej), y como este otro:

Código
  1. Set dtmConvertedDate = CreateObject("WbemScripting.SWbemDateTime")
  2. strComputer = "."
  3. Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  4. Set oss = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
  5.  
  6. For Each os in oss
  7.    Wscript.Echo "Caption: " & os.Caption
  8.    Wscript.Echo "Version: " & os.Version
  9. Next

+ List of Microsoft Windows versions (http://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions)

Así pues, si la versión NT empieza por "5.1" o "5.2", será XP, si empieza por "6.1" será Win7, y si empieza por "6.2" o "6.3" será Windows 8/8.1.

+ VBScript Left Function (http://www.w3schools.com/vbscript/func_left.asp)
Código
  1. If Left(os.Version, 2) = "5.1" Then ...

PD: El nombre a mostrar del OS puede variar, pero la versión NT no, por eso te sugiero evitar parsear el Caption.

Saludos
 


Título: Re: Editar archivo de windows con VBS en W7
Publicado por: softer2 en 17 Julio 2014, 21:23 pm
Impresionante

MUxas gracias yo estaba buscando condicionales basado en la caption ya me estaba echando un mundo con if else if else por cada caption pero con la version ya seria mucho mas rapido y mucho mas seguro ya que cada pc tiene nombre distintos

gracias por la ayuda sos un capo