De HEX (x\09x\82\x76) a ASCII>

Iniciado por Yurix, 10 Diciembre 2009, 19:01 PM

0 Miembros y 1 Visitante están viendo este tema.

Yurix


Es decir como convertir una cadena de texto que representa numeros hexadecimales a su valor real , este codigo acepta cualquiera de las formas Ej

"x\09x\82\x76"
"0x68, 0x6F, 0x6C, 0x61, 0x20"

incluso una mescla de ellas EJ>
Código (asm) [Seleccionar]
"0x68, 0x6F,\x55\x8B\xEC\x32\xD2\x83\xEC\x10\xC6\x45\xF1\x63\xC6\x45\xF2\x61"


ahex2hex Proc datos:dword,destino:dword,long:dword

mov edx,[datos]

repetimos:

xor eax,eax
mov ecx,2

mmmms:
mov al,byte ptr ds:[ecx+edx-1]
;;;;;;;;;;;;;;;;;;;;Plugin para ignorar caracteres (ignore "space" "x" "," "\r\n" "\" "/")
;;;; This is a plugin , you can delete.

cmp al,020h ; El espacio , de encontrarse se ignora
jnz noespace
jmp finmal

noespace:
cmp al,02Ch ; La ","
jnz nocoma
jmp finmal

nocoma:
cmp al,078h ; The "x"
jnz noequis
jmp finmal

noequis:  ;Chequeamos si hay una nueva linea , Now we check for newline (for windows)
cmp al,05Ch  ; The "\"
jnz barra
jmp finmal

barra:
cmp al,02Fh  ; The "/"
jnz newline
jmp finmal

newline:
cmp al,00Dh  ; The "\r"
jnz noreturn
jmp finmal

noreturn:

cmp al,00Ah  ; The "\n"
jnz googC

finmal:
inc edx
jmp repetimos  ; Repetimos
;;;;;;;;;;;;;;;;;;;;;;Plugin -para ignorar caracteres (-to ignore some chars)
googC:


sub al,041h
jc  negativo; Si es menor que CERO
add al,0Ah
jmp positivo

negativo:  ; Le sumamos 17
add al,011h
positivo: ; Si es positivo , solo lo corremos
shl eax,8
loop mmmms

;;;; Arreglo final (ver en un Dbugger)
shr eax,8
xchg al,ah
shl al,4
shr eax,4
;;;;;;;;;;;;;;

mov ecx,dword ptr ds:[destino]
mov [ecx],al

dec long
jz salimos

inc edx
inc edx
inc dword ptr ds:[destino]
jmp repetimos

salimos:
ret
ahex2hex endp


Cualquier duda me dicen !!.







http://kapetres.wordpress.com/ < Mi blog sobre ASM

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.

Karcrack

Muy interesante, luego lo miro a fondo ;D

Solo te ha faltado añadir que omita '&' y 'H' para que acepte el sistema de VB :P

Yurix


Si , es muy fácil que acepte la H y &

Solo debes de saber el numero hexadecimal de esos caracteres
48 y 26 , entonces agregarlo es muy fácil.:

Código (asm) [Seleccionar]
noreturn:
hachekarmany:
cmp al,048h  ; La "H" para karmany
jnz ampersand
jmp finmal

ampersand:
cmp al,026h  ; La "&" para karmany
jnz continuamos
jmp finmal

continuamos:


---------
Solo debes de agregar ese código después de la etiqueta  noreturn:
Ves que fácil es ASM .

Se me olvido decir que el codigo acepta minusculas o mayusculas , no importa como lo escribas. Fc 1A 2a etc..




http://kapetres.wordpress.com/ < Mi blog sobre ASM

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.

MazarD

No entiendo muy bien la utilidad del código.

Si ya tienes esos opcodes en un array en c basta con abrirlo con un debugger y apuntar la ventana de código al inicio de la memoria que corresponda a ese array para tener las instrucciones y poder copiar/pegar a tu código asm.

Si lo haces para ejecutar el código directamente a partir del código máquina en hexa, en c sería algo como:
char codigo[]="0x68, 0x6F,\x55\x8B\xEC\x32\xD2\x83\xEC\x10\xC6\x45\xF1\x63\xC6\x45\xF2\x61";
typedef void (*tfuncion)();
tfuncion f;
f=(tfuncion)codigo;
f();

No necesitarías bajar a asm, pero de todos modos en asm sería igual de fácil, algo como:
Código (asm) [Seleccionar]
codigo dw 68h, 6fh, 55h
jmp ds:dw



Por último, si en mi código tengo alguno de los códigos correspondientes a los carácteres especiales me estarás obviando código y me fallará posteriormente.

Saludos!
-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
http://twitter.com/MazarD
irc://irc.freenode.org/elhacker.net

Yurix


Si , eso es cuando tienes el compilador , pero en el caso que desees algun tipo de convercion despues de compilar , puede usar este codigo.


http://kapetres.wordpress.com/ < Mi blog sobre ASM

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.