Hola foro, Como dice el titulo quiero Buscar valores en el regedit,
Ejemplo :
Virus >> wscript.exe //B "C:\Users\S4LXenox\AppData\Local\Temp\VirusUSB.vbs"
agrego un virus que se auto inicio. por medio una app quiero Que si en el valor:
wscript.exe //B "C:\Users\S4LXenox\AppData\Local\Temp\VirusUSB.vbs"
sea detectado por mi app y me pregunte si quiere que elimine esa entrada, para el vbs no se ejecute.
Bueno lo primero que imagino es listar en un listbox mis app que se auto inician, Bueno eso es facil ya que es casi lo mismo que la duda que tenia hace tiempo de como verificar los programas instalados
(link (https://foro.elhacker.net/net/como_saber_si_tengo_un_programa_instalado_vbnet-t479845.0.html)).
1) En-listo mis apps que se auto inician:
Imports Microsoft.Win32
Public Class Form1
Private Sub ListarHKCU()
Dim key As RegistryKey
Dim valueNames As String()
Dim currentUser As RegistryKey = Registry.CurrentUser
Dim name As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
Dim str2 As String = "Software\Microsoft\Windows\CurrentVersion\Runonce"
Try
key = currentUser.OpenSubKey(name, True)
valueNames = key.GetValueNames
Dim str3 As String
For Each str3 In valueNames
Try
ListBox1.Items.Add((str3 & " >> " & key.GetValue(str3).ToString))
Catch ex As Exception
End Try
Next
Catch ex As Exception
End Try
Try
key = currentUser.OpenSubKey(str2, True)
valueNames = key.GetValueNames
Dim str3 As String
For Each str3 In valueNames
Try
ListBox1.Items.Add((str3 & " >> " & key.GetValue(str3).ToString))
Catch ex As Exception
End Try
Next
Catch ex As Exception
End Try
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ListBox1.Items.Clear()
ListarHKCU()
End Sub
End Class
Lo segundo seria Buscar en ese listbox la cadena de texto "Wscript.exe"
Bueno en esta parte ya he intentado con : FindMyString pero no logra reconocer ese string.
Busque una solución algo floja, osea use un textbox en vez de el Listbox. y para detectar el virus use el siguiente codigo:
Dim APP_string As String() = {"wscript", "Cmd"}
For Each elemento As String In APP_string
If TextBox1.Text.Contains(elemento) Then
'AQUI VA EL CODIGO DEL MENSAJE Y LA OPCION PARA BORRAR EL VIRUS DEL REGISTRO
End If
Next
Ahora Es la parte en la que necesito ayuda, es en la que borra el auto inicio del vbs, osea borra esa entrada del regedit.
Bueno he puesto como lo he intentado haber si me pueden echar una mano.
Basicamente lo que quiero es Buscar en donde inician las app por medio del regedit :
SOFTWARE\Microsoft\Windows\CurrentVersion\Run
y hay busca archivos script , Que por lo general usan en los valores : "CMD /C" o "wscript.exe //B" para ejecutarse y cuando encuentre ese string en el regedit elimine esa entrada.
Gracias de antemano. si logro hacerlo lo posteare.
PD: Si se preguntan para que estoy haciendo esto , es por que llevo ya un tiempo desarrollando un motor de antiviurs . y apenas he logrado esto :
https://ibb.co/geS69J (https://ibb.co/geS69J) Cuando lo termine , (si es q lo termino subire el codigo fuente aqui)
¿Buscar y eliminar valores del registro de Windows?, de nuevo te invito a que le eches un ojo a...:
- Librería de Snippets para VB.NET !! (https://foro.elhacker.net/net/indice_de_la_libreria_de_snippets_para_vbnet-t485444.0.html;msg2167235#msg2167235)
concretamente en el año 2015...
- https://foro.elhacker.net/net/libreria_de_snippets_para_vbnet_compartan_aqui_sus_snippets-t378770.0.html;msg2003658#msg2003658
Este código de aquí abajo lo he hecho usando mi librería comercial
ElektroKit, lo comento por que los nombres de los miembros de la clase cambian un poco con la clase que publiqué en el año 2015 en ese post, pero supongo que se entenderá igualmente el modo de empleo que se debe aplicar:
Imports Microsoft.Win32
Imports ElektroKit.Core.System.Types
Imports ElektroKit.Core.System.Tools
Dim regInfos As IEnumerable(Of RegInfo) =
RegistryUtil.FindValue(RegistryView.Default,
rootKeyName:="HKCU",
subKeyPath:="Software\Microsoft\Windows\CurrentVersion\Run",
valueName:="WScript",
matchFullValueName:=False,
ignoreCase:=True,
searchOption:=SearchOption.TopDirectoryOnly)
For Each regInfo As RegInfo In regInfos
Dim sb As New StringBuilder()
sb.AppendLine(regInfo.RootKeyName)
sb.AppendLine(regInfo.SubKeyPath)
sb.AppendLine(regInfo.ValueName)
sb.AppendLine(regInfo.ValueData?.ToString())
Console.WriteLine(sb.ToString())
Next regInfo
...eso devolvería cualquier valor que contenga el nombre "WScript". (ojo, el nombre a buscar no acepta el uso de *wildcards* como en la CMD)
Si quieres algo más sencillito, menos tedioso, pues... sinceramente solo con buscar en Google puedes encontrar miles de resultados sobre como buscar valores de registro en .NET.
Saludos!
CitarDim regInfos As IEnumerable(Of RegInfo) =
RegistryUtil.FindValue(RegistryView.Default,
rootKeyName:="HKCU",
subKeyPath:="Software\Microsoft\Windows\CurrentVersion\Run",
valueName:="WScript",
matchFullValueName:=False,
ignoreCase:=True,
searchOption:=SearchOption.TopDirectoryOnly)
For Each regInfo As RegInfo In regInfos
Dim sb As New StringBuilder()
sb.AppendLine(regInfo.RootKeyName)
sb.AppendLine(regInfo.SubKeyPath)
sb.AppendLine(regInfo.ValueName)
sb.AppendLine(regInfo.ValueData?.ToString())
Console.WriteLine(sb.ToString())
Next regInfo
Justo lo q necesitaba gracias de nuevo!PD:
estaba apunto en hacer un post preguntando que era de ti? ya que es raro que te desaparezcas por tanto tiempo XD ;D. me imagino que estarías muy ocupado! . Gracias por el code! ;-)