Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Keyen Night

#1
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
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
.NET (C#, VB.NET, ASP) / Fondo Blur GDI+ [Aporte]
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 (vb.net) [Seleccionar]

Module BlurBackground

   Private WithEvents Background As New Form With {.Bounds = SystemInformation.VirtualScreen, _
                                                   .StartPosition = FormStartPosition.Manual, _
                                                   .TopMost = True, _
                                                   .Opacity = 0, _
                                                   .BackgroundImageLayout = ImageLayout.None, _
                                                   .FormBorderStyle = FormBorderStyle.None, _
                                                   .BackgroundImage = Nothing, _
                                                   .ShowIcon = False, _
                                                   .ShowInTaskbar = False}

   Private WithEvents Timer As New Timer With {.Enabled = False, .Interval = 1}

   Public Speed As Double

   Private Sub BlurBitmap(ByRef Image As Bitmap, Optional ByVal BlurForce As Integer = 1)
       Dim _
       Graph As Graphics = Graphics.FromImage(Image), _
       ImgAtt As New ImageAttributes, _
       Matrix As New ColorMatrix
       Matrix.Matrix33 = 0.5F
       ImgAtt.SetColorMatrix(Matrix)
       For x As Integer = -BlurForce To BlurForce
           For y As Integer = -BlurForce To BlurForce
               Graph.DrawImage(Image, New Rectangle(x, y, _
                                                    Image.Width, _
                                                    Image.Height), _
                                                    0, 0, Image.Width, _
                                                    Image.Height, _
                                                    GraphicsUnit.Pixel, ImgAtt)
           Next
       Next
       ImgAtt.Dispose()
       Graph.Dispose()
   End Sub

   Public Sub ShowBackground()

       If Background.BackgroundImage IsNot Nothing Then
           Background.BackgroundImage.Dispose()
       End If

       Dim BlurBack As New Bitmap(SystemInformation.VirtualScreen.Width, _
                                  SystemInformation.VirtualScreen.Height)

       Dim BlurGraph As Graphics = Graphics.FromImage(BlurBack)

       BlurGraph.CopyFromScreen(0, 0, 0, 0, SystemInformation.VirtualScreen.Size)

       BlurBitmap(BlurBack, 2)

       BlurGraph.Dispose()

       Background.BackgroundImage = BlurBack
       If Not Timer.Enabled And Not Background.Visible Then
           Background.Show()
           Speed = 0.025
           Timer.Start()
       End If
   End Sub

   Public Sub HideBackground()
       If Not Timer.Enabled And Background.Visible Then
           Speed = -0.025
           Timer.Start()
       End If
   End Sub

   Private Sub Timer_Tick(ByVal sender As Timer, ByVal e As System.EventArgs) Handles Timer.Tick

       Select Case Background.Opacity + Speed
           Case Is > 1
               Timer.Stop()
               Exit Sub
           Case Is < 0
               Timer.Stop()
               Background.Hide()
       End Select

       Background.Opacity += Speed

   End Sub

   'Solo por seguridad para cerrar el Form con un click'
   Private Sub Background_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Background.Click
       HideBackground()
   End Sub

End Module

#4
.NET (C#, VB.NET, ASP) / Captcha v3.0
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
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 (vb.net) [Seleccionar]

Imports System.IO, System.IO.Compression, System.Text, System.Security.Cryptography

Module Module1

#Region " Algoritmo de DeCompresión Deflate "

   Public Function DeflateDeCompress(ByVal Data As Byte(), _
                                     ByVal Action As CompressionMode) As Byte()

       DeflateDeCompress = Nothing

       Dim ResultStream As MemoryStream = Nothing
       Dim DeCompresser As DeflateStream = Nothing
       Dim A As Integer, B As New List(Of Byte)

       Try

           If Action = CompressionMode.Compress Then
               ResultStream = New MemoryStream
               DeCompresser = New DeflateStream(ResultStream, CompressionMode.Compress)
               DeCompresser.Write(Data, 0, Data.Length)
               ResultStream.Position = 0
               DeflateDeCompress = ResultStream.ToArray
           Else
               ResultStream = New MemoryStream(Data)
               ResultStream.Position = 0
               DeCompresser = New DeflateStream(ResultStream, CompressionMode.Decompress)
               DeflateDeCompress = New Byte() {}

               DeCompresser.ReadByte() : A = DeCompresser.ReadByte

               While A <> -1
                   B.Add(CByte(A))
                   A = DeCompresser.ReadByte
               End While

               DeflateDeCompress = B.ToArray : B.Clear()

           End If

           If DeCompresser IsNot Nothing Then
               DeCompresser.Dispose()
           End If

           If ResultStream IsNot Nothing Then
               ResultStream.Dispose()
           End If

       Catch ex As Exception
           Return Nothing
       End Try

   End Function

#End Region

   Public Function MD5_String(ByVal Data As Byte()) As String

       Return BitConverter.ToString(MD5.Create.ComputeHash(Data)).Replace("-", "").ToLower

   End Function

   Sub Main()

       Dim x As String = "C:\ejemplo.txt"
        Dim y As Byte() = File.ReadAllBytes(x)
        Dim z As Byte() = DeflateDeCompress(y, CompressionMode.Compress)
        Dim a As Byte() = DeflateDeCompress(z, CompressionMode.Decompress)

        Console.WriteLine("Archivo de Entrada: {0}", x)
        Console.WriteLine("Tamaño de Entrada: {0} bytes", y.Length)
        Console.WriteLine("MD5-{0}", MD5_String(y))
        Console.WriteLine()
        Console.WriteLine("Tamaño Comprimido: {0} bytes ({1}%)", z.Length, Math.Round(z.Length / y.Length * 100 - 100, 2))
        Console.WriteLine("MD5-{0}", MD5_String(z))
        Console.WriteLine()
        Console.WriteLine("Tamaño Descomprimido: {0} bytes", a.Length)
        Console.WriteLine("MD5-{0}", MD5_String(a))
        Console.WriteLine()
        Console.WriteLine("Perdida de {0} bytes", y.Length - a.Length)

        Erase y, z, a

        Console.Read()

   End Sub

End Module


Gracias de antemano :)
#6
Ingeniería Inversa / CrackMe v4.5 [Reto]
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
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 (vb.net) [Seleccionar]
#Region " Delegados "

       Public Delegate Sub SetProperty_Delegate( _
                      ByVal ObjectControl As Control, _
                      ByVal ObjectName As String, _
                      ByVal ObjectValue As Object)

       Public Sub SetProperty( _
                             ByVal ObjectControl As Control, _
                             ByVal ObjectName As String, _
                             ByVal ObjectValue As Object)
           If ObjectControl.InvokeRequired Then
               ObjectControl.Invoke(New SetProperty_Delegate(AddressOf SetProperty), _
                                    New Object() {ObjectControl, ObjectName, ObjectValue})
           Else
               ObjectControl.GetType.GetProperty(ObjectName).SetValue( _
                                                 ObjectControl, _
                                                 ObjectValue, _
                                                 Nothing)
           End If
       End Sub

       Public Delegate Function GetProperty_Delegate( _
                         ByVal ObjectControl As Control, _
                         ByVal ObjectName As String) As Object

       Public Function GetProperty(ByVal ObjectControl As Control, _
                             ByVal ObjectName As String) As Object
           If ObjectControl.InvokeRequired Then
               Return ObjectControl.Invoke(New GetProperty_Delegate(AddressOf GetProperty), _
                                    New Object() {ObjectControl, ObjectName})
           Else
               Return ObjectControl.GetType.GetProperty(ObjectName).GetValue( _
                                                 ObjectControl, _
                                                 Nothing)
           End If
       End Function

       Public Delegate Function CallMethod_Delegate( _
                     ByVal ObjectControl As Control, _
                     ByVal ObjectName As String, _
                     ByVal ObjectParams As Object(), _
                     ByVal ObjectParamsType As Type()) As Object

       Public Function CallMethod( _
                             ByVal ObjectControl As Control, _
                             ByVal ObjectName As String, _
                             Optional ByVal ObjectParams As Object() = Nothing, _
                             Optional ByVal ObjectParamsType As Type() = Nothing) As Object

           If ObjectParams Is Nothing Then
               ObjectParams = New Object() {}
           End If

           If ObjectControl.InvokeRequired Then
               Return ObjectControl.Invoke(New CallMethod_Delegate(AddressOf CallMethod), _
                                    New Object() {ObjectControl, ObjectName, ObjectParams, ObjectParamsType})
           Else
               If ObjectParamsType Is Nothing Then
                   Return ObjectControl.GetType.GetMethod(ObjectName).Invoke( _
                                     ObjectControl, _
                                     ObjectParams)
               Else
                   Return ObjectControl.GetType.GetMethod(ObjectName, ObjectParamsType).Invoke( _
                                     ObjectControl, _
                                     ObjectParams)
               End If
           End If
       End Function

#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 (vb.net) [Seleccionar]

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


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
.NET (C#, VB.NET, ASP) / Captcha v2.1 [Update]
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
.NET (C#, VB.NET, ASP) / Captcha [Aporte]
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
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 (vb.net) [Seleccionar]
Public Class ProcessWatcher

    Partial Class StoppedProcess

        Public Sub New(ByVal PropertiesDictionary As Dictionary(Of String, Object))

            Dim AllFlags As BindingFlags = &H107FF7F
            Dim Field As FieldInfo = Nothing

            For Each FieldProperty As KeyValuePair(Of String, Object) In PropertiesDictionary
                Field = Me.GetType.GetField("_" & FieldProperty.Key, AllFlags)
                If Field IsNot Nothing Then
                    Field.SetValue(Me, FieldProperty.Value)
                End If
            Next

        End Sub

#Region " Properties "

        Private _ProcessName As String
        Public ReadOnly Property ProcessName() As String
            Get
                Return _ProcessName
            End Get
        End Property

        Private _ProcessID As UInteger
        Public ReadOnly Property Id() As UInteger
            Get
                Return _ProcessID
            End Get
        End Property

        Private _ParentProcessID As UInteger
        Public ReadOnly Property ParentProcessId() As UInteger
            Get
                Return _ParentProcessID
            End Get
        End Property

        Private _ExitStatus As UInteger
        Public ReadOnly Property ExitCode() As UInteger
            Get
                Return _ExitStatus
                Process.GetCurrentProcess()
            End Get
        End Property

        Private _SessionID As UInteger
        Public ReadOnly Property SessionId() As UInteger
            Get
                Return _SessionID
            End Get
        End Property

#End Region

    End Class

    Public Event Started(ByVal e As Process)
    Public Event Stopped(ByVal e As StoppedProcess)

    Private ProcessQueryEvent_Start As WqlEventQuery
    Private ProcessWatcher_Start As ManagementEventWatcher

    Private ProcessQueryEvent_Stop As WqlEventQuery
    Private ProcessWatcher_Stop As ManagementEventWatcher

    Private WatcherEnabled As Boolean = False

    Public Sub New(Optional ByVal AutoStart As Boolean = True, _
                   Optional ByVal SetAsFalseCheckForIllegalCrossThreadCalls As Boolean = False, _
                   Optional ByVal Frequency As Double = 1000)

        ProcessQueryEvent_Start = New WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace")
        ProcessWatcher_Start = New ManagementEventWatcher(ProcessQueryEvent_Start)

        ProcessQueryEvent_Stop = New WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace")
        ProcessWatcher_Stop = New ManagementEventWatcher(ProcessQueryEvent_Stop)

        AddHandler ProcessWatcher_Start.EventArrived, AddressOf StartEvent
        AddHandler ProcessWatcher_Stop.EventArrived, AddressOf StopEvent

        ProcessQueryEvent_Start.WithinInterval = TimeSpan.FromMilliseconds(Frequency)
        ProcessQueryEvent_Stop.WithinInterval = TimeSpan.FromMilliseconds(Frequency)

        Control.CheckForIllegalCrossThreadCalls = Not SetAsFalseCheckForIllegalCrossThreadCalls

        If AutoStart Then
            Enabled = True
        End If

    End Sub

    Private Sub StopEvent(ByVal sender As Object, ByVal e As EventArrivedEventArgs)

        Dim RawDictionary As New Dictionary(Of String, Object)

        For Each ProcessProperty As PropertyData In e.NewEvent.Properties
            If Not ProcessProperty.IsArray Then
                RawDictionary.Add(ProcessProperty.Name, e.NewEvent(ProcessProperty.Name))
            End If
        Next

        RaiseEvent Stopped(New StoppedProcess(RawDictionary))

    End Sub

    Private Sub StartEvent(ByVal sender As Object, ByVal e As EventArrivedEventArgs)
        RaiseEvent Started(Process.GetProcessById(e.NewEvent("ProcessID")))
    End Sub

    Public Property Frequency() As Double
        Get
            Return ProcessQueryEvent_Start.WithinInterval.TotalMilliseconds
        End Get
        Set(ByVal value As Double)
            If value < 0 Then
                Throw New ArgumentException("value")
            Else
                ProcessQueryEvent_Start.WithinInterval = TimeSpan.FromMilliseconds(value)
                ProcessQueryEvent_Stop.WithinInterval = TimeSpan.FromMilliseconds(value)
            End If
        End Set
    End Property

    Public Property Enabled() As Boolean
        Get
            Return WatcherEnabled
        End Get
        Set(ByVal value As Boolean)
            If WatcherEnabled Then
                ProcessWatcher_Start.Stop()
                ProcessWatcher_Stop.Stop()
            Else
                ProcessWatcher_Start.Start()
                ProcessWatcher_Stop.Start()
            End If
            WatcherEnabled = Not WatcherEnabled
        End Set
    End Property

    Public Sub Dispose()

        If Enabled Then
            ProcessWatcher_Start.Stop()
            ProcessWatcher_Stop.Stop()
        End If

        ProcessWatcher_Start.Dispose()
        ProcessWatcher_Stop.Dispose()

    End Sub

End Class


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.
#11
Estuve prácticando hacer un algoritmo sencillo para generar números aletorios porque ya saben el de Visual Studio tiene muchos errores no me gusta :silbar:

El principal problema es la semilla que siempre usamos, datos que cambian constantemente como los Ticks del sistema o la hora, pero lamentablemente los procesadores de hoy en día trabajan tan rápido que en un milisegundo se producen miles de números "aletorios" con la misma semilla, y obtenemos horribles patrones o muchos números repetidos.

La función obtiene una cantidad Count de valores entre Min y Max de números pseudoaleatorios.

Código (vb.net,9,10) [Seleccionar]
   Public Function RandomEx(ByVal Min As Long, ByVal Max As Long, Optional ByVal Count As ULong = 1) As Long()

       RandomEx = New Long() {}

       Dim Seed As Long = Date.Now.Ticks

       Do While RandomEx.Length <> Count
           Array.Resize(RandomEx, RandomEx.Length + 1)
           RandomEx.SetValue((Seed Mod (Max + 1)) + Min, RandomEx.Length - 1)
           Seed -= Math.Floor(Seed / (Count + 1))
       Loop

   End Function


Básicamente esto se encarga de colocar a Seed entre Min y Max
(Seed Mod (Max + 1)) + Min

Y esto de mantener a Seed diferente en cada vuelta del búcle, la fórmula asegura que Seed siempre será diferente sin causar Overflow.
Seed -= Math.Floor(Seed / (Count + 1))

#12
Quiero crear hacer un Handler con Delegate, me explico, normalmente uno hace un Handler así:

Código (vb.net) [Seleccionar]
   Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       MessageBox.Show("Hola")
   End Sub


Usando la instrucción Handles

Yo quiero hacerlo así:

Código (vb.net) [Seleccionar]
       

   Public Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
       MessageBox.Show("Hola")
   End Sub

       Dim MethodName As String = "Button1_Click"
       Dim HandlerType As Type = GetType(EventHandler)
       Dim MethodI As MethodInfo = Me.GetType.GetMethod(MethodName)

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Dim MethodName As String = "Button1_Click"
       Dim HandlerType As Type = GetType(EventHandler)
       Dim MethodI As MethodInfo = Me.GetType.GetMethod(MethodName)
       Dim DelegateEvent As [Delegate] = _
       [Delegate].CreateDelegate( _
       HandlerType, _
       MethodI, _
       True)

       AddHandler Button1.Click, DelegateEvent

End Sub


Cuando creo el DelegateEvent da el error Error al enlazar con el método de destino.

No sé si este bien, ¿Qué está mal hecho?

Lo he logrado con este código

Código (vb.net) [Seleccionar]
    Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim MethodName As String = "Button4_Click"
        Dim HandlerType As Type = GetType(EventHandler)
        Dim MethodI As MethodInfo = Me.GetType.GetMethod(MethodName)
        Dim DelegateEvent As [Delegate] = _
        [Delegate].CreateDelegate( _
        HandlerType, _
        Me, _
        MethodName)

        AddHandler Button4.Click, DelegateEvent

    End Sub
#13
.NET (C#, VB.NET, ASP) / Temperatura del CPU
2 Septiembre 2011, 19:58 PM
No he podido encontrar una forma de obtener la temperatura del CPU que funcione en las páginas de Google así como en Microsoft sale este código:

Código (vb.net) [Seleccionar]
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Try

            Dim searcher As New ManagementObjectSearcher( _
                "root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature")

            For Each queryObj As ManagementObject In searcher.Get()

                Dim temp As Double = CDbl(queryObj("CurrentTemperature"))

                temp = (temp - 2732) / 10.0

                MessageBox.Show(temp.ToString)

            Next

        Catch err As ManagementException

            MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)

        End Try

    End Sub

End Class


Que obviamente  funciona pero parace ser incompatible con Windows Vista/7, incluso el mensaje de error dice explícitamente "Incompatible", alguna otra forma de obtener la temperatura del CPU? Gracias.
#14
Estoy haciendo acelerando un código que tengo para factorizar enteros muy grandes, me va muy bien, pero tengo un problema, no puedo trabajar con números grandes sin que .Net los exprese en Notación Científica :s

¿Como puedo hacer para que exprese los números de manera normal?, ya que al pasar un número a notación científica se ignoran muchos números que generan un grave desajuste al momento de hacer un cálculo.

Así podemos ver como se expresa el número:

Código (vb.net) [Seleccionar]


       Dim X As Double = Double.MaxValue

       Console.WriteLine(X)
       Console.ReadKey()

#15
LLevo no mucho tiempo programando en C++ estoy intentando hacer un hook por inyección de código, tengo el código que inyecta código directamente en un proceso y tengo la funciones que hacen un hook por tramplín a una función (API). Quisas este equivocado o suene ignorante XD soy nuevo con los hook y estas cosas quisiera que me corrigieran si estoy equivocado, mi pregunta es: ¿debo inyectar en el proceso externo las funciones que se encargan del hook?, quiero decir para que el proceso externo ejecute el mismo la función que hookea el API. Pero no entiendo como hacerlo llevo horas y me tiene confundido :-X si me pudiesen hechar una mano solo darme el camino para seguir estaria agredecido. Les dejo los sources:

Hook por Trampolín (Ejemplo en el mismo Proceso)
Código (c++) [Seleccionar]

#include <windows.h>
#include <stdio.h>

DWORD HookFunction(LPCSTR lpModule, LPCSTR lpFuncName, LPVOID lpFunction, unsigned char *lpBackup);
BOOL UnHookFunction(LPCSTR lpModule, LPCSTR lpFuncName, unsigned char *lpBackup);
int Hooked_MessageBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);

BYTE BackUp[6];

LPCSTR Function = "MessageBoxExA";

void WinMainCRTStartup()
{

MessageBoxA(0, "=( Sin Hook", "", MB_OK); // Mensaje

HookFunction("user32.dll", Function, Hooked_MessageBox, BackUp); // Hookear Función

MessageBoxA(0, "=( Sin Hook", "", MB_OK); // Mensaje

}

int Hooked_MessageBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) // Función a la que se desvia la función original
{
UnHookFunction("user32.dll", Function, BackUp); // Se llama a la función UnHook para evitar la recursividad

int x = MessageBoxA(hWnd, "=) Hooked", lpCaption, uType); // Se llama la función original

HookFunction("user32.dll", Function, Hooked_MessageBox, BackUp); // Se aplica el Hook nuevamente
return x; // Se retorna el resultado de la función original
}

DWORD HookFunction(LPCSTR lpModule, LPCSTR lpFuncName, LPVOID lpFunction, unsigned char *lpBackup) // Función que realiza el Hook al API
{
DWORD dwAddr = (DWORD)GetProcAddress(GetModuleHandle(lpModule), lpFuncName); // Obtiene la dirección de la API
       // Array de opcodes en lenguaje de maquina (ASM) para desviar la función
BYTE jmp[6] = { 0xe9, //jmp
0x00, 0x00, 0x00, 0x00, //address
0xc3
}; //retn

ReadProcessMemory(GetCurrentProcess(), (LPVOID)dwAddr, lpBackup, 6, 0); // Se guardan los primeros 6 bytes de la función

DWORD dwCalc = ((DWORD)lpFunction - dwAddr - 5); // ( to - from) - 5 // Se calcula la posición donde se escribira el salto

memcpy(&jmp[1], &dwCalc, 4); // Se copia en memoria el salto

WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwAddr, jmp, 6, 0); // Se escribe en memoria los 6 bytes del salto

return dwAddr; // Se retorna la dirección del API
}

