Ese paso de desempaquetar-descomprimir el archivo se aplica a todo archivo que pretendamos modificar.
Bien, ejecutemos ahora nuestro servidor (ejecuta sin miedo que no funciona) y veamos el error que nos muestra:
Parece que el servidor tiene problemas al tratar de ejecutar una función llamada RegisterServiceProcess que debería estar en la libreria Kernel32.dll, debería estar si usamos Windows 95,98,2000 pero en XP no está. Por eso da un error y se cierra sin ejecutarse el resto del programa.
Abriremos ahora nuestro servidor con un editor hexadecimal (no hexagesimal como se lee en algunos foros) y podremos ver un listado de los bytes de nuestro archivo tanto en hexadecimal como en ASCII.
Buscaremos dentro de nuestro ejecutable la palabra RegisterServiceProcess:
Una vez hayamos localizado la frase en nuestro ejecutable pasaremos a modificarla, como verán ocupa 16 bytes:
Sustituiremos esta función por otra que debe existir en la librería Kernel32.dll, por ejemplo GetVersion. Para ello nos situamos antes de la primera letra de la palabra RegisterServiceProcess en la columna donde se muestran los datos en ASCII. Vean en la siguiente imagen donde coloco el cursor:
Y una vez situados ahí empezamos a escribir la nueva palabra, GetVersion. Vean como debe quedar:
Como verán la nueva palabra ocupa menos bytes, por lo que tendremos que rellenar con ceros el espacio que nos falta, para ello ahora nos situaremos en la columna donde se muestran los bytes en hexadecimal y empezaremos a escribir los ceros:
Una vez que hemos realizado la modificación salvamos los cambios y realizamos la misma búsqueda para comprobar si quedan mas RegisterServiceProcess en el ejecutable para modificarlos todos. Pero no encontraremos más. Probemos ahora nuestro ejecutable modificado. Obtendremos un nuevo error:
El nuevo error hace referencia a otra función, WNetEnumCachedPasswords, que se debería encontrar en la librería mpr.dll, pero en XP esta función no podemos encontrarla en esta librería. Así que repetimos el proceso exactamente igual, buscamos tanta veces como haga falta la palabra WNetCachedPasswords y la sustituimos por WNetClearConnections.
Y sustituimos por WNetClearConnections:
Recuerden que debemos rellenar con ceros para igualar la longitud.
Repetimos el proceso cuantas veces haga falta (una más en realidad) y salvamos los cambios.
Aunque no se lo crean ya tenemos un servidor que funciona en Windows XP, antes de volver a ejecutarlo despues de modificado para comprobar que funciona, les recomiendo que usen el editserver para configurar el servidor pues por defecto abrirá un puerto aleatorio, usará un nombre aleatorio y un método de inicio dificil de eliminar.
Una vez configurado según sus preferencias podrán ejecutarlo sin miedo para comprobar que efectivamente funciona.
Este método es aplicable a muchos programas y para conseguir cosas muy distintas a hacer funcionar software viejo en sistemas operativos nuevos. Espero que hayan aprendido algo.
En el proximo capitulo publicaré un parche para los que no han sido lo suficientemente mañosos como para modificarlo a mano.
No hay comentarios:
Publicar un comentario