Bienvenido a Tecnohackers

Tecnohackers » Hacking y Seguridad » Hacking » Ingenieria Inversa
 » 

Curso de Assembler relacionado con el cracking



Autor Tema: Curso de Assembler relacionado con el cracking  (Leído 865 veces)

Desconectado CronuX

  • Veterano
  • ***
  • Mensajes: 302
  • OllyDBG
Curso de Assembler relacionado con el cracking
« en: Agosto 22, 2009, 04:45:49 am »
Andaba por la paginas buscando info y me encontre esta muy esencial para los que quieren saber sobre cracking etc..


Antes de nada, si no sabes lo que es ASM o lo que es un Looping o un FOR...NEXT, etc. te recomiendo que dejes de leer este manual ya que no tienes el nivel suficente para leerlo

REGISTROS (Registers)
Los registros son básicamente sitios por defecto en dónde se guardan datos. Los únicos por los que tenes que preocupar son: (E)AX, (E)BX, (E)CX y (E)DX. (La (E) sólo es para cuando se debuguea en código de 32 bit) También están los registros de parejas:
DS:SI ; pueden ser usados como fuente (origen) para operaciones de cadenas.
ES: DI ; usado como el destino para las operaciones de cadenas.

Entender los registros no es muy importante para crackear, pero lo que si tienes que saber es que son variables para el almacenamiento de datos Sonrisa

FLAGS
Los Flags son esencialmente como los registros excepto que los Flags sólo pueden contener valores específicos, como verdadero o falso (1 o 0), etc.
Los flags son calculados por comandos como CMP y son usados para comprobar el resultado de una llamada (CALL), por ejemplo:

CMP AX,BX ; compara AX con BX, si son iguales el Flag 0 cambia

salu2 y n me recuerdo el info de la pagina pero si lo ven favor de poner lo aki

y este post no va aki favor de moverlo pero no loborren porfa

JZ 00124531 ; si el flag 0 ha cambiado, salta a 00124531, si no continua

LA PILA (STACK) Y LOS PUSH AND POP (PONER Y QUITAR)
Antes de cualquier función de llamada (a partir de ahora CALL), un programa debe PONER (a partir de ahora diremos PUSH) unos parámetros que la función espera encontrar en la pila (técnicamente llamado Stack). Los datos se colocan de una manera especial. Piensa lo siguiente. Piensalo como si fuera una "pila" (stack) de platos, el primer plato que ponemos (al hacer un montón) se queda abajo y será el último en coger; y el último en poner (el de arriba), es el primero en coger.
Recuerda esto cuando estés sobre una CALL, los parámetros son cogidos en orden inverso. Te pongo un ejemplo para que te quede claro:

La función API de Windows GetDlgItemTextA requiere los siguientes parámetros:

  1. Manejo de la ventana de diálogo (Handle Dialog Box)
  2. Identificador del Control
  3. Dirección del Buffer del Texto
  4. Tamaño máximo de la cadena

Por tanto, esto puede ser pasado de este modo (de forma inversa, para luego cogerlo ordenadamente):

MOV EDI,[ESP+00000220] ; Coge en EDI el Handle Dialog Box
PUSH 00000100     ; PUSH (4) - Tamaño máximo de la cadena
PUSH 00406130     ; PUSH (3) - Dirección buffer de texto
PUSH 00000405     ; PUSH (2) - Identificador de Control
PUSH EDI        ; PUSH (1) - Handle Dialog Box
CALL GetWindowText   ; Llama (CALL) a la función GetWin...

Fácil, no? esto será importante a la hora de crackear aplicaciones que piden números de serie. Si conocemos la dirección del buffer para nuestro número de serie (es decir, dónde se encuentra almacenado el número que le hemos metido en la memoria), en este caso 00406130, sólo hay que hacer un breakpoint y normalmente terminaremos alrededor del procedimiento que genera el número de serie bueno.

POP
Se usa para borrar el primer "plato" de la pila. Normalmente, después de hacer uns PUSH y haber una llamada, se colocan varios POP para borrar los datos innecesarios.

AND
Uso: AND dest, orig
Fin: Lleva a cabo una operación de tipo AND de las dos entradas, reemplazando el dest con el resultado.
Ejemplo: AND BX, 03h
No hay mucho que decir. Esto es importante para cuando necesitemos hacer un generador de números de serie para un programa Sonrisa

CALL (Llamada)
Uso: CALL address (dirección)
Fin: Ejecuta una función en la dirección "address"
Ejemplo: CALL 10284312
Una vez que la función termine, el código continúa en la línea siguiente de CALL (es como un GOSUB)

CMP
Uso: CMP dest, orig
Fin: Resta el orig del dest y actualiza en Flag
Ejemplo: CMP AX, 03h
Esta instrucción es muy importante para nosotros (los crackers) Sonrisa Está colocado muchas veces en el programa para verificar algo; por ejemplo que el número de serie que introducimos es el mismo que el que tiene el programa o genera Giñar

INT (Interrupción)
Uso: INT interrupción
Fin: Llama a una función general (normalmente de la BIOS)
Ejemplo: INT 10h
Esta función es muy común en programas de DOS, pero no lo veremos mucho ya que me voy a dedicar (como he dicho antes) al Cracking en W95. Normalmente los parámetros son guardados en los registros por defecto (AX, BX, CX, ...)

JMP (Salto)
Uso: JMP dirección
Fin: Equivale a un GOTO. Salta a la sección de código de la dirección.
Ejemplo: JMP 00402011
JMP es un salto incondicional. Tan simple como un GOTO Sonrisa
Hay muchas variantes. Las más importantes son:
JZ o JE » Salta si el Flag 0 es cambiado
JNZ o JNE » Salta si el Falg 0 no es modificado

Normalmente están después de una instrucción de CMP, por ejemplo:

CMP numseriebueno, numseriemalo ; compara los núm. de serie
JNE fueradeaki ; si no son iguales, salta a otra parte del código

MOV (Mover)
Uso: MOV dest, orig
Fin: Copia el byte o el valor de la palabra desde el orig al dest
Ejemplo: MOV AX, DX
Lo verás muy a menudo cuando estés stepping (ejecutando línea por línea). Una cosa, a lo mejor me confundo y lo llamo stepting o steping, pero me refiero a esto, para cuando lo veáis).
MOV es como si fuera LET dest=orig
Hay algunas variantes como MOVSX, pero es raro.

RET (Retorno)
Uso: RET
Fin: Para volver de una función (Como si fuera RETURN)
Ejemplo: RET
Normalmente lo verás el final de una función, y sólo dice que vuelva a la dirección de la llamada (CALL) para continuar.

LEA (Como LET)
Uso: LEA dest, orig
Fin: Hace que el dest sea igual que el orig
Ejemplo: LEA EAX, [EBP-34]
Hace que EAX=EBP-34, fácil, no?

Salu2 espero que les sirva por lo menos me esta sirviendo muy bien ya que me e iniciado en esto del cracking
« Última modificación: Abril 29, 2010, 04:20:19 pm por alma_triste »



Tags:
Tags:

 


SMF 2.0.19 | SMF © 2016, Simple Machines
Paginas Afiliadas
Twitter - FaceBook - Daraxblog
Designed by Smf Personal