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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Array de Bytes a String.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Array de Bytes a String.  (Leído 3,626 veces)
**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Array de Bytes a String.
« en: 15 Mayo 2019, 14:35 pm »

Hola, tengo otra duda, no entiendo muy bien como funciona este code :

Código
  1. Dim shellcode As String = "PYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIylJHk9s0C0s0SPmYxeTqzrqtnkaBDpNkV2VlNkpRb4nkqbQ8dOx7rjfFtqyoVQo0nLgLqq1lfbVL10IQ8O6mWqiWZBl0BrSgNkaBDPNkbbwLUQJplKQPpxOukpbTRjWqXPV0nkg828Nkshq0c1N3zCUlQYnk5dlKS1N6eaKOfQYPNLjaxOdMS1kwUhKPQeydtCQmIh7KsM7TBUIrV8LKPX6DgqICpfNkVlrkLKrxWls1zsLK5TNkuQN0Oyg4GTvD3kQKSQqIcjPQkO9pChcobzLKVrJKMVsmBJfaLMMUx9GpEPC0v0E8vQlKBOMWYoyEMkM0wmtjDJCXoVoeoMomyojuEl4FalDJk09kkPQe35mkw7fsd2PoBJ30sciohUbCSQbLbCfNauD8SUs0AA"
  2.        Dim shell_array(shellcode.Length - 1) As Byte
  3.        Dim i As Integer = 0
  4.        Do
  5.            shell_array(i) = Convert.ToByte(shellcode(i))
  6.            i = i + 1
  7.  
  8.        Loop While i < shellcode.Length


En si Convierte el String a un array de bytes , lo cual genera un calc.exe (Calculadora de windows) .



Pregunta :


Ok , todo bien por ahi, Pero como Podría hacerlo al contrario. convertir un array de bytes (Algún .exe) a ese tipo de cadena String. ?

                  Gracias de antemano.




En línea



Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.818



Ver Perfil
Re: Array de Bytes a String.
« Respuesta #1 en: 15 Mayo 2019, 18:13 pm »

como Podría hacerlo al contrario. convertir un array de bytes (Algún .exe) a ese tipo de cadena String. ?

Código
  1. Dim ascii As String = "PYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIylJHk9s0C0s0SPmYxeTqzrqtnkaBDpNkV2VlNkpRb4nkqbQ8dOx7rjfFtqyoVQo0nLgLqq1lfbVL10IQ8O6mWqiWZBl0BrSgNkaBDPNkbbwLUQJplKQPpxOukpbTRjWqXPV0nkg828Nkshq0c1N3zCUlQYnk5dlKS1N6eaKOfQYPNLjaxOdMS1kwUhKPQeydtCQmIh7KsM7TBUIrV8LKPX6DgqICpfNkVlrkLKrxWls1zsLK5TNkuQN0Oyg4GTvD3kQKSQqIcjPQkO9pChcobzLKVrJKMVsmBJfaLMMUx9GpEPC0v0E8vQlKBOMWYoyEMkM0wmtjDJCXoVoeoMomyojuEl4FalDJk09kkPQe35mkw7fsd2PoBJ30sciohUbCSQbLbCfNauD8SUs0AA"
  2. Dim raw As Byte() = Array.ConvertAll(ascii.ToCharArray(), Function(c As Char) Convert.ToByte(c))
  3.  
  4. ascii = String.Join(Nothing, Array.ConvertAll(raw, Function(b As Byte) Convert.ToChar(b)))
  5. Console.WriteLine(ascii)
+
Código
  1. Dim raw As Byte() = File.ReadAllBytes("C:\program.exe")
  2. Dim ascii As String = String.Join(Nothing, Array.ConvertAll(raw, Function(b As Byte) Convert.ToChar(b)))
  3. Console.WriteLine(ascii)

Saludos.


