Initial MSVC 2008 projects workspace
This commit is contained in:
84
l2ooghelper/packet_handlers/ph_KeyPacket.cpp
Normal file
84
l2ooghelper/packet_handlers/ph_KeyPacket.cpp
Normal file
@@ -0,0 +1,84 @@
|
||||
#include "stdafx.h"
|
||||
#include "Logger.h"
|
||||
#include "L2Client.h"
|
||||
|
||||
void L2Client::ph_KeyPacket( class L2Client *pcls, L2GamePacket *p )
|
||||
{
|
||||
L2Game_KeyPacket *p_game_key = new L2Game_KeyPacket( p->getBytesPtr(), p->getPacketSize() );
|
||||
// parse KeyPacket
|
||||
if( p_game_key->getPacketSize() == 25 )
|
||||
{
|
||||
if( !p_game_key->parse( pcls->account.getL2Version() ) )
|
||||
{
|
||||
pcls->addChatToTab( CHAT_SYS, L"KeyPacket parse error!" );
|
||||
log_error( LOG_ERROR, "KeyPacket parse error!\n" );
|
||||
pcls->disconnectClient(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log_error( LOG_WARNING, "KeyPacket: length %u bytes (not 25)\n", p->getPacketSize() );
|
||||
pcls->addChatToTabFormat( CHAT_SYS, L"Warning! Short KeyPacket (L2Dream?)" );
|
||||
if(p_game_key->getDataSize() >= 10 )
|
||||
{
|
||||
p_game_key->getPacketType();
|
||||
p_game_key->p_protocolIsOK = p_game_key->readUChar(); // 0x01 - proto OK, 0x00 - proto not supported
|
||||
p_game_key->readBytes( p_game_key->p_initialKey, 8 ); // first 8 bytes of XOR key
|
||||
// short packet - ignore all rest bytes...
|
||||
// add last 8 bytes of XOR key - they are constant
|
||||
}
|
||||
else
|
||||
{
|
||||
log_error( LOG_ERROR, "KeyPacket: packet len is VERY SHORT! Some protocol error or bot protection!\n" );
|
||||
pcls->addChatToTab( CHAT_SYS, L"KeyPacket packet length is VERY SHORT! Some protocol error or bot protection!" );
|
||||
}
|
||||
L2Game_KeyPacket::createInitialHellboundKey( p_game_key->p_initialKey, p_game_key->p_initialKey );
|
||||
// disable opcode obfuscation by default on fucking Java servers
|
||||
p_game_key->p_obfuscatorSeed = 0;
|
||||
p_game_key->p_serverId = 0;
|
||||
p_game_key->p_protocolIsOK = 1;
|
||||
}
|
||||
// check correct protocol version
|
||||
if( !p_game_key->p_protocolIsOK )
|
||||
{
|
||||
log_error( LOG_WARNING, "KeyPacket: server tells protocolVersion is incorrect? O_o\n" );
|
||||
pcls->addChatToTab( CHAT_SYS, L"KeyPacket: server tells protocolVersion is incorrect? O_o" );
|
||||
}
|
||||
#ifdef _DEBUG
|
||||
log_error( LOG_DEBUG, "KeyPacket: gs ID: %d\n", (int)p_game_key->p_serverId );
|
||||
#endif
|
||||
|
||||
// create XOR encryption keys
|
||||
L2Game_KeyPacket::createInitialHellboundKey( p_game_key->p_initialKey, p_game_key->p_initialKey );
|
||||
// set BOTH recv & send keys to SAME value
|
||||
memcpy( pcls->game_key_recv, p_game_key->p_initialKey, 16 );
|
||||
memcpy( pcls->game_key_send, pcls->game_key_recv, 16 );
|
||||
pcls->game_XOR_enabled = true;
|
||||
|
||||
// remember obfuscator
|
||||
pcls->game_opcodeObfuscatorSeed = p_game_key->p_obfuscatorSeed;
|
||||
#ifdef _DEBUG
|
||||
log_error( LOG_DEBUG, "KeyPacket results:\nKey: " );
|
||||
int i = 0;
|
||||
for( i=0; i<16; i++ ) log_error_np( LOG_DEBUG, "%02X ", pcls->game_key_recv[i] );
|
||||
log_error_np( LOG_DEBUG, "\n" );
|
||||
log_error( LOG_DEBUG, "Obfuscator seed: %08X\n", pcls->game_opcodeObfuscatorSeed );
|
||||
#endif
|
||||
// free mem
|
||||
delete p_game_key; p_game_key = NULL;
|
||||
|
||||
// obfuscator manage
|
||||
if( pcls->game_opcodeObfuscatorSeed != 0 )
|
||||
{
|
||||
pcls->game_pCodeObfuscator = new L2PCodeObfuscator();
|
||||
pcls->game_pCodeObfuscator->setVersionMode( pcls->account.getL2Version() );
|
||||
pcls->game_pCodeObfuscator->init_tables( pcls->game_opcodeObfuscatorSeed );
|
||||
log_error( LOG_WARNING, "Client opcode obfuscation enabled.\n" );
|
||||
pcls->addChatToTab( CHAT_SYS, L"Notice: client opcode obfuscation enabled" );
|
||||
pcls->addChatToTab( CHAT_SYS, L"Notice: L2 off server >= Hellbound?" );
|
||||
}
|
||||
|
||||
// reply with AuthLogin
|
||||
pcls->send_AuthLogin();
|
||||
}
|
Reference in New Issue
Block a user