AND
| Uso: |
AND dest,src |
| Prop�sito: |
Realiza un AND
l�gico de las dos entradas, reemplazando el dest
con el resultado |
| Ejemplo: |
AND BX,03h |
No hay mucho que pueda decirse sobre esta
llamada, hace lo que dice. |
CALL
| Uso: |
CALL address |
| Prop�sito: |
Ejecuta una
funci�n en la direcci�n 'address' |
| Ejemplo: |
CALL 10284312 |
Llama la funci�n a la direcci�n 'address', una
vez la funci�n ha terminado, el c�digo
continuar� en la l�nea siguiente a la llamada. |
CMP
| Uso: |
CMP dest,scr |
| Prop�sito: |
Resta src del dest
y actualiza las banderas. |
| Ejemplo: |
CMP AX,03h |
Esta es una instrucci�n importante hasta donde
nosotros (crackers) estamos interesados
:). Est� en alguna parte del programa para
verificar algo, por ejemplo. para comparar el
n�mero de serie real a uno que nosotros
introducimos, o para verificar si un programa
est� registrado etc.
Esta instrucci�n normalmente precede a una
instrucci�n de salto de alg�n tipo. |
Flags (Banderas)
Las banderas son
esencialmente como los registros s�lo que
ellos pueden ser s�lo verdaderos o falsos (por
ejemplo 0 o 1). �stos son juego de ordenes
como CMP, y se usa para verificar el resultado de
una llamada, por ejemplo:
CMP AX, BX; Compara AX a BX, si igual la bandera
del cero se pone a 1
JZ 00124531; Si la bandera del cero se pone,
salta a 001254531
Para entender esto propiamente, tendr�s que
seguir leyendo probablemente y entonces volver�s
atr�s... |
INT
| Uso: |
INT
interrupt_number |
| Prop�sito: |
Llama una funci�n
predefinida (normalmente codificado en la
BIOS) |
| Ejemplo: |
INT 10h |
Realmente no ver�s esta orden mucho (casi en
absoluto) cuando corriges programas de
Windows, pero ellos se mueven alrededor del DOS.
Normalmente los par�metros son pasados en los registros predefinidos
(AX, BX, CX etc.) .
Hay demasiadas llamadas INT para listarlas aqu�,
mejor conseguir una copia de una lista de
interrupciones. �Ralph
Browns es muy bueno! :). |
JMP
| Uso: |
JMP address |
| Prop�sito: |
Equivalente a un
GOTO en basic, salta a una secci�n de c�digo |
| Ejemplo: |
JMP 00402011 |
JMP es un salto incondicional a una secci�n de
c�digo. �Tan simple como eso! :)
Hay montones de variaciones de esta instrucci�n,
las m�s importantes son:
JZ Salta si la bandera de cero se pone (lo
mismo que JE)
JNZ Salta si la bandera de cero se no se pone (lo
mismo que JNE)
�stos normalmente siguen a una instrucci�n CMP,
por ejemplo:
CMP RealSerial,BadSerial; Compara el numero de
serie real a nuestro numero de serie
JNE GoAwayBadCracker; Si No Igual entonces
termina.
|
LODSB / LODSW (Cruehead)
| Uso: |
LODSB / LODSW |
| Prop�sito: |
Cargas un byte o
una palabra de DS:SI y lo pone en AL (LODSB) o
AX (LODSW). Incrementa SI |
| Ejemplo: |
LODSW |
Permite decir que DS:SI apunta a una palabra que
posee el valor de EBh
LODSW; Copia la palabra a la que apunta DS:SI y
lo coloca en AX
AX contendr� el valor de EBh ahora
Estas instrucciones se usan a menudo junto con la
instrucci�n REP. |
MOV
| Uso: |
MOV dest,src |
| Prop�sito: |
Copia el valor de
un byte o palabra desde el origen al destino |
| Ejemplo: |
MOV AX,DX |
Ver�s esto * mucho * cuando est�s caminando a
trav�s del c�digo, son b�sicamente los
recursos (para usar t�rminos de
BASIC;))
LET dest = src
Hay varias variantes incluida MOVSX, pero todas
ellas hacen b�sicamente la misma cosa. Podr�a
ayudar recibir las Especificaciones de
Programaci�n de Intel de su website.
�Si no puedes entender esto, estas fastidiado!
;) |
MOVSB / MOVSW (Cruehead)
| Uso: |
MOVSB / MOVSW |
| Purpose: |
Mueve (bien,
realmente copia) o un byte (MOVSB) o
una palabra (MOVSW) de DS:SI a ES:DI.
Incrementa SI |
| Ejemplo: |
MOVSB |
Permite decir que DS:SI apunta a un byte que
posee el valor de 5h
MOVSB; Toma el byte al que apunta DS:SI y lo
coloca en ES:DI
El byte al que apunta ES:DI ahora tiene el valor
de 5h
Esta instrucci�n es muy com�n en cracking,
cuando una cadena se copia a otra direcci�n. Las
instrucciones se usan entonces junto con la
instrucci�n REP |
Registers (Registros)
Los registros son
lugares b�sicamente predefinidos en cu�l para
guardar datos. Los �nicos sobre los que nosotros
necesitamos preocuparnos son:
(E)AX, (E)BX, E(CX), E(DX) (La (E) es s�lo
significativa cuando se corrige C�digo 32-Bit ).
Tambi�n las parejas del registro:
DS:SI; puede usarse como el origen para las
operaciones de cadenas
ES:DI; Usado como el destino para las operaciones
de cadenas
Entender los registros no es muy importante para
crackear, generalmente solo con saber que ellos
son variables para el almacenamiento de datos es
bastante para que consigas empezar :) |
REP
| Uso: |
REP |
| Prop�sito: |
Repite una
instrucci�n durante el n�mero de veces
especificado en el registro de CX. Un REP delante
de un MOVSB , LODSB o STOSB (o delante
de las versiones de estas instrucciones) causar�a
que esa instrucci�n se repitiese. |
| Ejemplo: |
MOV AL,Bh; AL
contiene bh ahora
MOV CX,5h; CX contiene 5h ahora
REP STOSB; Copia valor de AL (5h) dentro de
cualquiera de los puntos de DS:SI 5 veces e
incrementa SI cada vez . |
RET
| Uso: |
RET |
| Prop�sito: |
Para volver desde
una funci�n |
| Ejemplo: |
RET |
Normalmente ver�s esto al final de una funci�n,
y simplemente instruye al procesador para
RETornar a la funci�n, a la direcci�n de la LLAMADA. |
STOSB / STOSW (Cruehead)
| Uso: |
STOSB / STOSW |
| Prop�sito: |
Toma el valor en
AL (STOSB) o AX (STOSW) y lo coloca
en DS:SI. Incrementa SI. |
| Ejemplo: |
STOSB |
Permite decir que AX posee el valor de EBh
STOSB
Copia el valor en AX y lo coloca en la palabra a
la que apunta DS:SI. DS:SI apunta ahora a una
palabra que contiene EBh
Las instrucciones se usan entonces junto con la
instrucci�n REP. |
The Stack & Push/Pop
Antes de cualquier
funci�n de llamada, un programa debe ' empuja '
cualquier par�metro que la funci�n espera hacia
la pila. Piensa en ello como una pila de platos,
el primer plato en la pila es el �ltimo en ser
tomado fuera de la pila, es exactamente lo mismo.
Es importante recordar esto ' primero puesto /
�ltimo quitado ' principalmente al mirar una
LLAMADA, esto
significa que los par�metros se pasar�n en
orden inverso...
En caso de que mi balbuceo te haya confundido,
echa mirada a este ejemplo:
La funci�n API GetDlgItemText de Windows
requiere los par�metros siguientes:
(1) el manipulador de caja de dialogo
(2) el identificador de control
(3) la direcci�n de pulidor para el texto
(4) el tama�o del m�ximo de cadena
Por consiguiente �stos podr�an pasarse as�:
MOV EDI,[ESP+00000220]; Obtiene el Manipulador de
la caja de dialogo en EDI
PUSH 00000100; EMPUJA (4) el tama�o M�ximo de
la cadena
PUSH 00406130; EMPUJA (3) la Direcci�n del
buffer para el texto
PUSH 00000405; EMPUJA (2) el Identificador de
control
PUSH EDI; EMPUJA (1) el Manipulador de la caja de
dialogo
CALL GetWindowText; LLAMA a la funci�n
�F�cil Eh? ��sta puede ser una de las maneras
m�s simples de crackear una app de n�mero de
serie, si conoces la direcci�n del buffer para
el n�mero de serie, en este caso 00406130, s�lo
pon un punto de ruptura en �l, y normalmente
acabar�s a en o alrededor del procedimiento que
genera el numero de serie real!! :)
POP es usado simplemente para remover el primer
elemento de la pila, normalmente hay mucho ellos
antes del retorno de una funci�n al programa... |
|