elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Temas
Páginas: [1] 2 3 4 5 6 7
1  Programación / Ingeniería Inversa / Crackeando un programa [Consulta] en: 21 Octubre 2014, 21:10 pm
Buenos días/tardes/noches a todos en el foro :P

Soy algo nuevo en esto de la ingeniería inversa, así que pido disculpas si alguna afirmación no es correcta en lo que leerán a continuación xDDD

He estado leyendo a Ricardo Navaja y bueno me lance a la aventura de intentar crackear un programa que necesito, por la información que he podido recopilar está escrito en Microsoft Visual C++ 2010, usa Qt para la GUI y está protegido con VM Protect v1.60 - v2.05 según ProtectionId, VM Protect 2.x + Simple UPX cryptor según RDG y VM Protect según DIS. Se que esta protección es una de las más fuertes para ejecutables escritos en C++, pero como todo, difícil pero no imposible; por lo que he buscado recomiendan usar OllyDbg junto con los plugins Phat0m y StrongOD para hacer frente a VM Protect, pues los he cargado al OllyDbg y configurado como se debe (o al menos así parece), el programa ya no detecta al OllyDbg explitamente enviandote el clásico MessageBox indicando que ha detectado un depurador pero se queda sin hacer nada y parece no desempaquetar nada porque aún no se pueden ver los strings ni el código del modulo principal en claro.

De tal manera me fui por el Attach, con los plugins todo funciona bien pero colocar un breakpoint e intentar depurar hace que todo explote xD

No me importo al principio, pues solo quería encontrar el salto condicional y parchearlo jajajajaja, analizando un poco más a fondo básicamente el programa genera un HWID, siguiendo las conexiones con Wireshark he visto que envía por POST los datos a un servidor que en pocas palabras contesta HTTP/OK y un número, siguiendo esa respuesta en el OllyDbg el número termina pasando por un switch, tal como este:



Hay un case del switch para cada error posible (falla de conexión, prueba vencida, datos de conexión inválidos, etc), con su respectiva llamada al MessageBox de Qt para dar la información al usuario. Como no existe un case de éxito y está presente el default case he intentado saltar al default case de una vez pero no pasa nada, el programa se queda sin hacer nada, también he intentado saltar fuera del switch antes de entrar (esto hace que explote xD), imagino que por el estado de los registros.

Llevo varios días pegado tratando de averiguar a donde salta o a quien llama cuando todo sale bien, si alguien me pudiese dar una luz, sobre como depurarlo sin que explote (hace falta desempaquetar?) o hacia donde termina yéndose esto, o cualquier otra cosa que ustedes crean que es lo correcto, estaría muy agradecido.

Esta es la aplicación, es un bot de un juego, el enlace lo coloco desde mi Google Drive, para no poner directo el ejecutable desde la página del fabricante:

https://drive.google.com/file/d/0B3_t7GvNr0xvZTNyaFZqeWkzMjQ/view?usp=sharing

