Son zamanlarda kimliği belirsiz kişiler tarafından büyük, küçük oyunlara yapılan hesap adı gözüken oyuncuları oyundan atma açığının fixini paylaşıyorum.
Hatanın yapılış şeklini bu fixi uygulamayacak arkadaşların zarar görmemesi için anlatmıyorum.
Açığı bulup benimle düzeltmem için paylaşan arkadaşa da teşekkürlerimi iletiyorum.
DB/ClientManagerLogin.cpp bulunur.
C++:
if (FindLogonAccount(r.login))
{
sys_log(0, "LOGIN_BY_KEY already login %s %lu", r.login, p->dwLoginKey);
TPacketDGLoginAlready ptog;
strlcpy(ptog.szLogin, szLogin, sizeof(ptog.szLogin));
pkPeer->EncodeHeader(HEADER_DG_LOGIN_ALREADY, dwHandle, sizeof(TPacketDGLoginAlready));
pkPeer->Encode(&ptog, sizeof(TPacketDGLoginAlready));
return;
}
Bu kod
C++:
strlcpy(ptog.szLogin, szLogin, sizeof(ptog.szLogin));
Bununla değiştirilir
C++:
strlcpy(ptog.szLogin, r.login, sizeof(ptog.szLogin));
Hatanın yapılış şeklini bu fixi uygulamayacak arkadaşların zarar görmemesi için anlatmıyorum.
Açığı bulup benimle düzeltmem için paylaşan arkadaşa da teşekkürlerimi iletiyorum.
DB/ClientManagerLogin.cpp bulunur.
C++:
if (FindLogonAccount(r.login))
{
sys_log(0, "LOGIN_BY_KEY already login %s %lu", r.login, p->dwLoginKey);
TPacketDGLoginAlready ptog;
strlcpy(ptog.szLogin, szLogin, sizeof(ptog.szLogin));
pkPeer->EncodeHeader(HEADER_DG_LOGIN_ALREADY, dwHandle, sizeof(TPacketDGLoginAlready));
pkPeer->Encode(&ptog, sizeof(TPacketDGLoginAlready));
return;
}
Bu kod
C++:
strlcpy(ptog.szLogin, szLogin, sizeof(ptog.szLogin));
Bununla değiştirilir
C++:
strlcpy(ptog.szLogin, r.login, sizeof(ptog.szLogin));