Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: blaron en 4 Abril 2014, 21:47 pm



Título: Filestream . Byte a Byte
Publicado por: blaron en 4 Abril 2014, 21:47 pm
Saludos compañeros

tenia una duda a ver si alguien sabria como resolverla.

Resulta que tengo que buscar un codigo en Hex por ejemplo :

80 17 79 64

el problema es que solo se buscar un numero en concreto, estoy utilizando el codigo de la siguiente manera.

Código:
       Dim file As New FileStream(TextBox1.Text, FileMode.Open, FileAccess.ReadWrite)
        Dim a As Integer = file.ReadByte()
        While a <> -1

            If a = (&H80) Then

                TextBox2.Text = (TextBox2.Text & a)

            End If

            a = file.ReadByte()
         End While

    End Sub

el problema es que no se como buscar mas, en vez de 80, buscar el codigo completo 80 17 79 64, no se si me explicado bien..


Título: Re: Filestream . Byte a Byte
Publicado por: El Benjo en 5 Abril 2014, 00:25 am
Utiliza un arreglo de bytes con el valor que estás buscando.

Comparas el primer byte del arreglo y si el if devuelve 'TRUE' entonces procedes a comparar si el byte siguiente coincide con el byte siguiente de tu cadena. En caso de que no sea así, entonces regresas a comparar con el primer byte '80'.

Te pondría el código, pero no creo que sean más de 20 líneas de código. Digo, la tienes sencilla.

Saludos.


Título: Re: Filestream . Byte a Byte
Publicado por: blaron en 5 Abril 2014, 01:59 am
perdona si no entendi  muy bien, es la primera vez que ando toqueteando con bytes.

Supongo que te refieres a crear una array.

Código:
Dim array() As Byte = {80, 17, 79, 64}

lo que no se realizar, seria como comparo yo esa array, puesto que la variable "a" es la que tiene el valor del archivo.

¿ Tendria que usar "a" que encuentre un numero principal y luego darle otra opcion de un "if... " ?


Título: Re: Filestream . Byte a Byte
Publicado por: Eleкtro en 5 Abril 2014, 02:01 am
Puedes hacer lo que dijo El Benjo, con un For, aquí tienes infinidad de ejemplos en C#: byte[] array pattern search (http://stackoverflow.com/questions/283456/byte-array-pattern-search/283815#283815) Puedes convertir el código en http://converter.telerik.com/

Lo que yo hice fue tomar y estudiar varios ejemplos de arriba para escribir en VB.NET un método de uso generico usando LINQ, aunque no soy un experto en bytes, espero que no se me haya pasado nada por alto:

Código
  1.    ' Find Byte Pattern
  2.    ' ( By Elektro )
  3.    '
  4.    ' Usage Examples:
  5.    ' Dim Indexes As Integer() = MatchBytePattern({1, 2, 3, 1, 2, 3, 2, 3}, {1, 2}) ' Result: {0, 3}
  6.    '
  7.    ''' <summary>
  8.    ''' Finds a Byte pattern inside a Byte Array and returns the starting indexes of all concurrences.
  9.    ''' </summary>
  10.    ''' <param name="ByteArray">Indicates the Byte Array to search inside.</param>
  11.    ''' <param name="Pattern">Indicates the Byte pattern to match.</param>
  12.    ''' <returns>The starting indexes of all concurrences.</returns>
  13.    Friend Function FindBytePattern(ByVal ByteArray As Byte(), ByVal Pattern As Byte()) As Integer()
  14.  
  15.        Return Enumerable.Range(0, ByteArray.Length - Pattern.Length + 1).
  16.                          Where(Function(i As Integer) Pattern.Select(Function(b1, b2) New With {b2, b1}).
  17.                          All(Function(p) ByteArray(i + p.b2) = p.b1)).
  18.                          ToArray()
  19.  
  20.    End Function

Un ejemplo de uso:
Código
  1.    Private Sub Test() Handles MyBase.Shown
  2.  
  3.        Dim Bytes As Byte() =
  4.            {
  5.                1, 2, 3, 4, 5, 6, 7, 8, 9, 33, 55, 22, 77, 4, 45, 62,
  6.                99, 98, 97, 96, 95, 94, 93, 22, 77, 4, 45, 98, 97, 96, 95,
  7.                3, 4, 5, 7, 8, 9, 1, 2, 3, 99, 98, 97, 96, 45, 98, 97, 96
  8.            }
  9.  
  10.        Dim Find As Byte() = New Byte() {1, 2, 3}
  11.  
  12.        Dim Indexes As Integer() = FindBytePattern(Bytes, Find) ' Result: {0, 37}
  13.  
  14.        For Each Index As Integer In Indexes
  15.            MessageBox.Show(CStr(Index))
  16.        Next Index
  17.  
  18.        Application.Exit()
  19.  
  20.    End Sub

Conociendo la cantidad de bytes que quieres buscar y obteniendo los índices de cada coincidencia creo que el resto ya es cosa tuya, muy simple...

Saludos