Proyecto "Registry Stealth"

Iniciado por Manibal_man, 23 Julio 2005, 18:59 PM

0 Miembros y 1 Visitante están viendo este tema.

Manibal_man

Buenas gente... A alguien se le ocurre como hacer en vb para crear un programa que "vele" x el registro?, es decir, que proteja las entradas Run, Run-, RunOnce, etc.... que quede residente y que avise cuando un prog quiere escribir algo alli...

la verdad no se me ocurre como hacerlo... pero vi que el bitdefender lo trae y me gustó la idea

Saludos!
:: I was born ready motha fucka ::

Xpeed

#1
pues aki te cito un texto que creo que te puede ayudar en el momento de crear tu aplicacion .... no es especificamente que proteja las entradas que mencionas pero puede que te ayude

Citar
Algunas veces puede que sea necesario bloquear el registro de Windows para impedir que otros usuarios accedan a él y puedan modificar configuraciones.
Esta opción es un poco complicada ya que al hacerlo tampoco nos dejará acceder al registro, pero no hay que preocuparse porque primero veremos como hacer para bloquear el registro y luego como haremos para desbloquearlo.

Para deshabilitar el registro de Windows:
Hacemos clic en el botón Inicio y luego en Ejecutar
Escribimos la palabra Regedit y pulsamos el botón Aceptar
Ahora en el registro de Windows buscamos la clave HKEY_CURRENT_USER/Software Microsoft/Windows/CurrentVersion/Policies/System.
En la ventana de la derecha creamos un nuevo valor DWORD y le damos el nombre DisableRegistryTools
Hacemos doble clic sobre él y le damos el valor  "1" para deshabilitar las funciones de edición del registro.
Una vez realizada esta operación ya nadie podrá acceder al registro de Windows, hasta que no lo volvamos a activar

Para habilitar el registro de Windows:
Abrimos el bloc de notas y escribimos lo siguiente:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\system] "DisableRegistryTools"=dword:00000000


Ahora guardamos el bloc de Notas con el nombre unlock.reg y a partir de ahora cuando queramos habilitar el registro de Windows, después de haberlo deshabilitado solo tendremos que hacer doble clic sobre el archivo que acabamos de crear unlock.reg.

Así de esta forma mi consejo es que primero crees el archivo unlock.reg y luego deshabilites el registro.

un saludo ;)

Manibal_man

bueno, gracias... el tema es que lo que mas me interesa es saber como "interceptar" el pedido de "agregado de clave" para frenarlo, avisar, y despues dejarlo agregarse o no...

espero que alguien me pueda dar una mano... porque la verdad estoy medio en bolas... igual sigo buscando, si encuentro algo lo posteo

saludos!
:: I was born ready motha fucka ::

Manibal_man

Bueno, creo que me voy acercando, estuve buscando en el MSDN, y encontre una api "advapi32.dll" que con la funcion "RegNotifyChangeKeyValue Lib" podria llegar a servir, el tema es que no se si con esta funcion puedo encontrar modificaciones hechas x otro programa, o solo con otra funcion de la API... se entiende?
se supone que la funcion hace esto: The RegNotifyChangeKeyValue function notifies the caller about changes to the attributes or contents of a specified registry key.

Esta buenisimo, pero cuando la clave a agregar es creada x otro prog tambien?

confundido... :S

Saludos
:: I was born ready motha fucka ::

Slasher-K

Con RegNotifyChangeKeyValue cada vez que se modifique la clave que se está monitoreando te va a avisar. Necesitas crear un objeto Event con CreateEvent, entonces lo usas en la llamada a RegNotifyChangeKeyValue. Luego con WaitForSingleObject esperas a que el objeto Event esté en signaled (cuando WaitForSingleObject devuelva WAIT_OBJECT_0), esto significa que se realizó una modificación en el registro entonces podrás tomar las desiciones necesarias.

No te olvides de volver el evento a su estado original usando ResetEvent para poder seguir monitoreando la clave.

Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

Manibal_man

okkkkkkkkkkkkas, ya lo hice en C++, veremos como queda en visual.

chas gracias

Saludos
:: I was born ready motha fucka ::

Manibal_man

Otra pregunta, tengo que abrirla primero con RegOpenKey?
:: I was born ready motha fucka ::

Slasher-K

Si no va a ser una de las claves principales (HKLM, HKCU, etc) si hay que abrirla.

Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

Manibal_man

Pero no se como llamar a las funciones en vb  :-[... como defino los structs en vb?

sisi.. me da verguenza preguntar esto.. :(

Saludos!
:: I was born ready motha fucka ::

Slasher-K

Las estructuras se crean con la palabra clave Type, pero en este caso no necesitas usar ninguna.

Te dejo el código de ejemplo ya que es muy útil y no se había visto antes en el foro.


'
'Coded by Slasher
'

Option Explicit

Public Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA" (ByVal lpEventAttributes As Long, ByVal bManualReset As Long, ByVal bInitialState As Long, ByVal lpName As String) As Long

Public Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long

Public Declare Function RegNotifyChangeKeyValue Lib "advapi32.dll" (ByVal hKey As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long

Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_LOCAL_MACHINE = &H80000002

Public Const KEY_NOTIFY = &H10

Public Const REG_OPENED_EXISTING_KEY = &H2
Public Const REG_NOTIFY_CHANGE_NAME = &H1
Public Const REG_NOTIFY_CHANGE_LAST_SET = &H4

Public Const DEFKEY = "Software\" 'Clave que se quiere monitorear.

Public Cancel As Boolean

Sub RegMon()

        Dim hEvent&
        Dim hKey&
        Dim r&

NewTest:
  'Crea un evento para responder a las modificaciones del registro.
  '
  hEvent = CreateEvent(0&, True, 0, vbNullString)
 
  'Abre la clave.
  '
  r = RegCreateKeyEx(HKEY_CLASSES_ROOT, DEFKEY, 0, vbNullString, 0, _
                     KEY_NOTIFY, 0, hKey, REG_OPENED_EXISTING_KEY)
 
  'Inicia el monitoreo de la clave.
  '
  r = RegNotifyChangeKeyValue(hKey, True, _
                              REG_NOTIFY_CHANGE_NAME Or _
                              REG_NOTIFY_CHANGE_LAST_SET, _
                              hEvent, True)
 
  Do While WaitForSingleObject(hEvent, 10)
    'Espera que se modifique, agregue, o elimine
    'algún valor de la clave.
    '
    If Cancel Then
      'Cancelar la espera.
      '
      Exit Sub
    End If
   
    DoEvents
  Loop
 
  'Si se modifica la clave...
  '
  If Not Cancel Then
    Stop
  End If
 
  r = RegCloseKey(hKey)
  r = CloseHandle(hEvent)
 
GoTo NewTest  'Vuelve a comenzar el monitoreo.

End Sub


El código se ejecutará hasta que se establezca la variable global Cancel a True.

Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*