Para los que no entienden que es esto...
Prácticamente es una encriptación de paquetes donde pueden encriptar el paquete antes de realizar el envío desde el main hacia el server.
El offset es para el main Season 6 1.04e GMOEsto MuEmu ya lo realiza en dos partes:
-Primero lo realiza en el main.dll adentro del Protocol.cpp, si buscamos el final del archivo encontramos el DataSend donde podemos ver que hace exactamente esto mismo pero programado de otra manera y utilizando el PacketManager.cpp. Si quisieran modificar la encriptación default (básicamente el fin de este post), pueden hacerlo en el PacketManager.cpp donde van a tener definido el "m_XorFilter" y cada valor que se usará para encriptar el paquete a enviar. (SI REALIZAN ESTA MODIFICACIÓN EN EL MAIN.DLL, TIENEN QUE HACERLA DE LA MISMA MANERA EN EL GAMESERVER)
-Segundo en particular MuEmu tiene un segundo encriptado propio que se hace desde HackCheck.cpp interviniendo tanto el send como el recv para poder realizar su propia encriptación. Si quieren modificar esta segunda encriptación, los que usan MuEmu simplemente van al archivo HackCheck.cpp en su main.dll y modifican las funciones EncryptData y DecryptData. (SI REALIZAN ESTA MODIFICACIÓN EN EL MAIN.DLL, TIENEN QUE HACERLA DE LA MISMA MANERA EN EL GAMESERVER)
Y por último dejo la siguiente aclaración:
Todos los envíos realizados por el main.exe directamente son encriptados automáticamente de tal manera que el gameserver ya lo puede interpretar (exactamente la misma manera en que lo hace el PacketManager). El problema está en cuando ustedes quieren modificar esa encriptación del PacketManager, sólo les va a funcionar con sus propios envíos al DataSend mientras que los envíos default no funcionarán.
Entonces si quieren modificar la encriptación default del main.exe, pueden hacerlo de esta manera y yo opino que lo mejor sería redirigir el llamado directamente hacia el PacketManager, ya que de esa manera unifican sus propios envíos
En MuEmu CREO que pueden hacerlo de la siguiente manera:
#include "Protocol.h"
SetCompleteHook(0xE9, 0x00404DB0, &DataSendHook);
void DataSendHook(char* buf, int len, BOOL bEncrypt, BOOL bForceC4)
{
if (!bEncrypt)
{
return ((void(__thiscall*)(void*, BYTE*, DWORD))0x00405110)((void*)0x08793750, send, size);
}
return DataSend(buf, len);
}