[Duda] Practica 1 y 2 de Taller de Cracking desde 0

Iniciado por LukaCrosszeria, 3 Octubre 2013, 14:20 PM

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

LukaCrosszeria

Estos las practicas 1 y 2.

La 2 no la entendí mucho asi que si alguien podria explicarmela se lo agradeceria.




MOV EAX, 1530h
ADD EAX, 1000h
SUB EAX, 500h
MOV EBX, 100h
SUB EAX, EBX



Primero el registro EAX toma el valor de 1530h [ No entiendo por que la H, alguien me lo explica? ] segundo en el ADD paso a tener 2530h, por que se le sumo. Luego en el SUB se le resto 500h, teniendo ahora 2030h. Luego el registro EBX tomo el valor de 100h. Se le resto a EAX el valor de EBX. 2030 - 100 = 1930h.




MOV EAX, 00004932h
ADD AX, 45h
SUB AL, 0Ah


Este es el que no entiendo. Si EAX es de 32 Bits, AX 16 Bitx, y AL  y AH DE 8 Bits, que tiene que ver esto en la cantidad? No me quedo muy claro...

Saludos.

apuromafo CLS

#1
h=hexadecimal
la 1= 00001F30

estamos claros que hay cosas que son faciles de mil, estoy de acuerdo con las operatorias en hexadecimal, pero idealmente veamos la parte decimal, donde ocurre el error:
2030hexadecimal= 8240 decimal
100hexadecimal= 256 decimal
resultado de la resta= 7984decimal=1F30 hexadecimal

viendolo de otra forma antes del 20, viene el 1F, es un sistema de 16 ,su principio de formación podemos explicarlo que  cada numero en la misma base es 10, osea en la posición 16 es 10 (pues la base es 16)  luego llegará de A a F para llegar otra vez a formar el 20  , por lo cual si resto 20-1 (mirando las centenas), tenemos 1F  y no 19 , pues estás restando en hexadecimal y el numero anterior de formación era la F y no el 9
 
en las sumas y restas anterior, los numeros no sobrepasaban el 10, en este caso agregar de 20 a 25 y 20 no hay mucha diferencia, pero si restar uno se nota de inmediato.   saludos




el sentido del segundo en cantidad??
Citares como irá variando el número o registro cuando cambias ciertos registros,
eax= 4932 hex  en decimal signed o unsigned=18738
AX=4932 h  =18738
AH=49 h    =73
AL=32 h    =50

al sumar ax 45h  sea 69decimal tenemos  18738+69, luego tenemos 18807decimal  y ahora ax= 4977
lo cual cambia el registro ah y al, pero ah ya era 49, pero al antes era 32, pero ahora de 32 ahora vale 77, pues ah=49h y al=77h

al restar a al 0a  es restar 10, osea de 77h que es 119d  le restamos el 0a osea 10d y queda 109 osea 6d


lo ideal o normal a pensar es que si modifico ax, los registros ah o al, no está directamente relacionado y la verdad es que si, de otra forma no me explico que estás intentando lograr.

.:UND3R:.

Intentaré explicar lo mismo que apuromafo pero de otra forma, a ver si queda más claro teniendo dos respuestas en vez de una  :xD.

Código (asm) [Seleccionar]
MOV EAX, 1530h
ADD EAX, 1000h
SUB EAX, 500h
MOV EBX, 100h
SUB EAX, EBX


Los registros de propósito generales de 32 bits son:
Código (asm) [Seleccionar]
EAX
ECX
EDX
EBX
ESI
EDI
ESP
EIP


Cómo su nombre los dice son de 32 bits, pero estos también se subdividen por así decirlo, tomaré el caso de EAX

(aclarar que la h minúscula significa que el valor está expresado en hexadecimal, la d minúscula significa que está expresado en decimal, la b minúscula significa que está expresado en binario, cabe descatar que es una forma de representar un dato, por lo cual 2d es lo mismo que 10b y 2h).

EAX = registro de propósito general de 32 bits
AX = registro de propósito general de 16 bits
AH/AL = registro de propósito general de 16 bits

Le daremos un valor a EAX:

12 34 56 78 (4 bytes o 32 bits)

si consultas en commandbar ? EAX (barra inferior de OllyDbg), deberías ver
12 34 56 78 (que son los valores que muestra OllyDbg del registro EAX).

Si consultamos por el valor de AX, este sería:
56 78

Si te das cuenta obtienes los dos bytes inferiores de EAX, (2 bytes equivalen 16 bits).

Ahora si tomas el valor de AH (h = high byte, un byte equivale a 8 bits):
56

Si tomas el valor de AL (l = low byte, un byte equivale a 8 bits):
78

A lo que quiero llegar es que te des cuenta que se pueden tomar distintos valores de un registro, ahora entendiendo esto (y asumiendo que conoces las instrucciones MOV, ADD y SUB entenderás lo que viene a continuación):

Ejemplo 1

Código (asm) [Seleccionar]
MOV EAX, 1530h ; mueve a EAX el valor 1530h (valor hexadecimal)
ADD EAX, 1000h ; a EAX que es igual a 1530h o 5424d o 1010100110000b se le 1000h
SUB EAX, 500h ; luego se le resta 500h
MOV EBX, 100h ; EBX valdrá 100h
SUB EAX, EBX ; el resultado total de todas las operaciones se le resta EBX que posee un valor de 100h


Ejemplo 2

Código (asm) [Seleccionar]
MOV EAX, 00004932h ; EAX tendrá el valor de 00004932h
ADD AX, 45h ; a AX (4932h) se le suma 45h
SUB AL, 0Ah ; a 77h (valor que tendrá AL, se le resta 0Ah)


Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

apuromafo CLS

ahora estos mismos códigos los puedes ver "ensamblando en ollydbg", actualmente no tengo ollydbg en este pc, pero de igual forma
puedes ensamblar todos esos códigos  de una vez con multiassembler de michael  o IDAFICATOR de at4re (es un plugin)

o bien linea a linea con espacio(ensamble) , en cualquier programa desde su entrypoint , cuando terminas lo cual puedes hacer un simple f7 y confirmar los valores en eax, de cada uno, luego irás al panel de registros, miras eax  y en edit, tienes todos los valores anteriores.

yo actualmente lo anterior lo hice con una calculadora de windows , mientras estaba en clases de didáctica de geometría.