BOOL UnHookFunction(LPCSTR lpModule, LPCSTR lpFuncName, unsigned char *lpBackup) // Función que retira el Hook de la API
{
DWORD dwAddr = (DWORD)GetProcAddress(GetModuleHandle(lpModule), lpFuncName); // Se obtiene la dirección de la API

if (WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwAddr, lpBackup, 6, 0)) // Si se logra escribir los bytes guardados en la función HookFunction
{
return TRUE; // Se retorna TRUE
}
return FALSE; // Sino entonces se retorna FALSE
}


Inyecta código en un proceso externo (Ejemplo hacer que un proceso externo ejecute un MessageBox)
Código (c++) [Seleccionar]

#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>

//Creamos un puntero a la api que queremos inyectar
typedef int (WINAPI *datMessageBoxA) (HWND, LPCTSTR, LPCTSTR, UINT);

//La estructura que inyectaremos
struct datos
{
datMessageBoxA apiMessageBoxA;
char titulo  [20];
char mensaje [20];
};

//Declaración de funciones
DWORD GetAdres(char *module, char *function);

//La función que inyectaremos
DWORD inyectada (datos *data)
{
data -> apiMessageBoxA (0, data->mensaje, data->titulo, 0);
return 0;
}

//La función inyectora
void inyectora()
{
int      pid;          // Este es el pid del proceso en el que nos queremos inyectar
HANDLE  proc;        // El handle del proceso en el que inyectaremos
datos    dat;          // El tipo de dato de la estructura
DWORD    TamFun;      // El tamaño de la función a inyectar
void*    esp;          // Lugar de memoria donde copiaremos nuestra función

HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //Obtenemos el pid
PROCESSENTRY32 procinfo = { sizeof(PROCESSENTRY32) };
while(Process32Next(handle, &procinfo))
{
  if(!strcmp(procinfo.szExeFile, "APIHOOK.exe"))
  {
      CloseHandle(handle);
    pid = procinfo.th32ProcessID;
  }
}
CloseHandle(handle);

//Abrimos el proceso en el que nos inyectaremos
proc = OpenProcess(PROCESS_ALL_ACCESS, false, pid);

//Metemos la dirección de la api en la estructura llamando a la función GetAdres
dat.apiMessageBoxA = (datMessageBoxA) GetAdres ("USER32.DLL", "MessageBoxA");

//Inicializamos las variables que contendrán el mensaje
sprintf(dat.mensaje,"Mensaje");
sprintf(dat.titulo,"Texto");

//Reservamos espacio para nuestra estructura en el proceso a inyectar y la escribimos
datos *dat_ = (datos*) VirtualAllocEx(proc, 0, sizeof(datos), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(proc, dat_, &dat, sizeof(datos), NULL);

//Calculamos el tamaño de la función a inyectar
TamFun = (long unsigned int) inyectora - (long unsigned int)inyectada;

//Reservamos espacio para la función, escribimos en él y creamos un hilo
esp = VirtualAllocEx(proc, 0, TamFun, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(proc, esp, (void*)inyectada, TamFun, NULL);
CreateRemoteThread(proc, NULL, 0, (LPTHREAD_START_ROUTINE) esp, dat_, 0, NULL);
}

//La función main
int main()
{
inyectora();
system("pause>nul");
return EXIT_SUCCESS;
}

//Función que nos devuelve un DWORD con la dirección de una api
DWORD GetAdres(char *module, char *function)
{
HMODULE dh = LoadLibrary(module);
DWORD pf = (DWORD)GetProcAddress(dh,function);
FreeLibrary(dh);
return pf;
}
#16
Cada vez más rápido y con más soporte para números más grandes :laugh:

Quizás a alguien le sirva ;D factoriza números enteros incluso mayores que Decimal.MaxValue en menos de una décima de segundo para la mayoría hay números que se factorizan más lento que otros pero es un un porcentaje muy bajo. La solución es exponencial en tiempo polinomial, quiere decir que todo número N que sea Natural puede ser factorizado por este algoritmo en un tiempo relativamente corto y este se va exponiendo (Aumentando) con los dígitos que contenga N.

Código (vb.net) [Seleccionar]
   Function PSqrt(ByVal N As Decimal) As Decimal

       PSqrt = 1D

       Try

           Dim L As Decimal = Math.Floor(Math.Log(N))
           Dim b As Decimal, c As Decimal, d As Decimal


           For a As Decimal = L To 2D Step -1D
               b = 1D / a
               c = Math.Floor(N ^ b)
               d = (c ^ a)
               If d = N Then
                   Return a
               End If
           Next

       Catch ex As OverflowException
           Return 1D
       End Try

   End Function

   Public Primes As Decimal() = New Decimal() {2D, 3D, 5D, 7D}
   Public Function IsPrime(ByVal N As Decimal) As Boolean

       If (N Mod 2D = 0D) Then
           Return False
       End If

       If PSqrt(N) > 1D Then
           Return False
       End If

       If Primes.Contains(N) Then
           Return True
       End If

       IsPrime = True

       Dim R As Decimal = Math.Floor(Math.Sqrt(N))

       For Y As Decimal = 3D To R Step 2D
           If (N Mod Y = 0D) And (Not Y = N) Then
               Return False
           End If
       Next

   End Function

   Public Function Factorize(ByVal N As Decimal) As Dictionary(Of Decimal, Decimal)

       Factorize = New Dictionary(Of Decimal, Decimal)

       Dim PSqrtD As Decimal = PSqrt(N)

       If PSqrtD > 1D Then

           Dim SSqrt As Decimal = N ^ (1D / PSqrtD)

           If IsPrime(SSqrt) Then
               Factorize.Add(SSqrt, PSqrtD)
           Else
               For Each x As KeyValuePair(Of Decimal, Decimal) In Factorize(SSqrt)
                   Factorize.Add(x.Key, x.Value * PSqrtD)
               Next
           End If

       Else
           If IsPrime(N) Then
               Factorize.Add(N, 1D)
           Else

               While N Mod 2D = 0D
                   N /= 2D
                   If Factorize.ContainsKey(2D) Then
                       Factorize.Item(2D) += 1D
                   Else
                       Factorize.Add(2D, 1D)
                   End If
               End While

               If N > 1D Then
                   Dim I As Decimal = 3D
Again:
                   Dim R As Decimal = Math.Floor(Math.Sqrt(N))

                   For X As Decimal = I To R Step 2D

                       If N Mod X = 0D Then

                           If Factorize.ContainsKey(X) Then
                               Factorize.Item(X) += 1D
                           Else
                               Factorize.Add(X, 1D)
                           End If

                           N /= X
                           I = X

                           GoTo Again

                       End If

                   Next

                   If N > 1D Then
                       If Factorize.ContainsKey(N) Then
                           Factorize.Item(N) += 1D
                       Else
                           Factorize.Add(N, 1D)
                       End If
                   End If

               End If

           End If
       End If

   End Function


Bueno, y algunos se preguntarán como es posible que factorize el número 79.228.162.514.264.337.593.543.950.335 (Decimal más grande de 96 Bits soportado) en menos de 1 segundo :xD

Este algoritmo no se enfrasca en lo que hacen los demás, realizar ese For interminable desde 0 hasta N comprobando la divisibilidad y luego la primadilidad del número divisible, tardarías millones de años literalmente en factorizar el número anterior. Sino que se basa en leyes y propiedades básicas de los primos, por ejemplo:

Un N no puede tener más de un factor que supere su raíz, así que no encontraremos ningún factor que se repita 2 veces al pasar la raíz, de igual forma el primer divisible de N siempre es primo y se encuentra en el rango de 1 a raíz de N.

Ejemplo:

Los factores del número 123.456.789, su raíz redondeada es 11.111, están entre 2 y 11.111 y no pueden haber factores que se repitan más grandes que dicha raíz.


Debido a que los primos forman a los compuestos, siempre estará primero un primo que un compuesto en la recta numérica ya que el compuesto siguiente al primo esta conformado por un primo anterior.


Desde el 2 a todos los compuestos le antecede un primo e igualmente están compuestos por el primo que les antecedió

2, 3, 4, 5, 6, 7, 8, 9, ...

Siendo el 2, 3, 5 y 7 primos en esta recta, de manera que para el número 1.023, el primer
divisible que aparece es el 3 y este es primo, Otros divisibles de 1.023 quizás sean compuestos de
3 y debido a esto es imposible que se escape un compuesto en la lista porque siempre estará
primero un primo. Y así con cualquier número entero N que sea compuesto.


Al dividir el primer factor encontrado de N generará un compuesto y los factores de este serán
factores de N, aplicando este procedimiento hasta que se generé un número primo, se podrán
obtener todos los factores de N y cuantas veces estos se repiten. Dicho procedimiento no
consume casi tiempo ya que cada vez el valor generado se va haciendo más pequeño y el primer
factor se encontrará antes de la raíz así que el procedimiento se verá cortado antes de finalizar en
el caso de que N sea compuesto, no es necesario comprobar los números de 2 a raíz de N, se
puede disminuir el tiempo de operación a la mitad si se ignoran los números pares que son
compuestos de 2 y por lo tanto no pueden ser factores de N.


En el mismo caso del 1.023 el primer divisible es 3 y el resultado es 341, aplicamos el método
nuevamente y el primer divisible es 11 que también es primo eso da como resultado 31 que es un
primo y la operación no se puede continuar, esto arroja que los factores de 1.023 son 3, 11
y 31. Si comprobamos 3 * 11 * 31 = 1.023.



Un número N es cuadrado perfecto de indice I, cuando existe un número X en el rango [2D, Log(N)], que satisfaga la siguiente condición:


N ^ (1/X) 'Es Entero'
N ^ (1/X) ^ X = N


Lo que quiere decir que si N ^ (1/X) es primo, entonces N es compuesto por I factores de dicho primo. Si en cambio N ^ (1/X) es compuesto, entonces los factores de N serán I-ésimas veces los factores primos de dicho compuesto.

El restante de N después de aplicar el algoritmo, de dividir N por el primer factor que se encuentre hasta que no se encuentre ningún otro, es primo.
#17
Más descriptivo el titulo es imposible :laugh: como puedo obtener el offset y el size de la tabla de metada #strings en un assembly de .net?, creo que tiene que ver con el ManifestModule al cargar un assembly pero no tengo nada concreto...
#18
Despues de cargar un assembly con Assembly.LoadFile como lo descargo?, el problema es el siguiente:

Código (vb.net) [Seleccionar]
Dim A As Assembly = Assembly.LoadFile("C:\Ejemplo.exe")

Dim B As New FileStream("C:\Ejemplo.exe", FileMode.Open)


Lanza un error cuando abro el archivo dice que esta siendo usado en un proceso que es obviamente el mio ya lo comprobe y todo porque cargue el Assembly y ahora no se como se suelta. Que debo hacer para que esto no suceda?, Gracias :)
#19
Código (vb.net) [Seleccionar]
   Public Function ReadBytes(ByVal handle As IntPtr, ByVal address As Long, ByVal bytesToRead As UInteger) As Byte()

       Dim ptrBytesRead As IntPtr

       Dim buffer As Byte() = New Byte() {}

       ReadProcessMemory(handle, address, buffer, bytesToRead, ptrBytesRead)

       Return buffer

   End Function


Código (vb.net) [Seleccionar]
ReadBytes(OpenProcess(PERMISOS_DE_ACCESO, 0, PROCESS_ID), ADDRESS, TAMAÑO_A_LEER)

Una función bastante fácil que lee un array de bytes de un proceso, en XP lee normalmente la memoria de un proceso pero en 7 siempre retorna 0.

Me frustra ya que actulize a 7 teniendo XP, tenia muchos proyectos sobre la memoria y ahora no me funcionan.

Si existe alguna solución, Gracias por adelantado.
#20
Tengo el siguiente codigo Set de una propiedad que escribi hace tiempo para Windows XP pero no funciona en Windows 7, debe ser por la cantidad de filtros de seguridad que tiene Windows 7.

Código (vb.net) [Seleccionar]
  Set(ByVal value As Boolean)

           Dim _
AccessDirInfo As New DirectoryInfo(Objeto), _
AccessInfo As DirectorySecurity = AccessDirInfo.GetAccessControl

           Dim I_S As New List(Of IdentityReference)

           For Each x As String In Users()
               I_S.Add(New NTAccount(x))
           Next

           For Each I As IdentityReference In I_S

               AccessInfo.PurgeAccessRules(I)
               AccessDirInfo.SetAccessControl(AccessInfo) ''ERROR: Intento de realizar una operación no válida.''

               If Not value Then
                   AccessInfo.SetAccessRule(New FileSystemAccessRule(I, FileSystemRights.FullControl, AccessControlType.Allow))
                   AccessDirInfo.SetAccessControl(AccessInfo)
               End If

           Next

           I_S.Clear()

       End Set


Donde esta el comentario es la linea del error y el mensaje que lanza, alguien sabe cual es el problema o la manera de solucionarlo. Estoy en Windows 7.
#21
En Windows XP Read/WriteProcessMemory funciona normalmente pero actualize a Windows 7 y ahora el valor de retorno es siempre 0. He leido que al parecer esta función ya no existe en Kernel32.dll pero solo lo digo no sé si realmente es así, alguien tiene alguna solución o el mismo problema?

Gracias.

Afffff Lo siento escribi en este subforo por error sé que va en Programación General > Vb.net, un Moderador que lo mueva  :-[
#22
Si tengo 2 ofucadores A y B, y un ensamblado C, y B puede ofuscar el resultado de A

Entonces al ofuscar a C primero con A y luego el resultado de A ofuscarlo con B, para volver a obtener el fuente de C debo transpasar A y B ó solamente el ultimo es decir B

¿Que piensan ustedes?
#23
Ingeniería Inversa / CrackMe v3.0
9 Enero 2011, 20:50 PM
Aqui les traigo mi 3er CrackMe, hecho en Vb.Net FrameWork 3.5, despues de que los otros 2 los hiciera MCKSys Argentina con los ojos cerrados xD

He aplicado una protección que diseñe yo mismo incluyendo el sistema que controla las licencias y la versión de prueba además de una ayudita de otros programas de protección, esta permitido todo con tal de que terminen con una versión registrada con el mensaje "REGISTRADO!"; Las respuestas por PM a modo de explicación de como lo hicieron, pueden comentar aquí como les va además de colocar que tan dificil les parecio está tercera entrega =D Gracias por participar y A CRACKEAR!

Descarga Directa:
-- Reparando Errores --

¿Quien lo ha CRACKEADO?
Nadie 0o ¡Se el Primero!

Error reportado por CL1O, reparado!
#24
Tengo un programa que se conecta de forma automáticas a un juego, los datos de acceso son guardados en archivos, con que tipo de cifrado me recomiendan proteger dichos archivos. Hay que tener en cuenta que este archivo es portable.
#25
Como debo estructurar una dll en .Net para poder inyectarla?

Gracias :)
#26
Hace tiempo ya habia hecho un tema referente en Análisis y diseño de software, en el cual preguntaba como hookear un api en vb.net me dieron la alternativa de usar VEH me tiene azul...

Segui este "tuto" del foro:
http://foro.elhacker.net/analisis_y_diseno_de_malware/veh_api_hook-t288587.0.html

Pero nose como se declara AddVectoredExceptionHandler ni como se utiliza en Vb.Net ya agote todos los recursos menos foro.elhacker.net :s espero que puedan ayudarme y gracias.

pd: Realmente se puede hacer VEH en vb.net? disculpen la ignorancia :xD


#27
.NET (C#, VB.NET, ASP) / SmartDll.dll
21 Julio 2010, 19:19 PM
Buenas tardes/días/noches a todos xD me ha llamado mucho la atención lo de los plugings y addons que se puede hacer con System.Reflection en .Net así que he me puse a hacer una dll SmartDll.dll que sirviera para facilitar la comunicación entre el programa y los plugins de una manera más comoda, entonces vengo aqui a pedir consejos y opiniones mientras voy desarrollando el proyecto de tal manera que quede lo mejor posible, aqui está el source:

Para que no tengan que leerselo y analizarlo basicamente crea un objeto apartir de la dll a cargar comprobando que dentro de ella exista la clase Plugin
dentro de esta clase debe ir todo el contenido y además debe ser la clase principal y tambien el nombre de raiz y el del ensamblado del plugins deben ser los mismos, luego tenemos 2 funciones una que devuelve todos los controles dentro del plugin y otra que te devuelve solo los de un tipo en especifico por ejemplo solo los TextBox

Código (vbnet) [Seleccionar]
Public Class Dll

#Region " Private "

    Private _
    _DllInfo As FileInfo, _
    _EntryPoint As String, _
    _Assembly As Assembly, _
    _ObjectType As Type, _
    _ObjectInstance As Object

#End Region

#Region " Private Shared "



#End Region

#Region " Public "

    Public Sub New(ByVal Path As String)
        Try
            If IsSmartDll(Path) Then
                _DllInfo = New FileInfo(Path)
                _EntryPoint = New FileInfo(Path).Name.Split(CChar("."))(0) & "."
                _Assembly = Assembly.LoadFile(Path)
                _ObjectType = _Assembly.GetType(_EntryPoint & "Plugin")
                _ObjectInstance = _Assembly.CreateInstance(_EntryPoint & "Plugin")
            Else
                Throw New Exception(Path & " not belongs to SmartDll")
            End If
        Catch ex As Exception
            Throw New Exception(ex.Message, ex.InnerException)
        End Try
    End Sub

    Public ReadOnly Property FileInfo() As [FileInfo]
        Get
            Return _DllInfo
        End Get
    End Property

    Public Function GetControlsByType(ByVal FindType As Type) As List(Of Control)
        GetControlsByType = New List(Of Control)

        For Each Objeto As PropertyInfo In _ObjectType.GetProperties

            Try

                If Objeto.PropertyType.Name = FindType.Name Then
                    GetControlsByType.Add(CType(Objeto.GetValue(_ObjectInstance, New Object() {}), Control))
                Else
                    Continue For
                End If

            Catch
                Continue For
            End Try

        Next

    End Function

    Public Function GetControls() As List(Of Control)
        GetControls = New List(Of Control)

        For Each Objeto As PropertyInfo In _ObjectType.GetProperties

            Try
                GetControls.Add(CType(Objeto.GetValue(_ObjectInstance, New Object() {}), Control))
            Catch
                Continue For
            End Try

        Next

    End Function

#End Region

#Region " Public Shared "

    Public Shared Function IsSmartDll(ByVal Path) As Boolean
        Try
            Dim Dll As Assembly = Assembly.LoadFile(Path)

            Return Dll.GetType(New FileInfo(Path).Name.Split(CChar("."))(0) & ".Plugin") IsNot Nothing

        Catch
            Return False
        End Try
    End Function

#End Region

End Class


Pueden decir que creen ustedes que hace falta, dudas, criticas o correcciones de errorres o recomendaciones de mejores practicas ;D

Notas:

  • Para que serviria llamar Subs y Funciones de un plugin?
#28
Me ha sucedido algo extraño el BackColor se está colocando por encíma de BackGroundImage quiero decir coloco una imagen en la propiedad BackGroundImage y coloco BackColor en White se ve perfecto en tiempo de diseño pero en ejecucción se ve solamente el BackColor y el BackGroundImage no aparece... ¿Alguna solución? Gracias.
#29
Estaba revisando en sangoogle xD acerca de este tema en .net pero no he encontrado nada entonces pregunto existe alguna rutina, función o API que permita realizar la acción de recuperación de archivos así como lo hace Recuva o PC File Inspector Recovery.
Gracias.
#30
Tengo un Form1 de inicio y un Form2 que tiene un NumericUpAndDown llamado n1, como hago para llamar desde Form1 a Form2.n1.Value sin que Form2 aparezca :huh:

Gracias :)
#31
.NET (C#, VB.NET, ASP) / Rotar Imagen
26 Mayo 2010, 15:19 PM
Como puedo hacer rotar una imagen en X cantidad de grados?
#32
Busque esto googleando pero parece que no hay material sobre esto, mi pregunta es simple como puedo obtener los nombres de todos los usuarios que existen en un equipo. Gracias ^^
#33
Bueno tengo un problema que ya me tiene aturdido y no se le ve el prosible error, estoy haciendo un programa que cifra archivos (es solo para practicar Stream, FileStream, StreamReader y StreamWriter).

Código (vb.net) [Seleccionar]

       Dim x As New FileStream("C:\Ejecutable.exe", FileMode.Open)

       Dim y As New StreamReader(x, Encoding.Default)

       Dim z As New StreamWriter(New FileStream("C:\Ejecutable_Out.exe", FileMode.CreateNew), Encoding.Default)

       While Not y.EndOfStream

           z.WriteLine(EncryptByKey(y.ReadLine, "Ejemplo"))

       End While

       x.Close()
       y.Close()
       z.Close()

''''' LUEGO '''''

       Dim x As New FileStream("C:\Ejecutable_Out.exe", FileMode.Open)

       Dim y As New StreamReader(x, Encoding.Default)

       Dim z As New StreamWriter(New FileStream("C:\Ejecutable_Out2.exe", FileMode.CreateNew), Encoding.Default)

       While Not y.EndOfStream

           z.WriteLine(DencryptByKey(y.ReadLine, "Ejemplo"))

       End While

       x.Close()
       y.Close()
       z.Close()


Bueno entonces basicamente abre un archivo ejecutable y lo va leyendo mientras va guardando en otro archivo solo que pasado por EncriptByKey una funcion que usa llaves para cifrar Strings, en este caso la llave "Ejemplo", y luego abre el archivo que escribimos anteriormente y hace lo mismo solo que al contrario, todo transcurre bien, incluso abro los 2 archivos con Notepad++ y "parecen ser" exactamente iguales (el original y el que se cifro y descifro), pero al verles el peso el que se proceso es ligeramente más grande que el original y obviamente el que escribimos está corrupto, algún problema con los Stream o con el Encoding?, o tengo otra forma de leer los archivos binarios como los ejecutable, pero aún en texto plano?

Pd: Bueno tambien debo resaltar que el problema no viene de las funciones para cifrar ya que sin usar las funciones tambien el archivo sale igual más grande, corrupto pero aparemente igual.

Gracias.
#34
Error de principiante xD en FTP los directorios llevan "\" al final sino entonces el ftp los toma como archivos...

Código (vb.net) [Seleccionar]
   Public Function ListDirectory(ByVal dir As String) As List(Of String)
       Dim FTP As FtpWebRequest

       ListDirectory = New List(Of String)

       FTP = CType(WebRequest.Create(New Uri(dir)), FtpWebRequest)
       FTP.Credentials = DefaultCredentials
       FTP.Method = WebRequestMethods.Ftp.ListDirectory
       FTP.UsePassive = False

       Try
           Dim SReader As New StreamReader(FTP.GetResponse.GetResponseStream)

           Dim SString As New String(SReader.ReadLine)

           While Not SString Is Nothing
               ListDirectory.Add(SString) ' - - -> ERROR EN ESTÁ LÍNEA
               SString = SReader.ReadLine
           End While

           SReader.Close()

       Catch
           Return ListDirectory
       End Try
   End Function


Para poder ver detalles del error quite el Try, el error dice así:

No se puede obtener acceso al objeto eliminado. Nombre del objeto: 'System.Net.Sockets.NetworkStream'.

Pero no entiendo porque está eliminado >:(

Alguna otra forma de trabajar con el Stream o hay algo mal?

Gracias.
#35
Como puedo calcular la posicion en Y cuando un control toca el final del from. Me tiene ahorcado.

Gracias.
#36
Bueno estoy haciendo un juego de ajedrez para practicar IA eso va muy bien pero quise hacer efecto de movimiento con un Timer que tambien resulto bueno pero al PictureBox al moverlo por encima de otro control se le ve el fondo y quiero que no se vea, habra alguna forma de que el fondo quede transparente y que solo se vea la imagen cargada en .Image?
La propiedad BackColor ya es Transparent.

Una imagen habla más que 10.000 palabras mias xD



Uso circulos rojos, en vez de piezas mientras calculo los movimientos.

Gracias.
#37
Buen@s (Dias, Tardes, Noches), Quiero asociar un archivo con X programa y X icono, ya he intentado editar el registro pero no pasa nada (quisas lo hago mal), me podrán explicar la forma correcta de editarlo o algún otro método que conozcan.

Gracias.
#38
Como obtengo con vb.net el hash o md5 de un programa, por ejemplo Windows tiene la opción en gpedit.msc(Directiva de Grupo) -> Directiva de Restricción de software, bloquear los programas por medio de su hash y en Cff Explorer (Programa usado para el cracking) se generá md5 para el programa con el que se está trabando...

Como consigo alguno de estos 2 códigos?

Gracias :)
#39
Ingeniería Inversa / Probando mi Protección
2 Febrero 2010, 02:21 AM
Estoy haciendo un sistema de Trial y bueno quiero que lo prueben e intenten crackearlo, ya sé que no existe programa incrackeable pero si dificil de crackear, entonces me gustaría su opinión para ir mejorando la protección mientras vallan saliendo errores y debilidades...
Está programado en Vb.Net Visual Studio 2008.

Gracias por participar ;)

Descarga 1 Bug(s) Fixeds
#40
Diseño Gráfico / ¿Como lograr este efecto?
31 Enero 2010, 03:00 AM
Como puedo lograr este efecto de bordes metalicos remachados así como en este escudo:

De utilizar este efecto tambien lo haría en un escudo...
Gracias :P
#41
.NET (C#, VB.NET, ASP) / Error con Sub
24 Enero 2010, 19:23 PM
Tengo un programa que he estado haciendo y mejorando de un autologger de un juego online llamado Tibia, hoy se me ocurrio agregarle progressbar personalizadas pero a mi manera :xD con este sub que probe en un proyecto nuevo vacio que cree para solo probarlo:
Código (vbnet) [Seleccionar]
    Public Shared Sub LoadImage(ByVal Pic As PictureBox, ByVal Percent As Integer)
        Dim LoadedBar As New Bitmap(My.Resources.Bar, Pic.Width, Pic.Height)
        Dim Img As New Bitmap(Pic.Width, Pic.Height)

        Select Case Percent
            Case 100
                Pic.Image = LoadedBar
            Case 0
                Pic.Image = Nothing
            Case Else
                For X As Integer = 0 To (LoadedBar.Width * (Percent / 100) - 1)
                    For Y As Integer = 0 To (LoadedBar.Height - 1)
                        Img.SetPixel(X, Y, LoadedBar.GetPixel(X, Y))
                    Next
                Next
                Pic.Image = Img
        End Select

        Pic.Refresh()
        Img = Nothing
        LoadedBar = Nothing
    End Sub


Consiste en cargar un % de una imagen que obviamente es la barra de progreso completa en un picturebox esto da la sensación de una progressbar; la imagen está es los resources del programa como Bar.png en el proyecto vacio de prueba sirve perfectamente pero si lo pruebo en mi proyecto, se cierra el form desde donde llame el sub y da el siguiente error:
El valor no puede ser nulo. Nombre del parámetro: image
En la linea:
Código (vbnet) [Seleccionar]
Dim LoadedBar As New Bitmap(My.Resources.Bar, Pic.Width, Pic.Height)
Pero este error no da en el proyecto vacio de prueba, ya me tiene azul y no se que hacer :-(
#42
.NET (C#, VB.NET, ASP) / Que diferencia?
18 Enero 2010, 01:26 AM
Tengo una pregunta que me intriga :xD que diferencia hay entre importar un api desde coredll que importarla desde kernel32 o user32 y poque coredll tiene funciones que tambien estan en kernel32 y en user32...
#43
Tengo el siguiente problema el icono de mi aplicación a 32x32 se ve perfecto en el escritorio pero en una carpeta en vista mosaico se ve mal a menos de que este sea 48x48, habrá una forma de que se vea bien en el escritorio y tambien dentro de una carpeta en mosaico?, o será un error mio al hacer el icono?

Miren estás imagenes:

En el Escritorio:



En una Carpeta:



Quisas esto nisiquiera vaya aqui :xD pues perdon sino va aquí...
#44
.NET (C#, VB.NET, ASP) / Obtener Fecha
16 Enero 2010, 02:59 AM
Hay forma de obtener la fecha actual a partir de un servidor o una base SQL y si existe una forma me podrían dar un ejemplo basico :) es para comprobar que la fecha del sistema no sea editada...
Gracias ;D
#45
ASM / Iniciandome en ASM
15 Enero 2010, 19:16 PM
Soy nuevo en ASM pero no pretendo estar mucho con este lenguaje :-X

Bueno hago este tema porque despues de investigar mucho sobre hook de api en lenguajes como C y C++ y no haber logrado nada :¬¬ al parecer en ASM resulta más "facil" hookear una Api debido a que es de bajo nivel entonces buscando en el foro consegui el siguiente "Taller"
http://foro.elhacker.net/analisis_y_diseno_de_malware/taller_api_hooking_en_modo_usuario-t262962.0.html
Todo está en ASM y me he descargado el WinASM pero ¿como debo compilar para crear un exe? he tratado pero me da errores disculpen mi ignorancia ._.
Gracias...