Pues pulsamos con el botón del ratón arriba en el primero y sustituimos todos los bytes por 90. 

Entonces quedaría asi: 

Inicialmente: E8 E8 D8 00 00 
Modificado: 90 90 90 90 90 

Cuando pulsamos intro, vemos como en la ventana de instrucciones hay un cambio y aparecen 5 nops en vez de la anterior call. 

ya podemos ir pulsando F10 y pasando cada NOP. 

Hasta que llegamos a los saltos de comprobación. 

:0040298B E8E8D80000              Call 00410278 
|5 Nops 

<> Call q llama al password.

:00402990 83F801                  cmp eax, 00000001 
|Compara EAX con 1...

:00402993 7571                    jne 00402A06 
|Salta si EAX no es = 1

:00402995 8B842404010000          mov eax, dword ptr [esp+00000104]
:0040299C 6A00                    push 00000000
:0040299E 85C0                    test eax, eax 
|Comprueba si EAX es 0

:004029A0 7452                    je 004029F4
 |Salta si es 0

Como vemos al ir pulsando F10 por el código, después de la primera comparación, saltará y entonces el programa no hará nada. Eso es equivalente a 
que 
pulsemos el botón Cancel en la ventana de meter el password. 

La segunda comparación (test eax, eax) y su correspondiente salto condicional también hacen de las suyas :). 
Aquí también saltará al offset 004029F4 , haciendo aparecer directamente el messagebox de Invalid Password. 

Pues ya está todo resuelto... nos tenemos que deshacer de la call que llama a la ventana de password y evitar los dos saltos condicionales. 

Podriamos dejarlo 'mu pofesional' convirtiendo el primer call en una instrucción que nos mueva a EAX un 1, y asi el salto condicional que tenemos 
a 
continuación no saltase nunca. 
Después hay una instrucción que mueve a EAX algo situado en esp+00000104. Si lo que mueve es un 0, el salto condicional de la siguiente línea nos 
llevará a la ventana de 'invalid password', entonces pondremos un 1 también, asi este salto se portará adecuadamente y nos dejará seguir sin 
problemas. 

Todo esto son pijadillas... para hacer algo rapido podemos llenar de NOPs la call y los saltos y seguro que funciona. Pero esto demuestra que 
sabemos lo 
que estamos haciendo. 

El cambio lo realizamos en memoria con SoftIce... 
Esto ya debería estar claro como hacerlo. 

Para que el programa se vuelva a cargar en memoria correctamente (anulando todos los cambios que hicimos anteriormente), le cerramos y le volvemos 
a 
cargar con el Symbol Loader. 

Entonces activamos nuestro efectivo breakpoint en 402974 y comenzamos con las modificaciones finales. 

Usando F10, llegamos hasta 0040298B. Escribimos a en softice y hacemos nuestra bonita modificación de mover a EAX un 1 :). 

a [enter] 
mov eax, 1 

Ya está.. hmmm pero tenemos que tener en cuenta una cosa. La anterior instrucción (la call) usaba 5 bytes, hemos tenido suerte, y nuestra 
instrucción 
(el mov) ocupa también 5. Entonces no tendremos q añadir nada para rellenar. 

Entonces el código quedaría asi: 
Inicialmente: E8 E8 D8 00 00 (call 00410278) 
Nuevo código: B8 01 00 00 00 (mov eax, 1) 


Ahora nos queda hacer el otro cambio... es en 402995. 
Nos situamos allí y escribimos a en SoftIce. Ahora ponemos lo que queremos: 

mov eax, 1 

ya está... hmmmmmm ahora si que tenemos el 'problema' ese. Nuestra nueva instrucción ocupa 5 bytes, y la antigua ocupaba 7. 
Bueno, solamente tendremos que rellenar los dos bytes de diferencia con 2 nops. 

Ponemos DB 402995 en softIce, y en la parte de arriba nos aparecen los bytes de ese offset. 
Solo tenemos que poner 90 90 en el 00 00 que queda al final de la instrucción y ya está arreglado. 

Entonces el código quedaría asi: 
Inicialmente: 8B 84 24 04 01 00 00 (mov eax, dword ptr [esp+00000104]) 
Nuevo código: B8 01 00 00 00 90 90 (mov eax, 1 | nop | nop ) 

Resumen: 

Código Inicial: 

:0040298B E8E8D80000     Call 00410278 
| Llamada a la ventana de Password

:00402990 83F801         cmp eax, 00000001 
| Eax no es 1 si damos cancel

:00402993 7571           jne 00402A06 
| Vuelve al programa

:00402995 8B842404010000 mov eax, dword ptr [esp+00000104]
| a eax resultado checkeos

:0040299C 6A00           push 00000000
:0040299E 85C0           test eax, eax 
| Comprueba si eax es 0.

:004029A0 7452           je 004029F4 
| Si es 0, salta a Invalid password.

Código 'Reparado': 

:0040298B B801000000     mov eax, 1 
| (Nuevo) - Mueve 1 a eax

:00402990 83F801         cmp eax, 00000001 
| Eax siempre será 1

:00402993 7571           jne 00402A06 
| Nunca saltará

:00402995 B801000000     mov eax, 1 
| (Nuevo) - Mueve 1 a eax

:0040299A 90             nop 
| (relleno)

:0040299B 90             nop 
| (relleno)

:0040299C 6A00           push 00000000
:0040299E 85C0           test eax, eax 
| eax lo pusimos en 1...

:004029A0 7452           je 004029F4 
| Nunca saltará

Ok, ya está, ahora le damos en File/Administrationm Tools y directamente nos abré la ventana de opciones sin pedir ni password ni leches. :) 

El cambio para que sea permantente en el ejecutable se realiza como ya explique antes... solo hay que modificar los bytes con un editor 
hexadecimal y 
listo. 

Despedida, agradecimientos y esas cosas....  

Ha quedado un tutorial bastante extenso, pero es lo que ocurre cuando se explica todo y no se da nada por supuesto... cosa que he intentado hacer 
(menos 
en lo de parchear los ejecutables) para que nadie se quede con dudas o atascado en cierto punto o haga cosas solo porque las pone aquí sin razonar 
el 
porqué. 

Si os ha gustado este tutorial hacedmelo saber escribiendome a tntcrackteam@hotmail.com . 

Agradecimientos y Saludos: 

Primero a Thndrkiss por hacer el Serials 2k: ey, estoy ayudando a tus coders a mejorar la seguridad para próximas versiones...