Gracias por leer este testamento xD
2  Programación / .NET (C#, VB.NET, ASP) / GamesRec [Proyecto] [Grupo Completo] -- Sigue nuestro avances -- en: 1 Enero 2013, 19:15 pm
Buenos días/tardes/noches a todos en el foro...

Suscribete a nuestra página web: http://gamesrec.net/

iShots, Nombre removido por motivo de patentes, cambiado por GamesRec.

Estamos en busca de personal experimentado en el área de aplicaciones cliente-servidor, multimedia y redes sociales,  para un proyecto llamado "GamesRec" que consideramos una buena idea, específicamente buscamos lo siguiente:

1 Programador Java/PHP
1 Programador .Net especializado en GDI+
1 Diseñador WEB
1 SEO Manager

Conforman este proyecto ya:

1 Programador PHP
3 Programadores .Net
1 SEO Manager
1 Diseñador WEB

A continuación, les doy una breve pero precisa descripción de que trata y los detalles básicos e importantes:


Esta es la primera Imagen de como GamesRec va tomando forma, con un menú desplegable a un lado.

GamesRec será una aplicación de escritorio para capturar imágenes y vídeos de alta calidad en momentos de juego, la aplicación permitirá compartir dichas imágenes a través de las redes sociales más conocidas Twitter y Facebook de manera automática mediante la asociación de cuentas a la aplicación haciendo uso de las API de las redes sociales mencionadas.

El proyecto será de código cerrado, ya que se pretende su venta por precios bajos a plazos cortos o una cantidad aceptable por licencias vitalicias, a fin de enfrentar la competencia en el campo con el doble de calidad a la mitad del precio. Las ganancias individuales serán equitativas entre los miembros del proyecto, contamos con 500Mb de espacio en nuestro servidor y una conexión de 10Mbps, que serán extensibles mientras el proyecto avance.

GamesRec se caracterizara por lo siguiente:

  • Diseño minimalista y simple pero potente.
  • La complejidad de la UI déjensela a los programadores en el código, el usuario debe tener todo a la mano de la manera más sencilla posible.
  • El diseño debe estar a la vanguardia como una de las características principales de la aplicación sin desechar la potencia.

El Framework destino es 4.0 el método de comunicación será Skype y TeamViewer, el desarrollo será modular y por clases, de manera que las tareas se puedan repartir con homogeneidad según el dominio de cada participante, muchos más detalles de gran interés podremos compartir contigo cuando estés de nuestro lado.

Gracias por leer y me despido esperando sus comentarios, opiniones, dudas o criticas ;D

 
3  Programación / .NET (C#, VB.NET, ASP) / Fondo Blur GDI+ [Aporte] en: 18 Noviembre 2012, 03:10 am
El Visual Studio es excelente para el diseño a falta de potencia, entonces si tenemos esta herramienta pues explotemosla :xD

Aquí le dejo un modulo que quizá a alguien le pueda servir, crea un Form cuyo BackGroundImage es un ScreenShot con el efecto Blur se muestra con control de opacidad de una manera muy visual, esto sirve si queremos llamar la atención del usuario a nuestra aplicación más o menos lo que hace el UAC cuando nos da una advertencia pero con Blur, es un código sencillo que puede resaltar el detalle del diseño en cualquier aplicación...

El BlurForce mientras más alto más desenfoca pero tarda más en aplicar el efecto, se recomiendan valores del 1 al 5, por defecto es 2, la función tiene por defecto 1.

Speed define la velocidad para pasar la opacidad del Form de 0 a 1 y viceversa, por defecto es 0.025/1 ms.

Coloque la función Blur a parte para que se pudiese detallar su funcionamiento.

El Sub BlurBitmap proviene de: http://vbdotnetpower.blogspot.com/2011/06/image-effect-bluring.html

Código
  1. Module BlurBackground
  2.  
  3.    Private WithEvents Background As New Form With {.Bounds = SystemInformation.VirtualScreen, _
  4.                                                    .StartPosition = FormStartPosition.Manual, _
  5.                                                    .TopMost = True, _
  6.                                                    .Opacity = 0, _
  7.                                                    .BackgroundImageLayout = ImageLayout.None, _
  8.                                                    .FormBorderStyle = FormBorderStyle.None, _
  9.                                                    .BackgroundImage = Nothing, _
  10.                                                    .ShowIcon = False, _
  11.                                                    .ShowInTaskbar = False}
  12.  
  13.    Private WithEvents Timer As New Timer With {.Enabled = False, .Interval = 1}
  14.  
  15.    Public Speed As Double
  16.  
  17.    Private Sub BlurBitmap(ByRef Image As Bitmap, Optional ByVal BlurForce As Integer = 1)
  18.        Dim _
  19.        Graph As Graphics = Graphics.FromImage(Image), _
  20.        ImgAtt As New ImageAttributes, _
  21.        Matrix As New ColorMatrix
  22.        Matrix.Matrix33 = 0.5F
  23.        ImgAtt.SetColorMatrix(Matrix)
  24.        For x As Integer = -BlurForce To BlurForce
  25.            For y As Integer = -BlurForce To BlurForce
  26.                Graph.DrawImage(Image, New Rectangle(x, y, _
  27.                                                     Image.Width, _
  28.                                                     Image.Height), _
  29.                                                     0, 0, Image.Width, _
  30.                                                     Image.Height, _
  31.                                                     GraphicsUnit.Pixel, ImgAtt)
  32.            Next
  33.        Next
  34.        ImgAtt.Dispose()
  35.        Graph.Dispose()
  36.    End Sub
  37.  
  38.    Public Sub ShowBackground()
  39.  
  40.        If Background.BackgroundImage IsNot Nothing Then
  41.            Background.BackgroundImage.Dispose()
  42.        End If
  43.  
  44.        Dim BlurBack As New Bitmap(SystemInformation.VirtualScreen.Width, _
  45.                                   SystemInformation.VirtualScreen.Height)
  46.  
  47.        Dim BlurGraph As Graphics = Graphics.FromImage(BlurBack)
  48.  
  49.        BlurGraph.CopyFromScreen(0, 0, 0, 0, SystemInformation.VirtualScreen.Size)
  50.  
  51.        BlurBitmap(BlurBack, 2)
  52.  
  53.        BlurGraph.Dispose()
  54.  
  55.        Background.BackgroundImage = BlurBack
  56.        If Not Timer.Enabled And Not Background.Visible Then
  57.            Background.Show()
  58.            Speed = 0.025
  59.            Timer.Start()
  60.        End If
  61.    End Sub
  62.  
  63.    Public Sub HideBackground()
  64.        If Not Timer.Enabled And Background.Visible Then
  65.            Speed = -0.025
  66.            Timer.Start()
  67.        End If
  68.    End Sub
  69.  
  70.    Private Sub Timer_Tick(ByVal sender As Timer, ByVal e As System.EventArgs) Handles Timer.Tick
  71.  
  72.        Select Case Background.Opacity + Speed
  73.            Case Is > 1
  74.                Timer.Stop()
  75.                Exit Sub
  76.            Case Is < 0
  77.                Timer.Stop()
  78.                Background.Hide()
  79.        End Select
  80.  
  81.        Background.Opacity += Speed
  82.  
  83.    End Sub
  84.  
  85.    'Solo por seguridad para cerrar el Form con un click'
  86.    Private Sub Background_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Background.Click
  87.        HideBackground()
  88.    End Sub
  89.  
  90. End Module
4  Programación / .NET (C#, VB.NET, ASP) / Captcha v3.0 en: 3 Julio 2012, 04:27 am
Siempre recuerdo este proyecto y le agrego algo nuevo además de mejorar la velocidad, el código también muestra mucho la parte de como Graphics puede controlar al 100% una imagen, al nivel de poder hacer lo que quieras.

Aquí están las versiones 1, 2 y 3 para que se note la diferencia

   


¿Que es lo nuevo?

  • Las lineas que interceptaban las letras ahora son curvas
  • Las letras ahora aparecen movidas y manchadas
  • La mortal mancha, para los OCR, que invierte el color en ReCaptcha, ahora esta en este proyecto
5  Programación / .NET (C#, VB.NET, ASP) / DeflateStream - Extraña Perdida de Datos en: 23 Junio 2012, 21:30 pm
Estoy diseñando una clase que guarda información en un archivo y utiliza DeflateStream como método de compresión, no hay casi información de como comprimir datos en forma de Bytes(), hay mucha documentación de ir directamente al trabajo con archivos, entonces diseñe esta función que al parecer funciona correctamente, pero se pierden algunos Bytes del final de la información comprimida y no encuentro el error por ningún lado, quizás es mal uso de DeflateStream.

Para probar la perdida de los datos hice esta prueba:

Código
  1. Imports System.IO, System.IO.Compression, System.Text, System.Security.Cryptography
  2.  
  3. Module Module1
  4.  
  5. #Region " Algoritmo de DeCompresión Deflate "
  6.  
  7.    Public Function DeflateDeCompress(ByVal Data As Byte(), _
  8.                                      ByVal Action As CompressionMode) As Byte()
  9.  
  10.        DeflateDeCompress = Nothing
  11.  
  12.        Dim ResultStream As MemoryStream = Nothing
  13.        Dim DeCompresser As DeflateStream = Nothing
  14.        Dim A As Integer, B As New List(Of Byte)
  15.  
  16.        Try
  17.  
  18.            If Action = CompressionMode.Compress Then
  19.                ResultStream = New MemoryStream
  20.                DeCompresser = New DeflateStream(ResultStream, CompressionMode.Compress)
  21.                DeCompresser.Write(Data, 0, Data.Length)
  22.                ResultStream.Position = 0
  23.                DeflateDeCompress = ResultStream.ToArray
  24.            Else
  25.                ResultStream = New MemoryStream(Data)
  26.                ResultStream.Position = 0
  27.                DeCompresser = New DeflateStream(ResultStream, CompressionMode.Decompress)
  28.                DeflateDeCompress = New Byte() {}
  29.  
  30.                DeCompresser.ReadByte() : A = DeCompresser.ReadByte
  31.  
  32.                While A <> -1
  33.                    B.Add(CByte(A))
  34.                    A = DeCompresser.ReadByte
  35.                End While
  36.  
  37.                DeflateDeCompress = B.ToArray : B.Clear()
  38.  
  39.            End If
  40.  
  41.            If DeCompresser IsNot Nothing Then
  42.                DeCompresser.Dispose()
  43.            End If
  44.  
  45.            If ResultStream IsNot Nothing Then
  46.                ResultStream.Dispose()
  47.            End If
  48.  
  49.        Catch ex As Exception
  50.            Return Nothing
  51.        End Try
  52.  
  53.    End Function
  54.  
  55. #End Region
  56.  
  57.    Public Function MD5_String(ByVal Data As Byte()) As String
  58.  
  59.        Return BitConverter.ToString(MD5.Create.ComputeHash(Data)).Replace("-", "").ToLower
  60.  
  61.    End Function
  62.  
  63.    Sub Main()
  64.  
  65.        Dim x As String = "C:\ejemplo.txt"
  66.        Dim y As Byte() = File.ReadAllBytes(x)
  67.        Dim z As Byte() = DeflateDeCompress(y, CompressionMode.Compress)
  68.        Dim a As Byte() = DeflateDeCompress(z, CompressionMode.Decompress)
  69.  
  70.        Console.WriteLine("Archivo de Entrada: {0}", x)
  71.        Console.WriteLine("Tamaño de Entrada: {0} bytes", y.Length)
  72.        Console.WriteLine("MD5-{0}", MD5_String(y))
  73.        Console.WriteLine()
  74.        Console.WriteLine("Tamaño Comprimido: {0} bytes ({1}%)", z.Length, Math.Round(z.Length / y.Length * 100 - 100, 2))
  75.        Console.WriteLine("MD5-{0}", MD5_String(z))
  76.        Console.WriteLine()
  77.        Console.WriteLine("Tamaño Descomprimido: {0} bytes", a.Length)
  78.        Console.WriteLine("MD5-{0}", MD5_String(a))
  79.        Console.WriteLine()
  80.        Console.WriteLine("Perdida de {0} bytes", y.Length - a.Length)
  81.  
  82.        Erase y, z, a
  83.  
  84.        Console.Read()
  85.  
  86.    End Sub
  87.  
  88. End Module
  89.  

Gracias de antemano :)
6  Programación / Ingeniería Inversa / CrackMe v4.5 [Reto] en: 11 Marzo 2012, 02:24 am
Yo estoy en desarrollo en un proyecto de un ofuscador que dejo cada 1 mes y luego sigo cuando pierdo la frustración :xD

En Reparación
:-X

La única pista que les daré es que use otro programa además de mi ofuscador por sobre el ejecutable.

Es el mismo CrackMe con 2 protecciones distintas:

Nro. 1
http://speedy.sh/y8gFz/CrackMe-1.rar

Nro. 2
http://speedy.sh/Bqjpu/CrackMe-2.rar

El CrackMe se considera resuelto cuando logren obtener una licencia comercial. Son libres de publicar como lo solucionaron.

Me gustaría su opinión de cual protección les pareció mas compleja.
7  Programación / .NET (C#, VB.NET, ASP) / Delegados Generales [Aporte] en: 19 Febrero 2012, 22:59 pm
Hace mucho tiempo que no publico nada, y la razón es que estoy superocupado :xD

Pero les traigo un aporte que seguro les servirá a muchos, cuando hice una aplicación que usaba Threads, y me di cuenta que no podía acceder a los controles, además eran demasiados controles, y propiedades para hacer un sub/function delegada para cada una de las propiedades de cada uno de los controles, lo resolví así:

Código
  1. #Region " Delegados "
  2.  
  3.        Public Delegate Sub SetProperty_Delegate( _
  4.                       ByVal ObjectControl As Control, _
  5.                       ByVal ObjectName As String, _
  6.                       ByVal ObjectValue As Object)
  7.  
  8.        Public Sub SetProperty( _
  9.                              ByVal ObjectControl As Control, _
  10.                              ByVal ObjectName As String, _
  11.                              ByVal ObjectValue As Object)
  12.            If ObjectControl.InvokeRequired Then
  13.                ObjectControl.Invoke(New SetProperty_Delegate(AddressOf SetProperty), _
  14.                                     New Object() {ObjectControl, ObjectName, ObjectValue})
  15.            Else
  16.                ObjectControl.GetType.GetProperty(ObjectName).SetValue( _
  17.                                                  ObjectControl, _
  18.                                                  ObjectValue, _
  19.                                                  Nothing)
  20.            End If
  21.        End Sub
  22.  
  23.        Public Delegate Function GetProperty_Delegate( _
  24.                          ByVal ObjectControl As Control, _
  25.                          ByVal ObjectName As String) As Object
  26.  
  27.        Public Function GetProperty(ByVal ObjectControl As Control, _
  28.                              ByVal ObjectName As String) As Object
  29.            If ObjectControl.InvokeRequired Then
  30.                Return ObjectControl.Invoke(New GetProperty_Delegate(AddressOf GetProperty), _
  31.                                     New Object() {ObjectControl, ObjectName})
  32.            Else
  33.                Return ObjectControl.GetType.GetProperty(ObjectName).GetValue( _
  34.                                                  ObjectControl, _
  35.                                                  Nothing)
  36.            End If
  37.        End Function
  38.  
  39.        Public Delegate Function CallMethod_Delegate( _
  40.                      ByVal ObjectControl As Control, _
  41.                      ByVal ObjectName As String, _
  42.                      ByVal ObjectParams As Object(), _
  43.                      ByVal ObjectParamsType As Type()) As Object
  44.  
  45.        Public Function CallMethod( _
  46.                              ByVal ObjectControl As Control, _
  47.                              ByVal ObjectName As String, _
  48.                              Optional ByVal ObjectParams As Object() = Nothing, _
  49.                              Optional ByVal ObjectParamsType As Type() = Nothing) As Object
  50.  
  51.            If ObjectParams Is Nothing Then
  52.                ObjectParams = New Object() {}
  53.            End If
  54.  
  55.            If ObjectControl.InvokeRequired Then
  56.                Return ObjectControl.Invoke(New CallMethod_Delegate(AddressOf CallMethod), _
  57.                                     New Object() {ObjectControl, ObjectName, ObjectParams, ObjectParamsType})
  58.            Else
  59.                If ObjectParamsType Is Nothing Then
  60.                    Return ObjectControl.GetType.GetMethod(ObjectName).Invoke( _
  61.                                      ObjectControl, _
  62.                                      ObjectParams)
  63.                Else
  64.                    Return ObjectControl.GetType.GetMethod(ObjectName, ObjectParamsType).Invoke( _
  65.                                      ObjectControl, _
  66.                                      ObjectParams)
  67.                End If
  68.            End If
  69.        End Function
  70.  
  71. #End Region

Establece, obtiene y llama propiedades y métodos de forma segura, solo por el nombre.

Algunos ejemplos, de como se usa:

Código
  1. SetProperty(Me, "Text", "Código Seguro") 'Establece la propiedad Text en Me
  2. GetProperty(Me, "Size") 'Obtiene el Size de Me
  3. CalMethod(Me, "Focus", New Object(){}, New Type(){}) 'Llama el sub Focus de Me
  4.  

CallMethod se llama, pasando el objeto del control, seguido del nombre del método a llamar, un array de object con contiene los parámetros, y un array de Type que contiene los tipos correspondientes para la lista de parámetros, para seleccionar el método correcto en caso de una sobrecarga.
8  Programación / .NET (C#, VB.NET, ASP) / Captcha v2.1 [Update] en: 22 Diciembre 2011, 01:17 am
Bueno el Captcha v1.0 se quedo en pañales >:D

   


Los cambios fueron:

  • Las letras ahora pueden chocar entre sí
  • La tipografía, el grosor y el estilo de cada letra es distinto
  • Las lineas horizontales que antes estaban en cada letra ahora ocupan la imagen completamente
  • Algunas letras pueden salirse de los limites pero seguirán entendiéndose

El cambio más radical fue la fórmula que separa las letras y les da el tamaño adecuado, ahora se toma en cuenta el ángulo, un poco de pitagoras y trigonometría fue necesario :( :xD
9  Programación / .NET (C#, VB.NET, ASP) / Captcha [Aporte] en: 10 Noviembre 2011, 03:55 am
Necesitaba un Captcha para un proyecto que llevo en marcha y decidí hacer una clase 'Captcha' yo mismo les dejo una imagen y un proyecto ejemplo, espero que a alguien le sirva :P

10  Programación / .NET (C#, VB.NET, ASP) / Clase que Captura el Inicio y Cierre de Procesos [Aporte] [WMI] en: 28 Septiembre 2011, 22:20 pm
Bueno decidí compartir este código lo acabo de hacer sirve para capturar los procesos que se han iniciado y los que se han terminado, me parece bastante útil, utiliza como base WMI solo que en la clase está mucho más administrado y más cómodo de utilizar. Deben liberar el objeto con .Dispose cuando vayan a cerrar la aplicación que use la clase o lanza un error.

Código
  1. Public Class ProcessWatcher
  2.  
  3.    Partial Class StoppedProcess
  4.  
  5.        Public Sub New(ByVal PropertiesDictionary As Dictionary(Of String, Object))
  6.  
  7.            Dim AllFlags As BindingFlags = &H107FF7F
  8.            Dim Field As FieldInfo = Nothing
  9.  
  10.            For Each FieldProperty As KeyValuePair(Of String, Object) In PropertiesDictionary
  11.                Field = Me.GetType.GetField("_" & FieldProperty.Key, AllFlags)
  12.                If Field IsNot Nothing Then
  13.                    Field.SetValue(Me, FieldProperty.Value)
  14.                End If
  15.            Next
  16.  
  17.        End Sub
  18.  
  19. #Region " Properties "
  20.  
  21.        Private _ProcessName As String
  22.        Public ReadOnly Property ProcessName() As String
  23.            Get
  24.                Return _ProcessName
  25.            End Get
  26.        End Property
  27.  
  28.        Private _ProcessID As UInteger
  29.        Public ReadOnly Property Id() As UInteger
  30.            Get
  31.                Return _ProcessID
  32.            End Get
  33.        End Property
  34.  
  35.        Private _ParentProcessID As UInteger
  36.        Public ReadOnly Property ParentProcessId() As UInteger
  37.            Get
  38.                Return _ParentProcessID
  39.            End Get
  40.        End Property
  41.  
  42.        Private _ExitStatus As UInteger
  43.        Public ReadOnly Property ExitCode() As UInteger
  44.            Get
  45.                Return _ExitStatus
  46.                Process.GetCurrentProcess()
  47.            End Get
  48.        End Property
  49.  
  50.        Private _SessionID As UInteger
  51.        Public ReadOnly Property SessionId() As UInteger
  52.            Get
  53.                Return _SessionID
  54.            End Get
  55.        End Property
  56.  
  57. #End Region
  58.  
  59.    End Class
  60.  
  61.    Public Event Started(ByVal e As Process)
  62.    Public Event Stopped(ByVal e As StoppedProcess)
  63.  
  64.    Private ProcessQueryEvent_Start As WqlEventQuery
  65.    Private ProcessWatcher_Start As ManagementEventWatcher
  66.  
  67.    Private ProcessQueryEvent_Stop As WqlEventQuery
  68.    Private ProcessWatcher_Stop As ManagementEventWatcher
  69.  
  70.    Private WatcherEnabled As Boolean = False
  71.  
  72.    Public Sub New(Optional ByVal AutoStart As Boolean = True, _
  73.                   Optional ByVal SetAsFalseCheckForIllegalCrossThreadCalls As Boolean = False, _
  74.                   Optional ByVal Frequency As Double = 1000)
  75.  
  76.        ProcessQueryEvent_Start = New WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace")
  77.        ProcessWatcher_Start = New ManagementEventWatcher(ProcessQueryEvent_Start)
  78.  
  79.        ProcessQueryEvent_Stop = New WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace")
  80.        ProcessWatcher_Stop = New ManagementEventWatcher(ProcessQueryEvent_Stop)
  81.  
  82.        AddHandler ProcessWatcher_Start.EventArrived, AddressOf StartEvent
  83.        AddHandler ProcessWatcher_Stop.EventArrived, AddressOf StopEvent
  84.  
  85.        ProcessQueryEvent_Start.WithinInterval = TimeSpan.FromMilliseconds(Frequency)
  86.        ProcessQueryEvent_Stop.WithinInterval = TimeSpan.FromMilliseconds(Frequency)
  87.  
  88.        Control.CheckForIllegalCrossThreadCalls = Not SetAsFalseCheckForIllegalCrossThreadCalls
  89.  
  90.        If AutoStart Then
  91.            Enabled = True
  92.        End If
  93.  
  94.    End Sub
  95.  
  96.    Private Sub StopEvent(ByVal sender As Object, ByVal e As EventArrivedEventArgs)
  97.  
  98.        Dim RawDictionary As New Dictionary(Of String, Object)
  99.  
  100.        For Each ProcessProperty As PropertyData In e.NewEvent.Properties
  101.            If Not ProcessProperty.IsArray Then
  102.                RawDictionary.Add(ProcessProperty.Name, e.NewEvent(ProcessProperty.Name))
  103.            End If
  104.        Next
  105.  
  106.        RaiseEvent Stopped(New StoppedProcess(RawDictionary))
  107.  
  108.    End Sub
  109.  
  110.    Private Sub StartEvent(ByVal sender As Object, ByVal e As EventArrivedEventArgs)
  111.        RaiseEvent Started(Process.GetProcessById(e.NewEvent("ProcessID")))
  112.    End Sub
  113.  
  114.    Public Property Frequency() As Double
  115.        Get
  116.            Return ProcessQueryEvent_Start.WithinInterval.TotalMilliseconds
  117.        End Get
  118.        Set(ByVal value As Double)
  119.            If value < 0 Then
  120.                Throw New ArgumentException("value")
  121.            Else
  122.                ProcessQueryEvent_Start.WithinInterval = TimeSpan.FromMilliseconds(value)
  123.                ProcessQueryEvent_Stop.WithinInterval = TimeSpan.FromMilliseconds(value)
  124.            End If
  125.        End Set
  126.    End Property
  127.  
  128.    Public Property Enabled() As Boolean
  129.        Get
  130.            Return WatcherEnabled
  131.        End Get
  132.        Set(ByVal value As Boolean)
  133.            If WatcherEnabled Then
  134.                ProcessWatcher_Start.Stop()
  135.                ProcessWatcher_Stop.Stop()
  136.            Else
  137.                ProcessWatcher_Start.Start()
  138.                ProcessWatcher_Stop.Start()
  139.            End If
  140.            WatcherEnabled = Not WatcherEnabled
  141.        End Set
  142.    End Property
  143.  
  144.    Public Sub Dispose()
  145.  
  146.        If Enabled Then
  147.            ProcessWatcher_Start.Stop()
  148.            ProcessWatcher_Stop.Stop()
  149.        End If
  150.  
  151.        ProcessWatcher_Start.Dispose()
  152.        ProcessWatcher_Stop.Dispose()
  153.  
  154.    End Sub
  155.  
  156. End Class
  157.  

Un poco largo el código :-X

Los parametros del constructor son:

AutoStart, Boolean, True para iniciar automáticamente con la construcción y False para iniciar después mediante la propiedad Enabled.

SetAsFalseCheckForIllegalCrossThreadCalls
, Boolean, True para desactivar la detección de llamadas de controles fuera del MainThread y false para activar.

Frequency, Double, el intervalo en milisegundos en cuál se va a chequear.
Páginas: [1] 2 3 4 5 6 7
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines