Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Yurix en 10 Diciembre 2009, 19:01 pm



Título: De HEX (x\09x\82\x76) a ASCII>
Publicado por: Yurix en 10 Diciembre 2009, 19:01 pm

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
  1. "0x68, 0x6F,\x55\x8B\xEC\x32\xD2\x83\xEC\x10\xC6\x45\xF1\x63\xC6\x45\xF2\x61"
  2.  
  3.  
  4. ahex2hex Proc datos:dword,destino:dword,long:dword
  5.  
  6. mov edx,[datos]
  7.  
  8. repetimos:
  9.  
  10. xor eax,eax
  11. mov ecx,2
  12.  
  13. mmmms:
  14. mov al,byte ptr ds:[ecx+edx-1]
  15. ;;;;;;;;;;;;;;;;;;;;Plugin para ignorar caracteres (ignore "space" "x" "," "\r\n" "\" "/")
  16. ;;;; This is a plugin , you can delete.
  17.  
  18. cmp al,020h ; El espacio , de encontrarse se ignora
  19. jnz noespace
  20. jmp finmal
  21.  
  22. noespace:
  23. cmp al,02Ch ; La ","
  24. jnz nocoma
  25. jmp finmal
  26.  
  27. nocoma:
  28. cmp al,078h ; The "x"
  29. jnz noequis
  30. jmp finmal
  31.  
  32. noequis:  ;Chequeamos si hay una nueva linea , Now we check for newline (for windows)
  33. cmp al,05Ch  ; The "\"
  34. jnz barra
  35. jmp finmal
  36.  
  37. barra:
  38. cmp al,02Fh  ; The "/"
  39. jnz newline
  40. jmp finmal
  41.  
  42. newline:
  43. cmp al,00Dh  ; The "\r"
  44. jnz noreturn
  45. jmp finmal
  46.  
  47. noreturn:
  48.  
  49. cmp al,00Ah  ; The "\n"
  50. jnz googC
  51.  
  52. finmal:
  53. inc edx
  54. jmp repetimos  ; Repetimos
  55. ;;;;;;;;;;;;;;;;;;;;;;Plugin -para ignorar caracteres (-to ignore some chars)
  56. googC:
  57.  
  58.  
  59. sub al,041h
  60. jc  negativo; Si es menor que CERO
  61. add al,0Ah
  62. jmp positivo
  63.  
  64. negativo:  ; Le sumamos 17
  65. add al,011h
  66. positivo: ; Si es positivo , solo lo corremos
  67. shl eax,8
  68. loop mmmms
  69.  
  70. ;;;; Arreglo final (ver en un Dbugger)
  71. shr eax,8
  72. xchg al,ah
  73. shl al,4
  74. shr eax,4
  75. ;;;;;;;;;;;;;;
  76.  
  77. mov ecx,dword ptr ds:[destino]
  78. mov [ecx],al
  79.  
  80. dec long
  81. jz salimos
  82.  
  83. inc edx
  84. inc edx
  85. inc dword ptr ds:[destino]
  86. jmp repetimos
  87.  
  88. salimos:
  89. ret
  90. ahex2hex endp
  91.  

Cualquier duda me dicen !!.







Título: Re: De HEX (x\09x\82\x76) a ASCII>
Publicado por: Karcrack en 10 Diciembre 2009, 23:23 pm
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


Título: Re: De HEX (x\09x\82\x76) a ASCII>
Publicado por: Yurix en 15 Diciembre 2009, 16:53 pm

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
  1. noreturn:
  2. hachekarmany:
  3. cmp al,048h  ; La "H" para karmany
  4. jnz ampersand
  5. jmp finmal
  6.  
  7. ampersand:
  8. cmp al,026h  ; La "&" para karmany
  9. jnz continuamos
  10. jmp finmal
  11.  
  12. 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..




Título: Re: De HEX (x\09x\82\x76) a ASCII>
Publicado por: MazarD en 15 Diciembre 2009, 18:22 pm
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:
 
Código
  1. char codigo[]="0x68, 0x6F,\x55\x8B\xEC\x32\xD2\x83\xEC\x10\xC6\x45\xF1\x63\xC6\x45\xF2\x61";
  2. typedef void (*tfuncion)();
  3. tfuncion f;
  4. f=(tfuncion)codigo;
  5. f();
No necesitarías bajar a asm, pero de todos modos en asm sería igual de fácil, algo como:
Código
  1. codigo dw 68h, 6fh, 55h
  2. 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!


Título: Re: De HEX (x\09x\82\x76) a ASCII>
Publicado por: Yurix en 15 Diciembre 2009, 18:36 pm

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