Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Debci en 1 Abril 2010, 17:06 pm



Título: Duda sobre OPCODE
Publicado por: Debci en 1 Abril 2010, 17:06 pm
Hola a todos, estoy aprendiendo asm, y para comprenderlo mejor y llegar a hacer virguerias que se ven por ahi, he decidido leerme la teoria completa de los procesadores y CPU, y como se codifican las instruciones de asm a opcode para ejecutar, por ejemplo:
La instrucion que suma los registros EAX y EBX y almacena el resultado en EAX (es add si no me equivoco), como es que luego se codifica a:
03 c3
y presupongo que si hago por ejemplo un payload que haga esa operacion con los registros seria algo asi a injectar:

\x03\xC3 que vendria a ser 0x03 y 0xC3
como se hace esa transformación?
Osea que la equivalencia de los valores ASCII en hexadecimal que encuentro cuando abro un programa con Text plano son los opcode?
Perdonad si quizás este diciendo burradas, pero son cosas que he querido saber siempre.
Otra pregunta, el operador db para que sirve? deduzco que es para alamacenar en memoria, pero no lo se seguro.

Saludos


Título: Re: Duda sobre OPCODE
Publicado por: Eternal Idol en 1 Abril 2010, 17:25 pm
0x3 y 0xC3 ya estan en hexadecimal, en MASM se usa la siguiente notacion:

Código
  1. .386
  2. .model flat, stdcall
  3.  
  4. .code
  5. main:
  6. db 03h, 0c3h ;add eax, ebx es insertado aca, como dos bytes
  7. dw 0c303h ;add eax, ebx es insertado aca, como una palabra
  8. ret
  9. end main


Título: Re: Duda sobre OPCODE
Publicado por: Debci en 1 Abril 2010, 17:37 pm
0x3 y 0xC3 ya estan en hexadecimal, en MASM se usa la siguiente notacion:

Código
  1. .386
  2. .model flat, stdcall
  3.  
  4. .code
  5. main:
  6. db 03h, 0c3h ;add eax, ebx es insertado aca, como dos bytes
  7. dw 0c303h ;add eax, ebx es insertado aca, como una palabra
  8. ret
  9. end main
osea que la segunda letra que acompaña quiere decir si es byte, word, double word, cuadruple y 10 bytes. No?
Y otra cosa, como se que 0c3 y 0xC3 quiere decir cierto codigo en asm?

Saludos


Título: Re: Duda sobre OPCODE
Publicado por: Eternal Idol en 1 Abril 2010, 17:44 pm
Si, db, dw, dd, dq (no se si hay mas pero existe el operador dup para los arrays).

¿Como supiste en este caso?  ;D

http://www.sandpile.org/ia32/index.htm


Título: Re: Duda sobre OPCODE
Publicado por: Debci en 1 Abril 2010, 17:47 pm
Si, db, dw, dd, dq (no se si hay mas pero existe el operador dup para los arrays).

¿Como supiste en este caso?  ;D

http://www.sandpile.org/ia32/index.htm
Leyendo xD
Pero me resuelven mas uds. porque lo explican de manera menos técnica.

Saludos


Título: Re: Duda sobre OPCODE
Publicado por: [Zero] en 1 Abril 2010, 17:52 pm
Las equivalencias están definidas por el procesador, no es que sea equivalencia de las instrucciones nemotécnicas ni nada parecido.

Código:
http://www.masm32.com/board/index.php?action=dlattach;topic=63.0;id=58

Con eso puedes ver comodamente las equivalencias.

Saludos


Título: Re: Duda sobre OPCODE
Publicado por: Debci en 1 Abril 2010, 18:14 pm
Las equivalencias están definidas por el procesador, no es que sea equivalencia de las instrucciones nemotécnicas ni nada parecido.

Código:
http://www.masm32.com/board/index.php?action=dlattach;topic=63.0;id=58

Con eso puedes ver comodamente las equivalencias.

Saludos
Y como interpreta esas shellcode el procesador? xD segun tenia entendido el procesador entiende de calculos lógicos y no caracteres hexadecimales.

Saludos


Título: Re: Duda sobre OPCODE
Publicado por: [Zero] en 1 Abril 2010, 21:14 pm
No son caracteres hexadecimales, son numeros hexadecimales, que se pasan a binario  :P.

Saludos


Título: Re: Duda sobre OPCODE
Publicado por: Debci en 1 Abril 2010, 22:10 pm
No son caracteres hexadecimales, son numeros hexadecimales, que se pasan a binario  :P.

Saludos
claro, pero cada numero hexadecimal representa un caracter no?
Entonces lo que vemos al abrir un ejecutable con editor de texto, si pasamos los caracteres ascii a hexadecimal y este numero lo relacionamos en la tabla sale desensamblado?
Aunque si no me equivoco todo esto iba por proceso (en memoria) y no en DD.

Saludos


Título: Re: Duda sobre OPCODE
Publicado por: 08l00D en 1 Abril 2010, 22:17 pm
Y como interpreta esas shellcode el procesador? xD segun tenia entendido el procesador entiende de calculos lógicos y no caracteres hexadecimales.
El procesador hace calculos logicos, lo que el procesador "entiende" son, remontandose a lo mas basico, señales electricas mediante niveles de voltaje las cuales son representadas en el sistema binario (0 y 1)..
Lo de hexadecimal no es mas que una representacion para facilitar la comprension..

http://www.pctechguide.com/21Architecture_Principles.htm

claro, pero cada numero hexadecimal representa un caracter no?
No, un numero es un numero, dependiendo de la implementacion y de la interpretacion puede representar algo mas..
vos te debes confundir pensando que las instrucciones que los procesadores entienden son los nmemonicos que se usan en assembly... pero eso no es correcto para nada.. las instrucciones que usan los procesadores son cadenas predefinidas de bits... las cuales en los manuales como por ejemplo de intel estas son representadas en hexadecimal pero esto no quiere decir que ese numero hexadecimal represente el nombre de la instruccion en ascii  :P
Sino fijate que hay ensambladores que cambian el juego de nmemotecnicos que el que propone Intel y el resultado es el mismo.. Eso siempre va a depender de la implantacion ya que no hay nada estandar


Título: Re: Duda sobre OPCODE
Publicado por: Debci en 1 Abril 2010, 22:52 pm
Gracias me habeis aclarado muchas cosas.

Saludos