Introducción
En este artículo, aprenderás a proteger archivos de cliente en MuOnline utilizando la comprobación CRC32. Este método es sencillo y se implementa a través de una DLL que permite verificar el código CRC de cualquier archivo que desees proteger de modificaciones. Para garantizar la efectividad de este proceso, es imprescindible utilizar herramientas como Molebox o Enigma para empaquetar tanto el archivo principal como la DLL, evitando así que sean borrados o reemplazados.
Archivos Importantes en el Proyecto
A continuación, se definen las rutas para varios archivos dentro del proyecto:
- PlayerF: Archivo que contiene datos del jugador.
- ItemF_eng: Archivo de ítems en inglés.
- ItemF_por: Archivo de ítems en portugués.
- ItemF_spa: Archivo de ítems en español.
- Antihack: Biblioteca dinámica utilizada para prevenir trampas en el juego.
La línea comentada sobre TextF sugiere que hay un archivo de texto relevante, pero actualmente no se está utilizando. Para más información sobre la seguridad en juegos online, consulta nuestro artículo sobre seguridad en juegos online.
Instrucciones para Configurar la DLL
1. Modificación del Archivo checkcrc.h
Dentro del código fuente, busca el archivo checkcrc.h
. Encontrarás líneas que definen variables que almacenan valores de checksum para los archivos mencionados. Un checksum es un valor calculado a partir del contenido de un archivo, utilizado para verificar su integridad. Si el contenido cambia, el checksum también lo hará.
// CheckSum Files const char* PlayerF = "Data/Player/player.bmd"; const char* ItemF_eng = "Data/Local/Eng/item_eng.bmd"; const char* ItemF_por = "Data/Local/Por/item_por.bmd"; const char* ItemF_spa = "Data/Local/Spn/item_spn.bmd"; // const char* TextF = "Data/Local/Text.bmd"; const char* Antihack = "Antihack.dll";
- PlayerFCRC: Checksum para el archivo del jugador.
- ItemFCRC_eng, ItemFCRC_por, ItemFCRC_spa: Checksum para los archivos de ítems en diferentes idiomas. Los checksums para los archivos en portugués y español son iguales, lo que puede indicar que son idénticos.
- AntihackCRC: Checksum para la biblioteca antihack.
Debes agregar los archivos que deseas proteger, incluyendo sus rutas completas. Si un archivo está en la misma carpeta que el archivo principal (por ejemplo, antihack.dll
), solo necesitas añadir el nombre de la DLL.
2. Códigos CRC
En la sección correspondiente, agrega los códigos CRC generados con CheckCRC.exe. Para obtener el código CRC de un archivo, haz clic en «Select File» en CheckCRC.exe, selecciona el archivo y copia el código generado, asegurándote de añadir «0x» al inicio.
3. Manejo de Mensajes de Error
El siguiente paso se encarga de verificar los CRC y mostrar mensajes de error en caso de modificaciones. Puedes agregar nuevas líneas para verificar otros archivos y personalizar los mensajes de error según tus necesidades. Si decides no proteger alguno de los archivos, simplemente comenta o elimina las líneas correspondientes.
// Checksum Code unsigned long PlayerFCRC = 0x7D56FCEB; unsigned long ItemFCRC_eng = 0xF9485939; unsigned long ItemFCRC_por = 0xF9485939; unsigned long ItemFCRC_spa = 0xF9485939; // unsigned long TextFCRC = 0x370F4288; unsigned long AntihackCRC = 0x73C789F1;
Compilación y Empaquetado
Una vez que hayas realizado todas las modificaciones necesarias, compila la DLL y conéctala al archivo principal. Luego, empaqueta ambos archivos utilizando Molebox o una herramienta similar.
Nota Importante
Esta comprobación de CRC es útil para evitar la modificación de archivos que no se pueden empaquetar, como algunos antihacks. Recuerda que si tu archivo principal no puede ser empaquetado, la DLL podría ser eliminada.
void checkCrc32() { CCRC32 MyCRC32; MyCRC32.Initialize(); unsigned long ulCRCP = MyCRC32.FileCRC(PlayerF); unsigned long ulCRC_eng = MyCRC32.FileCRC(ItemF_eng); unsigned long ulCRC_por = MyCRC32.FileCRC(ItemF_por); unsigned long ulCRC_spa = MyCRC32.FileCRC(ItemF_spa); unsigned long ulCRCAH = MyCRC32.FileCRC(Antihack); if(ulCRCP != PlayerFCRC) { MessageBoxA(0, "¡Archivo de jugador modificado!", "Error", MB_OK | MB_ICONSTOP); ExitProcess(1); } if(ulCRC_eng != ItemFCRC_eng) { MessageBoxA(0, "¡Archivo de ítem modificado!", "Error", MB_OK | MB_ICONSTOP); ExitProcess(1); } if(ulCRC_por != ItemFCRC_por) { MessageBoxA(0, "¡Archivo de ítem modificado!", "Error", MB_OK | MB_ICONSTOP); ExitProcess(1); } if(ulCRC_spa != ItemFCRC_spa) { MessageBoxA(0, "¡Archivo de ítem modificado!", "Error", MB_OK | MB_ICONSTOP); ExitProcess(1); } if(ulCRCAH != AntihackCRC) { MessageBoxA(0, "¡AntiHack no encontrado!", "Error", MB_OK | MB_ICONSTOP); ExitProcess(1); } }
Puedes agregar nuevas líneas para verificar otros archivos y personalizar los mensajes de error según tus necesidades. Si decides no proteger alguno de los archivos, simplemente comenta o elimina las líneas correspondientes.
Compilación y Empaquetado
Una vez que hayas realizado todas las modificaciones necesarias, compila la DLL y conéctala al archivo principal. Luego, empaqueta ambos archivos utilizando Molebox o una herramienta similar.
Nota Importante
Esta comprobación de CRC es útil para evitar la modificación de archivos que no se pueden empaquetar, como algunos antihacks. Recuerda que si tu archivo principal no puede ser empaquetado, la DLL podría ser eliminada.
Recursos Adicionales
- CheckCRC.exe: Descargar aquí
Créditos
- aecrimch
- GX_KYO