« Última modificación: 15 Mayo 2019, 18:23 pm por Eleкtro » En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: Array de Bytes a String.
« Respuesta #2 en: 15 Mayo 2019, 19:42 pm »

Gracias por responder , Una pregunta con el sigiente codigo :

Código
  1. Dim raw As Byte() = File.ReadAllBytes("C:\program.exe")
  2. Dim ascii As String = String.Join(Nothing, Array.ConvertAll(raw, Function(b As Byte) Convert.ToChar(b)))
  3. Console.WriteLine(ascii)

Salida de cualquier .exe :

Código:
MZ

en vez de algo como esto :


Código:
PYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIylJHk9s0C0s0SPmYxeTqzrqtnkaBDpNkV2VlNkpRb4nkqbQ8dOx7rjfFtqyoVQo0nLgLqq1lfbVL10IQ8O6mWqiWZBl0BrSgNkaBDPNkbbwLUQJplKQPpxOukpbTRjWqXPV0nkg828Nkshq0c1N3zCUlQYnk5dlKS1N6eaKOfQYPNLjaxOdMS1kwUhKPQeydtCQmIh7KsM7TBUIrV8LKPX6DgqICpfNkVlrkLKrxWls1zsLK5TNkuQN0Oyg4GTvD3kQKSQqIcjPQkO9pChcobzLKVrJKMVsmBJfaLMMUx9GpEPC0v0E8vQlKBOMWYoyEMkM0wmtjDJCXoVoeoMomyojuEl4FalDJk09kkPQe35mkw7fsd2PoBJ30sciohUbCSQbLbCfNauD8SUs0AA



Escribiendo el archivo con File.WriteAllBytes me genera un .exe totalmente dañando.









« Última modificación: 15 Mayo 2019, 19:45 pm por **Aincrad** » En línea



Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: Array de Bytes a String.
« Respuesta #3 en: 15 Mayo 2019, 21:16 pm »

A ver... de entrada un byte y un carácter (ANSI), son lo mismo una representación con 8 bits...
Ahora bien, los caracteres tienen asociado una representación gráfica, pero sucede que no todos los caracteres son imprimibles, de hecho incluso uno tiene una asociación sonora, y varios juegan un papel de control, por ejemplo el CR al tratar de imprimirlo, genera el salto de línea... el 34, que es las comillas, podría romper una comillas previas, etc...
Entonces no puedes tomar un fichero binario, pasarlo a string, y al ir a imprimirlo, esperar (sin más) ver cada byte ahí con una representación gráfica para cada uno...

Lo que tampoco implica que no puedas hacer lo que persigues... pero dando un pequeño rodeo.
Lee el array de bytes del exe, y lo conviertes a (por ejemplo) Base64 (o Base32, Base16, etc...), que como sabes (o debieras saber, si te dedicas a esto), codifica los bytes a caracteres legibles...

En realidad, lo que hace es tomar (al leer para representarlos) 3bytes de 8 en 8bits y luego leerse 4bytes de 6 en 6bits (pués (3x8) = (4x6) ). Esos 4bytes de 6 bits (6 bits direccionan 64 posiciones), son el índice en una tabla de 64 caracteres, que normalmente son A-Z, a-z, 0-9 más otros dos caracteres que suelen variar según la codificación (esto es a veces se le llama de otra manera).

Luego con el string, haces lo que te dé la gana (por ejemplo guardarlo como un fichero de texto)... más tarde, si lo quieres convertir a un array de bytes, lees el string (o el array de bytes y convertido a string) y finalmente harás la operación inversa... es decir pasar cada 4 bytes de 6 bits a 3 bytes de 8 bits...

En NET puedes usar la codificación UUEncode...

Base32, es similar, pero usa un conjunto de 32 caracteres, igualmente podrías usar Base16 (esto es hexadecimal) para el conjunto de caracteres imprimibles: 0-9, A-F).
« Última modificación: 15 Mayo 2019, 21:21 pm por NEBIRE » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.818



