En
primer lugar, hablemos sobre lo que realmente es un byte
...para muchos de vosotros esto no será nada nuevo, así
que puedes saltar esta parte si deseas. Un byte consiste
en 8 bits que solo pueden contener un valor de 0 o 1. Por
ejemplo, así es cómo aparece la letra ' X' en forma
binaria:
X - 01011000
¿Cómo sé yo esto? Puedes conseguir esta información
bastante rápidamente... Primero necesitas el valor en
HEX de la letra ' X' o el valor en DEC. Una manera muy
cómoda de conseguir el valor está usando nuestro
debugger querido - SoftICE. En primer lugar entra en
SoftICE (Ctrl-D) y en la línea de comandos introduce:
? 'X'
Ahora verás algo como ' 00000058 0000000088 '. Eso
significa que 58 es el valor en hex de la letra X y que
88 es el valor decimal. También puedes conseguir esta
información de otras maneras, mirándolo en una tabla
ASCII es quizás la mejor manera. Ahora que sabes el
valor dec de la letra lo puedes cargar en la calculadora
que viene con Windows. Es uno de los pocos programas que
Microsoft ha desarrollado y que realmente puede ser
útil. Así, ahora que estás en la calculadora,
asegúrate de que tienes elegido la configuración '
avanzada' en el menú y introduce el valor en dec que
conseguiste previamente - 88 en este caso. Ahora pulsa
sobre ' la casilla de verificación' del botón bin .. y
voila - conseguiste la forma binaria de la letra ' X'...
¿bonito, huh?
Ok, ahora sigamos a la parte que todos han estado
esperando - ¡las instrucciones de manipulación de bits!
Hay un par de estas instrucciones, y verás muy a menudo
esto cuando estés en la ' autopista' del cracking.
Nosotros hablaremos sobre lo más común, comienza con...
·XOR·
Esta instrucción es muy importante, y quizás la razón
más grande de por qué he escrito este ensayo. ¿Qué
tipo de información podemos conseguir sobre esto? En
primer lugar, echemos una mirada a lo que PcHelp tiene
que decir sobre eso:
' Realiza un OR exclusivo de los operandos y devuelve el
resultado en el destino. '
¿Ok, iluminó eso las cosas para ti? Bien, no todos
piensan así, así que intentaré explicarlo.
Remontémonos de nuevo a nuestro ejemplo y usa la letra '
X'. ¿Qué piensas que haría una instrucción como ' XOR
88,65 '? Como ya sabes - 88 es el valor en dec de la
letra ' X' y 65 es el valor en dec de la letra ' A'
(debes poder deducir eso ahora). Echemos una mirada a lo
que ocurre:
Carácter Valor Dec Forma Binaria
X 88 01011000
A 65 01000001
Resultado después de XOR 85, 65:
25 00011001
Ok,
enfoquemos en la parte binaria. Lo que XOR realmente hace
es que compara dos bit entre si. Si ellos son el mismo,
el bit del resultado se pone a 0, si son diferentes el
bit del resultado se pone a 1. En cambio podemos
mostrarlo así:
0011
0101
----
0110
Ok, ahora que tú (esperanzadamente) entiendes cómo
funciona, tu próxima pregunta probablemente será algo
como '¿ para qué puede usarse? '. XOR se usa mucho
cuando se necesita de un encriptado simple. Te mostraré
por qué aquí:
XOR 88,65 = 25 (desde nuestro ejemplo)
XOR 25,88 = 65
XOR 25,65 = 88
¿Ves qué fácil es conseguir el valor original? Echa
una mirada a esto:
X "XOR'eado" con 57 es 89 (nota que X
simboliza ' la incógnita' aquí)
Y ahora quieres saber lo que es X... entonces simplemente
puedes usar XOR 57,89 y conseguirás el valor de X. Otra
cosa para lo que puede ser buena esta instrucción es si
quieres poner algo a cero... digamos que quieres vaciar
el registro EAX. Hay algunas maneras de hacer esto,
incluyendo,:
SUB EAX,EAX
MOV EAX,0
Efectivamente, las dos instrucciones funcionan bien, pero
podemos usar XOR en cambio. .. ¿pero cómo y por qué?
XOR EAX,EAX
Que también pone EAX al cero... la única diferencia es
que este método es más rápido ( tarda menos tiempo de
CPU) que los otros y eso es por lo que normalmente se
usa. Así que ahora cuando veas esto mientras estas
crackeando, sabrás qué está pasando. Todas las otras
instrucciones de manipulación de bits funcionan
similarmente, echa una mirada a...
·AND·
Ahora que sabes cómo trabaja XOR, es fácil entender
cómo AND funciona... Usaremos nuestro ejemplo una vez
más:
Carácter Valor Dec Forma Binaria
X 88 01011000
A 65 01000001
Resultado después de AND 85, 65:
64 01000000
También
AND compara todos los bits uno por uno.
Si los dos se ponen a 1, el bit del resultado también se
pone a 1, si no el bit del resultado se pone a 0. Ok,
rápidamente sigamos a otra instrucción.
·OR·
Una vez más nuestro ejemplo se usa:
Carácter Valor Dec Forma Binaria
X 88 01011000
A 65 01000001
Resultado después de OR 85, 65,:
89 01011001
Como los
otros también, OR compara los bits uno por uno. Si ambos
bits son 0, pone al bit del resultado a 0, si no lo pone
a 1.
|