Autor
|
Tema: Array de Bytes a String. (Leído 4,343 veces)
|
**Aincrad**
|
Hola, tengo otra duda, no entiendo muy bien como funciona este code : Dim shellcode As String = "PYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIylJHk9s0C0s0SPmYxeTqzrqtnkaBDpNkV2VlNkpRb4nkqbQ8dOx7rjfFtqyoVQo0nLgLqq1lfbVL10IQ8O6mWqiWZBl0BrSgNkaBDPNkbbwLUQJplKQPpxOukpbTRjWqXPV0nkg828Nkshq0c1N3zCUlQYnk5dlKS1N6eaKOfQYPNLjaxOdMS1kwUhKPQeydtCQmIh7KsM7TBUIrV8LKPX6DgqICpfNkVlrkLKrxWls1zsLK5TNkuQN0Oyg4GTvD3kQKSQqIcjPQkO9pChcobzLKVrJKMVsmBJfaLMMUx9GpEPC0v0E8vQlKBOMWYoyEMkM0wmtjDJCXoVoeoMomyojuEl4FalDJk09kkPQe35mkw7fsd2PoBJ30sciohUbCSQbLbCfNauD8SUs0AA" Dim shell_array(shellcode.Length - 1) As Byte Dim i As Integer = 0 Do shell_array(i) = Convert.ToByte(shellcode(i)) i = i + 1 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
Conectado
Mensajes: 9.874
|
como Podría hacerlo al contrario. convertir un array de bytes (Algún .exe) a ese tipo de cadena String. ? Dim ascii As String = "PYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIylJHk9s0C0s0SPmYxeTqzrqtnkaBDpNkV2VlNkpRb4nkqbQ8dOx7rjfFtqyoVQo0nLgLqq1lfbVL10IQ8O6mWqiWZBl0BrSgNkaBDPNkbbwLUQJplKQPpxOukpbTRjWqXPV0nkg828Nkshq0c1N3zCUlQYnk5dlKS1N6eaKOfQYPNLjaxOdMS1kwUhKPQeydtCQmIh7KsM7TBUIrV8LKPX6DgqICpfNkVlrkLKrxWls1zsLK5TNkuQN0Oyg4GTvD3kQKSQqIcjPQkO9pChcobzLKVrJKMVsmBJfaLMMUx9GpEPC0v0E8vQlKBOMWYoyEMkM0wmtjDJCXoVoeoMomyojuEl4FalDJk09kkPQe35mkw7fsd2PoBJ30sciohUbCSQbLbCfNauD8SUs0AA" Dim raw As Byte() = Array.ConvertAll(ascii.ToCharArray(), Function(c As Char) Convert.ToByte(c)) ascii = String.Join(Nothing, Array.ConvertAll(raw, Function(b As Byte) Convert.ToChar(b))) Console.WriteLine(ascii)
+ Dim raw As Byte() = File. ReadAllBytes("C:\program.exe") Dim ascii As String = String.Join(Nothing, Array.ConvertAll(raw, Function(b As Byte) Convert.ToChar(b))) Console.WriteLine(ascii)
Saludos.
|
|
« Última modificación: 15 Mayo 2019, 18:23 pm por Eleкtro »
|
En línea
|
|
|
|
**Aincrad**
|
Gracias por responder , Una pregunta con el sigiente codigo : Dim raw As Byte() = File. ReadAllBytes("C:\program.exe") Dim ascii As String = String.Join(Nothing, Array.ConvertAll(raw, Function(b As Byte) Convert.ToChar(b))) Console.WriteLine(ascii)
Salida de cualquier .exe : en vez de algo como esto : 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
|
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
Conectado
Mensajes: 9.874
|
Salida de cualquier .exe : La conversión que te he mostrado funciona correctamente. El inicio de la cabecera que obtendrás será algo como esto: MZ???????ÿÿ??¸???????@???????????????????????????????????ð???º?´ Í!¸LÍ!This program cannot be run in DOS mode. Un editor hexadecimal sustituirá los caracteres nulos (ceros) y no imprimibles, por puntitos... 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... Dim raw As Byte() = File. ReadAllBytes("C:\program.exe") Dim ascii As String = String.Join(Nothing, Array.ConvertAll(raw, Function(b As Byte) Dim c As Char = Convert.ToChar(b) Return If(Not Char.IsControl(c), c, "."c) End Function))
Pero esto no es lo que preguntaste. Preguntaste como obtener el mismo string que proporcionaste.
en vez de algo como esto : 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
|
|
|
|
|
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,211
|
26 Agosto 2007, 23:38 pm
por Yshua
|
|
|
pasar una cadena a un array de bytes
Programación Visual Basic
|
erjaker
|
1
|
1,801
|
5 Noviembre 2007, 17:25 pm
por erjaker
|
|
|
Bytes Array
Programación Visual Basic
|
BlackZeroX
|
3
|
3,327
|
22 Octubre 2009, 04:36 am
por BlackZeroX
|
|
|
Concatenar Array de bytes con string
Programación Visual Basic
|
Nanoc
|
7
|
11,117
|
10 Febrero 2010, 21:54 pm
por BlackZeroX
|
|
|
Cadena de bytes a string
Programación C/C++
|
85
|
4
|
4,211
|
24 Febrero 2013, 00:18 am
por 85
|
|