Ver Perfil
Re: Array de Bytes a String.
« Respuesta #4 en: 15 Mayo 2019, 21:43 pm »

Salida de cualquier .exe :
Código:
MZ

La conversión que te he mostrado funciona correctamente.

El inicio de la cabecera que obtendrás será algo como esto:
Código:
MZ???????ÿÿ??¸???????@???????????????????????????????????ð???º?´	Í!¸LÍ!This program cannot be run in DOS mode.

Un editor hexadecimal sustituirá los caracteres nulos (ceros) y no imprimibles, por puntitos...
Código:
MZ..........ÿÿ..........@...................................ð.....º....Í!..LÍ!This.program.cannot.be.run.in.DOS.mode

Si quieres obtener un resultado similar, pues siempre puedes sustituir cierto tipo de caracteres para representarlo visualmente de forma legible...
Código
  1. Dim raw As Byte() = File.ReadAllBytes("C:\program.exe")
  2. Dim ascii As String = String.Join(Nothing, Array.ConvertAll(raw, Function(b As Byte)
  3.                                                                     Dim c As Char = Convert.ToChar(b)
  4.                                                                     Return If(Not Char.IsControl(c), c, "."c)
  5.                                                                 End Function))

Pero esto no es lo que preguntaste. Preguntaste como obtener el mismo string que proporcionaste.



en vez de algo como esto :
Código:
PYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIylJHk9s0C0s0SPmYxeTqzrqtnkaBDpNkV2VlNkpRb4nkqbQ8dOx7rjfFtqyoVQo0nLgLqq1lfbVL10IQ8O6mWqiWZBl0BrSgNkaBDPNkbbwLUQJplKQPpxOukpbTRjWqXPV0nkg828Nkshq0c1N3zCUlQYnk5dlKS1N6eaKOfQYPNLjaxOdMS1kwUhKPQeydtCQmIh7KsM7TBUIrV8LKPX6DgqICpfNkVlrkLKrxWls1zsLK5TNkuQN0Oyg4GTvD3kQKSQqIcjPQkO9pChcobzLKVrJKMVsmBJfaLMMUx9GpEPC0v0E8vQlKBOMWYoyEMkM0wmtjDJCXoVoeoMomyojuEl4FalDJk09kkPQe35mkw7fsd2PoBJ30sciohUbCSQbLbCfNauD8SUs0AA

Eso no es cierto. Tomando como referencia esa cadena de texto que has proporcionado, el código que te he mostrado convierte los caracteres a bytes, genera un archivo con esos bytes, lee los bytes del archivo y los vuelve a convertir a caracteres, obteniendo así exactamente la misma cadena de texto que has proporcioando.

Escribiendo el archivo con File.WriteAllBytes me genera un .exe totalmente dañando.

Algo debes estar haciendo incorrectamente. Los bytes que escribes con el métofo File.WriteAllBytes() son los mismos que lees del archivo con la función File.ReadAllBytes(), es literalmente una copia del archivo.

Saludos.
« Última modificación: 15 Mayo 2019, 21:55 pm por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Asignar un bufferedImage a traves de un array de bytes desde de una peticion web
Java
lovaspillando 1 5,063 Último mensaje 26 Agosto 2007, 23:38 pm
por Yshua
pasar una cadena a un array de bytes
Programación Visual Basic
erjaker 1 1,661 Último mensaje 5 Noviembre 2007, 17:25 pm
por erjaker
Bytes Array
Programación Visual Basic
BlackZeroX 3 2,854 Último mensaje 22 Octubre 2009, 04:36 am
por BlackZeroX
Concatenar Array de bytes con string
Programación Visual Basic
Nanoc 7 10,477 Último mensaje 10 Febrero 2010, 21:54 pm
por BlackZeroX
Cadena de bytes a string
Programación C/C++
85 4 3,911 Último mensaje 24 Febrero 2013, 00:18 am
por 85
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines