extend config optons DialogBox
teon pvp server hacks
This commit is contained in:
parent
df6a9cc098
commit
a424966835
@ -59,6 +59,8 @@ void ConfigDlg_OnInitDialog( HWND hDlg )
|
||||
SendMessage( h, CB_ADDSTRING, 0, (LPARAM)TEXT("Chaotic Throne 2.2 - Gracia Part 2") );
|
||||
SendMessage( h, CB_ADDSTRING, 0, (LPARAM)TEXT("Chaotic Throne 2.3 - Gracia Final") );
|
||||
SendMessage( h, CB_ADDSTRING, 0, (LPARAM)TEXT("Chaotic Throne 2.4 - Gracia Epilogue") );
|
||||
SendMessage( h, CB_ADDSTRING, 0, (LPARAM)TEXT("2nd Throne - Freya") );
|
||||
SendMessage( h, CB_ADDSTRING, 0, (LPARAM)TEXT("2nd Throne - High Five") );
|
||||
SendMessage( h, CB_SETCURSEL, (WPARAM)g_cfg.L2_version, 0 );
|
||||
// L2 Client Version
|
||||
h = GetDlgItem( hDlg, IDC_CB_L2CVER );
|
||||
@ -68,6 +70,8 @@ void ConfigDlg_OnInitDialog( HWND hDlg )
|
||||
SendMessage( h, CB_ADDSTRING, 0, (LPARAM)TEXT("Chaotic Throne 2.2 - Gracia Part 2") );
|
||||
SendMessage( h, CB_ADDSTRING, 0, (LPARAM)TEXT("Chaotic Throne 2.3 - Gracia Final") );
|
||||
SendMessage( h, CB_ADDSTRING, 0, (LPARAM)TEXT("Chaotic Throne 2.4 - Gracia Epilogue") );
|
||||
SendMessage( h, CB_ADDSTRING, 0, (LPARAM)TEXT("2nd Throne - Freya") );
|
||||
SendMessage( h, CB_ADDSTRING, 0, (LPARAM)TEXT("2nd Throne - High Five") );
|
||||
SendMessage( h, CB_SETCURSEL, (WPARAM)g_cfg.L2_client_version, 0 );
|
||||
|
||||
// full mode enable
|
||||
@ -80,6 +84,8 @@ void ConfigDlg_OnInitDialog( HWND hDlg )
|
||||
CheckDlgButton( hDlg, IDC_C_GAMEGUARDREPLY, g_cfg.ReplyL2JGameGuardQuery );
|
||||
// Gracia Epilogue protocol 148 hacks
|
||||
CheckDlgButton( hDlg, IDC_C_EPILOGUE_148_146, g_cfg.GraciaEpilogueProtocol_148_hacks );
|
||||
// TeonPvP hacks
|
||||
CheckDlgButton( hDlg, IDC_C_TEONPVP_HACKS, g_cfg.TeonPvP_hacks );
|
||||
|
||||
// L2Walker_DropRequestGMList
|
||||
CheckDlgButton( hDlg, IDC_C_L2WDROPGMLIST, g_cfg.L2Walker_DropRequestGMList );
|
||||
@ -120,6 +126,7 @@ void ConfigDlg_OnInitDialog( HWND hDlg )
|
||||
// forced game server select setting
|
||||
SetDlgItemTextA( hDlg, IDC_E_FORCEGSIP, g_cfg.ForceGameServerIP );
|
||||
SetDlgItemInt( hDlg, IDC_E_FORCEGSPORT, g_cfg.ForceGameServerPort, TRUE );
|
||||
SetDlgItemInt( hDlg, IDC_E_INGAME_GAMESERVER_PORT, g_cfg.IngameGameServerPort, TRUE );
|
||||
|
||||
ConfigDlg_UpateEnabledControls( hDlg );
|
||||
}
|
||||
@ -141,6 +148,8 @@ void ConfigDlg_OnOK( HWND hDlg, BOOL bEndDialog )
|
||||
g_cfg.ReplyL2JGameGuardQuery = IsDlgButtonChecked( hDlg, IDC_C_GAMEGUARDREPLY );
|
||||
// Gracia Epilogue protocol 148 hacks
|
||||
g_cfg.GraciaEpilogueProtocol_148_hacks = IsDlgButtonChecked( hDlg, IDC_C_EPILOGUE_148_146 );
|
||||
// TeonPvP hacks
|
||||
g_cfg.TeonPvP_hacks = IsDlgButtonChecked( hDlg, IDC_C_TEONPVP_HACKS );
|
||||
|
||||
// L2Walker_DropRequestGMList
|
||||
g_cfg.L2Walker_DropRequestGMList = IsDlgButtonChecked( hDlg, IDC_C_L2WDROPGMLIST );
|
||||
@ -177,10 +186,12 @@ void ConfigDlg_OnOK( HWND hDlg, BOOL bEndDialog )
|
||||
// forced GS settings
|
||||
GetDlgItemTextA( hDlg, IDC_E_FORCEGSIP, g_cfg.ForceGameServerIP, sizeof(g_cfg.ForceGameServerIP) );
|
||||
g_cfg.ForceGameServerPort = GetDlgItemInt( hDlg, IDC_E_FORCEGSPORT, NULL, TRUE );
|
||||
g_cfg.IngameGameServerPort = GetDlgItemInt( hDlg, IDC_E_INGAME_GAMESERVER_PORT, NULL, TRUE );
|
||||
|
||||
//
|
||||
g_cfg.SaveConfig();
|
||||
if( bEndDialog == TRUE ) EndDialog( hDlg, IDOK );
|
||||
if( bEndDialog == TRUE )
|
||||
EndDialog( hDlg, IDOK );
|
||||
}
|
||||
|
||||
void ConfigDlg_OnApply( HWND hDlg )
|
||||
@ -269,6 +280,11 @@ void ConfigDlg_UpateEnabledControls( HWND hDlg )
|
||||
EnableWindow( GetDlgItem( hDlg, IDC_E_REALPORT ), FALSE );
|
||||
//EnableWindow( GetDlgItem( hDlg, IDC_E_PLAYGSNO ), FALSE );
|
||||
}
|
||||
//else
|
||||
//{
|
||||
// disable some controls in outgame mode
|
||||
// EnableWindow( GetDlgItem( hDlg, IDC_E_INGAME_GAMESERVER_PORT ), FALSE );
|
||||
//}
|
||||
// also temporarily disable some controls
|
||||
EnableWindow( GetDlgItem( hDlg, IDC_C_ENABLE_MODGT ), FALSE );
|
||||
//EnableWindow( GetDlgItem( hDlg, IDC_C_ENABLE_MODGT ), FALSE );
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ void CConfig::_initNull()
|
||||
OverrideGameProtocolVersion = 0;
|
||||
ReplyL2JGameGuardQuery = 0;
|
||||
GraciaEpilogueProtocol_148_hacks = 0;
|
||||
TeonPvP_hacks = 0;
|
||||
// L2Walker fixes
|
||||
L2Walker_DropRequestGMList = 0;
|
||||
L2Walker_FixMoveBackwardToLocation = 1;
|
||||
@ -172,6 +173,10 @@ bool CConfig::ReadConfig( const char *szConfigFileName )
|
||||
{
|
||||
sscanf( token, "%d", &(this->GraciaEpilogueProtocol_148_hacks) );
|
||||
}
|
||||
if( strstr( line, "TeonPvP_hacks" ) == line )
|
||||
{
|
||||
sscanf( token, "%d", &(this->TeonPvP_hacks) );
|
||||
}
|
||||
if( strstr( line, "ThreadProirityRaiseEnable" ) == line )
|
||||
{
|
||||
sscanf( token, "%d", &(this->ThreadProirityRaiseEnable) );
|
||||
@ -221,13 +226,15 @@ bool CConfig::SaveConfig()
|
||||
fprintf( f, ""
|
||||
"# First - configure Lineage2 game protocol version and L2 Client version.\n"
|
||||
"# Supported versions are:\n"
|
||||
"# * Chaotic Throne 1 - The Kamael = 0\n"
|
||||
"# * Chaotic Throne 1.5 - Hellbound = 1\n"
|
||||
"# * Chaotic Throne 2 - Gracia (Part 1) = 2\n"
|
||||
"# * Chaotic Throne 2.2 - Gracia Part 2 = 3\n"
|
||||
"# * Chaotic Throne 2.3 - Gracia Final = 4\n"
|
||||
"# * Chaotic Throne 2.4 - Gracia Epilogue = 5\n"
|
||||
"# default is 4 (CT2.3 Gracia Final)\n"
|
||||
"# * Chaotic Throne 1 - The Kamael = 0\n"
|
||||
"# * Chaotic Throne 1.5 - Hellbound = 1\n"
|
||||
"# * Chaotic Throne 2 - Gracia (Part 1) = 2\n"
|
||||
"# * Chaotic Throne 2.2 - Gracia Part 2 = 3\n"
|
||||
"# * Chaotic Throne 2.3 - Gracia Final = 4\n"
|
||||
"# * Chaotic Throne 2.4 - Gracia Epilogue = 5\n"
|
||||
"# * 2nd Throne - Freya = 6\n"
|
||||
"# * 2nd Throne - High Five = 7\n"
|
||||
"# default is 6 (CT2.5 Freya)\n"
|
||||
"Lineage2Version = %d\n"
|
||||
"Lineage2ClientVersion = %d\n"
|
||||
"\n\n",
|
||||
@ -384,6 +391,12 @@ bool CConfig::SaveConfig()
|
||||
"\n",
|
||||
GraciaEpilogueProtocol_148_hacks );
|
||||
|
||||
fprintf( f, ""
|
||||
"# Enables server specific protocol handlers for TeonPvP server.\n"
|
||||
"TeonPvP_hacks = %d\n"
|
||||
"\n",
|
||||
TeonPvP_hacks );
|
||||
|
||||
fprintf( f, ""
|
||||
"# Fixes L2Walker wrong or old packets\n"
|
||||
"L2Walker_DropRequestGMList = %d\n"
|
||||
@ -426,13 +439,9 @@ bool CConfig::SaveConfig()
|
||||
|
||||
void CConfig::SetDefault()
|
||||
{
|
||||
// declared in L2PcodeObfuscator.h (include L2Packets.h)
|
||||
//#define L2_VERSION_T1 0
|
||||
//#define L2_VERSION_T15 1
|
||||
//#define L2_VERSION_T2 2
|
||||
//#define L2_VERSION_T22 3
|
||||
L2_version = 4;
|
||||
L2_client_version = 4;
|
||||
// declared in L2_versions.h (include L2Packets.h)
|
||||
L2_version = 7;
|
||||
L2_client_version = 7;
|
||||
|
||||
// Listen port setup
|
||||
strcpy( FakeListenLoginIP, "127.0.0.1" );
|
||||
@ -462,6 +471,7 @@ void CConfig::SetDefault()
|
||||
OverrideGameProtocolVersion = 0;
|
||||
ReplyL2JGameGuardQuery = 0;
|
||||
GraciaEpilogueProtocol_148_hacks = 0;
|
||||
TeonPvP_hacks = 0;
|
||||
|
||||
// L2Walker fixes
|
||||
L2Walker_DropRequestGMList = 0;
|
||||
|
@ -51,6 +51,7 @@ public:
|
||||
int OverrideGameProtocolVersion;
|
||||
int ReplyL2JGameGuardQuery;
|
||||
int GraciaEpilogueProtocol_148_hacks;
|
||||
int TeonPvP_hacks;
|
||||
|
||||
// L2Walker fixes
|
||||
int L2Walker_DropRequestGMList;
|
||||
|
@ -37,6 +37,7 @@ void DebugDlg_OnTimer( HWND hDlg, UINT_PTR nIDEvent );
|
||||
void DebugDlg_updateInfo( HWND hDlg );
|
||||
void DebugDlg_OnBnClickedValidateInterception( HWND hDlg );
|
||||
void DebugDlg_OnBnClickedInterceptConnect( HWND hDlg );
|
||||
void DebugDlg_OnBnClickedRestoreConnect( HWND hDlg );
|
||||
void DebugDlg_OnBnClickedCheckVP( HWND hDlg );
|
||||
void DebugDlg_OnBnClickedDumpAllRelations( HWND hDlg );
|
||||
void DebugDlg_OnBnClickedPrintAddrTid( HWND hDlg );
|
||||
@ -63,6 +64,7 @@ INT_PTR CALLBACK DebugDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara
|
||||
case IDC_B_CONDISABLE: DebugDlg_OnBnClickedDisableConsole( hDlg ); break;
|
||||
case IDC_B_VALIDATEINTERCEPT: DebugDlg_OnBnClickedValidateInterception( hDlg ); break;
|
||||
case IDC_B_INTERCEPTCONNECT: DebugDlg_OnBnClickedInterceptConnect( hDlg ); break;
|
||||
case IDC_B_RESTORECONNECT: DebugDlg_OnBnClickedRestoreConnect( hDlg ); break;
|
||||
case IDC_B_CHECK_VIRTUALPROTECTEX: DebugDlg_OnBnClickedCheckVP( hDlg ); break;
|
||||
case IDC_B_LOADWALKER: DebugDlg_OnBnClickedLoadWalker( hDlg ); break;
|
||||
case IDC_B_UNLOADWALKER: DebugDlg_OnBnClickedUnloadWalker( hDlg ); break;
|
||||
@ -305,6 +307,12 @@ void DebugDlg_OnBnClickedInterceptConnect( HWND hDlg )
|
||||
}
|
||||
}
|
||||
|
||||
void DebugDlg_OnBnClickedRestoreConnect( HWND hDlg )
|
||||
{
|
||||
hDlg = NULL;
|
||||
Hook_RestoreConnect_my();
|
||||
}
|
||||
|
||||
void DebugDlg_OnBnClickedCheckVP( HWND hDlg )
|
||||
{
|
||||
hDlg = NULL;
|
||||
|
@ -233,7 +233,7 @@ bool GameClient::PP_full_fromClient( unsigned char *bytes, unsigned int len,
|
||||
p->read_protoVer( &(this->gameProtoVer) );
|
||||
delete p;
|
||||
log_error( LOG_PACKETNAME, "Client: 0e ProtocolVersion %u\n", this->gameProtoVer );
|
||||
if( this->gameProtoVer >= 0xFFFFFFF0 )
|
||||
if( this->gameProtoVer >= 0xFFFFFFF0 ) // < 0
|
||||
{
|
||||
this->thisWasJustServerPing = true; // received client ping (full)
|
||||
log_error( LOG_PACKETNAME, "Received client ping server... no process\n" );
|
||||
|
@ -145,6 +145,7 @@ bool GameClient::PP_full_fromServer( unsigned char *bytes, unsigned int len,
|
||||
lpco->init_tables( this->opcodeObfuscator );
|
||||
this->clsObfuscator = (void *)lpco;
|
||||
}
|
||||
else log_error( LOG_PACKETNAME, "Server: 2e KeyPacket: not using obfuscation key! OK\n" );
|
||||
} break; // KeyPacket
|
||||
case 0x09: // CharacterSelectionInfo // Hellbound
|
||||
{
|
||||
|
@ -83,7 +83,7 @@ bool GameClient::PC_sniff( SOCKET scl, unsigned char *sip, unsigned short int sp
|
||||
log_error( LOG_WARNING, "GameClient::ProcessClient_onlySniff(): Cannot open log file [%s] for writing!\n",
|
||||
filename );
|
||||
// open raw log data for not decrypted packets, if problems with decryption
|
||||
// this->logfileRaw = fopen( filename_raw, "wt" );
|
||||
this->logfileRaw = fopen( filename_raw, "wt" );
|
||||
}
|
||||
|
||||
// set initial game client state
|
||||
@ -235,6 +235,11 @@ closeSocks: // all cleanup
|
||||
fclose( this->logfile );
|
||||
this->logfile = NULL;
|
||||
}
|
||||
if( this->logfileRaw )
|
||||
{
|
||||
fclose( this->logfileRaw );
|
||||
this->logfileRaw = NULL;
|
||||
}
|
||||
// stop AI thread
|
||||
ai.notifyEvent( UAI_EVENT_STOP );
|
||||
this->resetConnectedState();
|
||||
|
@ -77,20 +77,44 @@ void GameClient::PP_sniff_fromServer( unsigned char *bytes, unsigned int len )
|
||||
//case 0x00: // Interlude: KeyPacket, FirstKey
|
||||
case 0x2e: // Hellbound: KeyPacket, FirstKey
|
||||
{
|
||||
L2Game_KeyPacket *p = new L2Game_KeyPacket( bytes, len );
|
||||
p->read_key( this->key_client_cs );
|
||||
p->read_GameServerID();
|
||||
this->opcodeObfuscator = p->read_OpcodeObfuscator();
|
||||
L2Game_KeyPacket::createInitialHellboundKey( this->key_client_cs,
|
||||
this->key_client_cs );
|
||||
delete p;
|
||||
if( g_cfg.TeonPvP_hacks )
|
||||
{
|
||||
L2GamePacket *p = new L2GamePacket( bytes, len );
|
||||
unsigned char opcode = p->getPacketType();
|
||||
unsigned char protoOk = p->readC();
|
||||
p->readBytes( this->key_client_cs, 16 ); // 16 bytes instead of 8?
|
||||
int d1 = p->readD();
|
||||
int d2 = p->readD();
|
||||
int c1 = p->readC();
|
||||
int obf_key = p->readD();
|
||||
delete p;
|
||||
//
|
||||
log_error( LOG_PACKETNAME, "TeonPvP: enbaled hacks. KeyPacket [%02X] Read key [", (unsigned)opcode );
|
||||
for( i=0; i<16; i++ ) log_error_np( LOG_PACKETNAME, "%02X", (unsigned)this->key_client_cs[i] );
|
||||
log_error_np( LOG_PACKETNAME, "]\n" );
|
||||
log_error( LOG_PACKETNAME, " protocolOk : %d\n", protoOk );
|
||||
log_error( LOG_PACKETNAME, " d1 : %d\n", d1 );
|
||||
log_error( LOG_PACKETNAME, " d2 : %d\n", d2 );
|
||||
log_error( LOG_PACKETNAME, " c1 : %d\n", c1 );
|
||||
log_error( LOG_PACKETNAME, " obf_key : %d\n", obf_key );
|
||||
}
|
||||
else
|
||||
{
|
||||
L2Game_KeyPacket *p = new L2Game_KeyPacket( bytes, len );
|
||||
p->read_key( this->key_client_cs );
|
||||
p->read_GameServerID();
|
||||
this->opcodeObfuscator = p->read_OpcodeObfuscator();
|
||||
L2Game_KeyPacket::createInitialHellboundKey( this->key_client_cs,
|
||||
this->key_client_cs );
|
||||
delete p;
|
||||
}
|
||||
memcpy( this->key_client_sc, this->key_client_cs,
|
||||
sizeof(this->key_client_cs) );
|
||||
this->xor_enabled = true;
|
||||
log_error( LOG_PACKETNAME, "Server: 2e KeyPacket\n" );
|
||||
log_error( LOG_DEBUGDUMP, "Server: 2e KeyPacket: key: " );
|
||||
for( i=0; i<16; i++ ) log_error_np( LOG_DEBUGDUMP, "%02X ", this->key_client_cs[i] );
|
||||
log_error_np( LOG_DEBUGDUMP, "\n" );
|
||||
log_error( LOG_PACKETNAME, "Server: 2e KeyPacket: key: " );
|
||||
for( i=0; i<16; i++ ) log_error_np( LOG_PACKETNAME, "%02X ", this->key_client_cs[i] );
|
||||
log_error_np( LOG_PACKETNAME, "\n" );
|
||||
// log obfuscator, if it is != 0x00000000
|
||||
LOG_LEVEL log_level = LOG_DEBUGDUMP;
|
||||
if( this->opcodeObfuscator != 0x00000000 )
|
||||
@ -111,6 +135,7 @@ void GameClient::PP_sniff_fromServer( unsigned char *bytes, unsigned int len )
|
||||
lpco->init_tables( this->opcodeObfuscator );
|
||||
this->clsObfuscator = (void *)lpco;
|
||||
}
|
||||
else log_error( LOG_PACKETNAME, "Server: 2e KeyPacket: not using obfuscator\n" );
|
||||
} break; // KeyPacket
|
||||
case 0x09: // CharacterSelectionInfo // Hellbound
|
||||
{
|
||||
|
@ -24,54 +24,59 @@ BEGIN
|
||||
END
|
||||
|
||||
|
||||
IDD_CONFIG DIALOGEX 0,0,332,261
|
||||
IDD_CONFIG DIALOGEX 0,0,332,297
|
||||
CAPTION "Network/Protocol Setup"
|
||||
FONT 8,"MS Shell Dlg",400,0,1
|
||||
STYLE WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_MODALFRAME|DS_SETFONT|DS_FIXEDSYS
|
||||
BEGIN
|
||||
CONTROL "OK",IDOK,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_DEFPUSHBUTTON,208,241,50,15
|
||||
CONTROL "Cancel",IDCANCEL,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,262,241,50,15
|
||||
CONTROL "OverrideGameProtocolVersion:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,16,84,100,9
|
||||
CONTROL "",IDC_E_OVERRIDE_GPV,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,120,81,40,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "Logging level:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,186,127,46,9
|
||||
CONTROL "Enable modify Game Server Traffic",IDC_C_ENABLE_MODGT,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,180,81,128,11
|
||||
CONTROL "",IDC_CB_LOGLEVEL,"ComboBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|CBS_DROPDOWNLIST,258,127,60,87
|
||||
CONTROL "ThreadPriorityRaiseEnable",IDC_C_ENABLE_THREADPRI,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,180,96,100,11
|
||||
CONTROL "L2Walker_Fix_MoveBackwardToLocation",IDC_C_L2WMOVEFIX,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,144,146,11
|
||||
CONTROL "Ports Setup",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,10,192,320,46
|
||||
CONTROL "Listen Login Port:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,18,206,56,9
|
||||
CONTROL "Listen Game Port:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,18,219,58,9
|
||||
CONTROL "",IDC_E_FLPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,82,201,36,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "",IDC_E_FGPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,82,217,36,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "Real Login Server:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,126,203,60,9
|
||||
CONTROL "",IDC_E_REALIP,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,196,201,84,15,WS_EX_CLIENTEDGE
|
||||
CONTROL ":",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,284,201,8,9
|
||||
CONTROL "",IDC_E_REALPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,290,201,32,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "Apply :)",IDC_APPLY,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,152,241,50,15
|
||||
CONTROL "Log Game Packets",IDC_C_LOGGAMEP,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,184,142,128,11
|
||||
CONTROL "Log File Name Prefix:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,184,158,68,9
|
||||
CONTROL "",IDC_E_LOGFNPREFIX,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,258,155,60,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "OK",IDOK,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_DEFPUSHBUTTON,132,276,50,15
|
||||
CONTROL "Cancel",IDCANCEL,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,260,276,50,15
|
||||
CONTROL "OverrideGameProtocolVersion:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,16,96,100,9
|
||||
CONTROL "",IDC_E_OVERRIDE_GPV,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,120,92,40,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "Logging level:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,186,138,46,9
|
||||
CONTROL "Enable modify Game Server Traffic",IDC_C_ENABLE_MODGT,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,180,92,128,11
|
||||
CONTROL "",IDC_CB_LOGLEVEL,"ComboBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|CBS_DROPDOWNLIST,258,138,60,87
|
||||
CONTROL "ThreadPriorityRaiseEnable",IDC_C_ENABLE_THREADPRI,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,180,107,100,11
|
||||
CONTROL "L2Walker_Fix_MoveBackwardToLocation",IDC_C_L2WMOVEFIX,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,155,146,11
|
||||
CONTROL "Ports Setup",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,8,203,322,67
|
||||
CONTROL "Listen Login Port:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,18,216,56,9
|
||||
CONTROL "Listen Game Port:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,18,232,58,9
|
||||
CONTROL "",IDC_E_FLPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,82,212,30,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "",IDC_E_FGPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,82,228,30,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "Real Login Server:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,120,214,82,9
|
||||
CONTROL "",IDC_E_REALIP,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,210,212,70,15,WS_EX_CLIENTEDGE
|
||||
CONTROL ":",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,284,212,8,9
|
||||
CONTROL "",IDC_E_REALPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,290,212,32,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "Apply :)",IDC_APPLY,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,196,276,50,15
|
||||
CONTROL "Log Game Packets",IDC_C_LOGGAMEP,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,184,153,128,11
|
||||
CONTROL "Log File Name Prefix:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,184,169,68,9
|
||||
CONTROL "",IDC_E_LOGFNPREFIX,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,258,166,60,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "Lineage II Server Protocol Version:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,20,16,112,8
|
||||
CONTROL "",IDC_CB_L2VER,"ComboBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|CBS_DROPDOWNLIST,150,14,172,70
|
||||
CONTROL "Lineage II Client Version:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,20,31,82,9
|
||||
CONTROL "",IDC_CB_L2CVER,"ComboBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|CBS_DROPDOWNLIST,150,29,172,70
|
||||
CONTROL "Lineage II Versions",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,8,5,318,61
|
||||
CONTROL "Logging",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,178,116,148,70
|
||||
CONTROL "L2Walker_Drop_RequestGMList",IDC_C_L2WDROPGMLIST,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,132,146,11
|
||||
CONTROL "WarnUnknownPackets",IDC_C_WARNUNKP,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,184,171,88,11
|
||||
CONTROL "L2Walker_Fix_ChangeWaitType2",IDC_C_L2WSITFIX,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,155,146,11
|
||||
CONTROL "Force Game Server IP:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,124,219,76,9
|
||||
CONTROL "",IDC_E_FORCEGSIP,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,204,217,76,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "",IDC_E_FORCEGSPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,290,217,32,15,WS_EX_CLIENTEDGE
|
||||
CONTROL ":",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,284,217,4,9
|
||||
CONTROL "L2Walker fixes",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,8,116,162,70
|
||||
CONTROL "L2Walker_Inject_StatusUpdate",IDC_C_L2WALKER_INJECTSTATUSUPDATE,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,166,146,11
|
||||
CONTROL "Misc hacks (be careful!!!)",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,8,72,318,41
|
||||
CONTROL "Reply to L2J GameGuard query",IDC_C_GAMEGUARDREPLY,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,97,134,11
|
||||
CONTROL "Lineage II Versions",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,8,5,318,72
|
||||
CONTROL "Logging",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,178,127,148,70
|
||||
CONTROL "L2Walker_Drop_RequestGMList",IDC_C_L2WDROPGMLIST,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,144,146,11
|
||||
CONTROL "WarnUnknownPackets",IDC_C_WARNUNKP,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,184,182,88,11
|
||||
CONTROL "L2Walker_Fix_ChangeWaitType2",IDC_C_L2WSITFIX,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,166,146,11
|
||||
CONTROL "Force Game Server IP:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,120,232,84,9
|
||||
CONTROL "",IDC_E_FORCEGSIP,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,210,228,70,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "",IDC_E_FORCEGSPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,290,228,32,15,WS_EX_CLIENTEDGE
|
||||
CONTROL ":",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,284,228,4,9
|
||||
CONTROL "L2Walker fixes",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,8,127,162,70
|
||||
CONTROL "L2Walker_Inject_StatusUpdate",IDC_C_L2WALKER_INJECTSTATUSUPDATE,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,179,146,11
|
||||
CONTROL "Misc hacks (be careful!!!)",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,8,83,318,41
|
||||
CONTROL "Reply to L2J GameGuard query",IDC_C_GAMEGUARDREPLY,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,108,134,11
|
||||
CONTROL "Gracia Epilogue Server protocol 148 -> Client protocol 146 hacks (experimental!)",IDC_C_EPILOGUE_148_146,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,18,46,302,11
|
||||
CONTROL "TeonPvP server hacks",IDC_C_TEONPVP_HACKS,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,18,59,114,9
|
||||
CONTROL "",IDC_E_INGAME_GAMESERVER_PORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,290,245,32,13,WS_EX_CLIENTEDGE
|
||||
CONTROL "Also intercept this game server port:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,120,249,154,9
|
||||
CONTROL ":",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,284,247,4,9
|
||||
END
|
||||
|
||||
IDD_DEBUG DIALOGEX 0,0,266,158
|
||||
|
||||
IDD_DEBUG DIALOGEX 0,0,266,160
|
||||
CAPTION "Debug"
|
||||
FONT 8,"MS Shell Dlg",400,0,1
|
||||
STYLE WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_MODALFRAME|DS_SETFONT|DS_FIXEDSYS
|
||||
@ -91,13 +96,14 @@ BEGIN
|
||||
CONTROL "char_name",IDC_CHARNAME,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP|SS_SUNKEN,7,76,251,11
|
||||
CONTROL "Enable Console",IDC_B_CONENABLE,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,65,42,64,14
|
||||
CONTROL "Disable Console",IDC_B_CONDISABLE,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,141,42,63,14
|
||||
CONTROL "Check Interceptions",IDC_B_VALIDATEINTERCEPT,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,6,94,92,15
|
||||
CONTROL "Intercept connect",IDC_B_INTERCEPTCONNECT,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,106,94,80,15
|
||||
CONTROL "Check VP",IDC_B_CHECK_VIRTUALPROTECTEX,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,190,94,60,15
|
||||
CONTROL "Load L2Walker.dll",IDC_B_LOADWALKER,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,7,116,75,14
|
||||
CONTROL "Unload L2Walker.dll",IDC_B_UNLOADWALKER,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,90,116,76,15
|
||||
CONTROL "Dump All Relations",IDC_B_DUMP_ALL_RELATIONS,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,8,136,86,15
|
||||
CONTROL "Print address of UserAI::dwThreadID",IDC_B_PRINTADDRTID,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,102,136,136,15
|
||||
CONTROL "Check Interceptions",IDC_B_VALIDATEINTERCEPT,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,6,94,74,15
|
||||
CONTROL "Intercept connect",IDC_B_INTERCEPTCONNECT,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,136,94,62,15
|
||||
CONTROL "Check VPEx",IDC_B_CHECK_VIRTUALPROTECTEX,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,84,94,48,15
|
||||
CONTROL "Load L2Walker.dll",IDC_B_LOADWALKER,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,8,118,76,15
|
||||
CONTROL "Unload L2Walker.dll",IDC_B_UNLOADWALKER,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,90,118,76,15
|
||||
CONTROL "Dump All Relations",IDC_B_DUMP_ALL_RELATIONS,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,8,140,86,15
|
||||
CONTROL "Print address of UserAI::dwThreadID",IDC_B_PRINTADDRTID,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,102,140,136,15
|
||||
CONTROL "Restore connect",IDC_B_RESTORECONNECT,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,200,94,62,15
|
||||
END
|
||||
|
||||
|
||||
|
@ -113,11 +113,11 @@ BOOL CALLBACK RadarDllWindowThread_EnumWindowsProc( HWND hWnd, LPARAM lParam )
|
||||
// window is running in the same process as we are
|
||||
// check window class or name to check is it is main Lineage II window
|
||||
bool isL2Window = false;
|
||||
TCHAR wndTitle[256];
|
||||
wchar_t wndTitle[256];
|
||||
memset( wndTitle, 0, sizeof(wndTitle) );
|
||||
GetWindowText( hWnd, wndTitle, 255 );
|
||||
GetWindowTextW( hWnd, wndTitle, 255 );
|
||||
log_error( LOG_DEBUGDUMP, ".. got window title [%S]\n", wndTitle );
|
||||
if( _tcsicmp( wndTitle, _T("Lineage II") ) == 0 )
|
||||
if( _wcsicmp( wndTitle, L"Lineage II" ) == 0 )
|
||||
{
|
||||
isL2Window = true;
|
||||
log_error( LOG_DEBUG, "... found L2 window by title!\n" );
|
||||
@ -126,11 +126,11 @@ BOOL CALLBACK RadarDllWindowThread_EnumWindowsProc( HWND hWnd, LPARAM lParam )
|
||||
if( !isL2Window )
|
||||
{
|
||||
log_error( LOG_DEBUGDUMP, "... window title doesn't match, trying by class name...\n" );
|
||||
TCHAR buffer_for_class_name[256] = {0};
|
||||
if( GetClassName( hWnd, buffer_for_class_name, 255 ) )
|
||||
wchar_t buffer_for_class_name[256] = {0};
|
||||
if( GetClassNameW( hWnd, buffer_for_class_name, 255 ) )
|
||||
{
|
||||
log_error( LOG_DEBUGDUMP, ".... got window class name = [%S]\n", buffer_for_class_name );
|
||||
if( _tcsicmp( buffer_for_class_name, _T("l2UnrealWWindowsViewportWindow") ) == 0 )
|
||||
if( _wcsicmp( buffer_for_class_name, _T("l2UnrealWWindowsViewportWindow") ) == 0 )
|
||||
{
|
||||
isL2Window = true;
|
||||
log_error( LOG_DEBUG, ".... found L2 window by class name!\n" );
|
||||
@ -139,6 +139,33 @@ BOOL CALLBACK RadarDllWindowThread_EnumWindowsProc( HWND hWnd, LPARAM lParam )
|
||||
else
|
||||
ErrorLogger_LogLastError( "GetClassName()", GetLastError() );
|
||||
}
|
||||
// try by process name!
|
||||
if( !isL2Window )
|
||||
{
|
||||
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, dwPid );
|
||||
if( hProcess )
|
||||
{
|
||||
wchar_t szFileName[512] = {0};
|
||||
//QueryFullProcessImageName( // >=Vista only
|
||||
DWORD nameLen = GetProcessImageFileNameW( hProcess, szFileName, sizeof(szFileName)/sizeof(szFileName[0]) );
|
||||
if( nameLen > 0 )
|
||||
{
|
||||
const wchar_t *wExe = wcsrchr( szFileName, '\\' );
|
||||
if( (_wcsicmp( wExe, L"l2.bin" ) == 0) || (_wcsicmp( wExe, L"l2.exe" ) == 0 ) )
|
||||
{
|
||||
isL2Window = true;
|
||||
wchar_t wClassName[256] = {0};
|
||||
GetClassNameW( hWnd, wClassName, 255 );
|
||||
log_error( LOG_OK, "... found L2 Window by process name (what???) of class [%S]\n", wClassName );
|
||||
}
|
||||
}
|
||||
else
|
||||
ErrorLogger_LogLastError( "GetProcessImageFileName()", GetLastError() );
|
||||
CloseHandle( hProcess );
|
||||
}
|
||||
else
|
||||
ErrorLogger_LogLastError( "OpenProcess()", GetLastError() );
|
||||
}
|
||||
// checks...
|
||||
if( isL2Window ) // found
|
||||
{
|
||||
|
@ -94,7 +94,8 @@
|
||||
#define IDC_E_FORCEGSPORT 1088
|
||||
#define IDC_B_VALIDATEINTERCEPT 1089
|
||||
#define IDC_B_INTERCEPTCONNECT 1090
|
||||
#define IDC_B_CHECK_VIRTUALPROTECTEX 1091
|
||||
#define IDC_B_RESTORECONNECT 1158
|
||||
#define IDC_B_CHECK_VIRTUALPROTECTEX 1092
|
||||
#define IDC_C_L2WALKER_INJECTSTATUSUPDATE 1122
|
||||
#define IDC_B_LOADWALKER 1123
|
||||
#define IDC_B_UNLOADWALKER 1124
|
||||
@ -102,6 +103,8 @@
|
||||
#define IDC_C_EPILOGUE_148_146 1126
|
||||
#define IDC_B_DUMP_ALL_RELATIONS 1127
|
||||
#define IDC_B_PRINTADDRTID 1128
|
||||
#define IDC_C_TEONPVP_HACKS 1159
|
||||
#define IDC_E_INGAME_GAMESERVER_PORT 1160
|
||||
|
||||
// radar sound alerts setup dlg
|
||||
#define IDC_C_SOUNDENEMYENTER 1089
|
||||
|
@ -8,6 +8,7 @@ bool Hook_ValidateAlign();
|
||||
|
||||
// my method
|
||||
void Hook_InterceptConnect_my();
|
||||
void Hook_RestoreConnect_my();
|
||||
bool Hook_ValidateInterception_my();
|
||||
bool Hook_IsWinsockConnectOrig();
|
||||
bool Hook_CheckVirtualProtect();
|
||||
|
@ -29,6 +29,9 @@ VirtualProtectEx (kernel32) 8B FF 55 8B EC 5D // jump follows, r
|
||||
// rejump/relocate to VirtualProtectEx inside kernelbase.dll
|
||||
===================================== */
|
||||
|
||||
#define INSTR_PUSH 0x68
|
||||
#define INSTR_RET 0xC3
|
||||
|
||||
unsigned char old_func_prologue[6] = {0,0,0, 0,0,0}; // îáëàñòü äëÿ õðàíåíèÿ 6-òè çàòèðàåìûõ áàéò íà÷àëà ôóíêöèè
|
||||
jmp_push_ret jump_code; // ìàøèííûå èíñòðóêöèè push addr; ret
|
||||
unsigned int connect_orig; // áóäóùèé àäðåñ îðèãèíàëüíîé ôóíêöèè
|
||||
@ -48,8 +51,10 @@ unsigned int g_hook_flag_allow_write = PAGE_EXECUTE_READWRITE; // PAGE_EXECUT
|
||||
bool g_hook_restore_read_only = false;
|
||||
unsigned int Proxied_VirtualProtectEx = 0;
|
||||
|
||||
|
||||
BOOL __stdcall Proxy_VirtualProtectEx( HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect );
|
||||
|
||||
|
||||
void Hook_InterceptConnect_my()
|
||||
{
|
||||
//ñíà÷àëà ïîëó÷èì àáñîëþòíûé àäðåñ ôóíêöèè äëÿ ïåðåõâàòà
|
||||
@ -63,7 +68,7 @@ void Hook_InterceptConnect_my()
|
||||
connect_orig = (DWORD)GetProcAddress( hws2_32, "connect" );
|
||||
if( connect_orig == 0 )
|
||||
{
|
||||
log_error( LOG_ERROR, "Hook_InterceptConnect_my(): cannot get adress of original connect()!\n" );
|
||||
log_error( LOG_ERROR, "Hook_InterceptConnect_my(): cannot get adress of ws2_32.dll!connect()!\n" );
|
||||
ErrorLogger_FlushLogFile();
|
||||
return;
|
||||
}
|
||||
@ -78,15 +83,20 @@ void Hook_InterceptConnect_my()
|
||||
|
||||
// struct member alignment must be == 1 !!!!!
|
||||
// Çàäàäèì ìàøèííûé êîä èíñòðóêöèè ïåðåõîäà, êîòîðûé çàòåì âïèøåì â íà÷àëî ïîëó÷åííîãî àäðåñà:
|
||||
jump_code.instr_push = 0x68;
|
||||
jump_code.push_arg = (unsigned int)connect_hook_my;
|
||||
jump_code.instr_ret = 0xC3;
|
||||
jump_code.instr_push = INSTR_PUSH; // PUSH
|
||||
jump_code.push_arg = (unsigned int)connect_hook_my; // connect_hook_my
|
||||
jump_code.instr_ret = INSTR_RET; // RET
|
||||
|
||||
// Ïðî÷èòàåì è ñîõðàíèì ïåðâûå îðèãèíàëüíûå 6 áàéò ñòàíäàðòíîé API ôóíêöèè
|
||||
po = (unsigned char *)&old_func_prologue;
|
||||
pj = (unsigned char *)connect_orig;
|
||||
po[0] = pj[0]; po[1] = pj[1]; po[2] = pj[2];
|
||||
po[3] = pj[3]; po[4] = pj[4]; po[5] = pj[5];
|
||||
if( pj[0] != INSTR_PUSH )
|
||||
{
|
||||
po[0] = pj[0]; po[1] = pj[1]; po[2] = pj[2];
|
||||
po[3] = pj[3]; po[4] = pj[4]; po[5] = pj[5];
|
||||
}
|
||||
else
|
||||
log_error( LOG_WARNING, "Hook_InterceptConnect_my(): current connect() prolog already contains PUSH/RET code, do not overwriting old_prolog!\n" );
|
||||
|
||||
// remove read-only access to memory; remember prev.access rights
|
||||
//ret = VirtualProtect( (void *)connect_orig, 6, PAGE_EXECUTE_WRITECOPY, &old_protect );
|
||||
@ -127,12 +137,85 @@ void Hook_InterceptConnect_my()
|
||||
}
|
||||
}
|
||||
#ifdef _DEBUG
|
||||
log_error( LOG_DEBUG, "Hook_InterceptConnect_my(): work done?...\n" );
|
||||
log_error( LOG_DEBUG, "Hook_InterceptConnect_my(): END: work done?...\n" );
|
||||
#endif
|
||||
ErrorLogger_FlushLogFile();
|
||||
}
|
||||
|
||||
|
||||
void Hook_RestoreConnect_my()
|
||||
{
|
||||
HINSTANCE hws2_32 = GetModuleHandle( TEXT("ws2_32.dll") );
|
||||
if( !hws2_32 )
|
||||
{
|
||||
log_error( LOG_ERROR, "Hook_RestoreConnect_my(): cannot get module handle of ws2_32.dll!\n" );
|
||||
ErrorLogger_FlushLogFile();
|
||||
return;
|
||||
}
|
||||
connect_orig = (DWORD)GetProcAddress( hws2_32, "connect" );
|
||||
if( connect_orig == 0 )
|
||||
{
|
||||
log_error( LOG_ERROR, "Hook_RestoreConnect_my(): cannot get adress of ws2_32.dll!connect()!\n" );
|
||||
ErrorLogger_FlushLogFile();
|
||||
return;
|
||||
}
|
||||
|
||||
if( Proxied_VirtualProtectEx )
|
||||
log_error( LOG_WARNING, "Hook_RestoreConnect_my(): START: Using proxied VirtualProtectEx!\n" );
|
||||
ErrorLogger_FlushLogFile();
|
||||
|
||||
BOOL ret;
|
||||
DWORD old_protect = 0, old_protect_2 = 0;
|
||||
unsigned char *pc = NULL, *po = NULL;
|
||||
|
||||
// check old prolog
|
||||
if( old_func_prologue[0] == 0x8B )
|
||||
{
|
||||
// make memory page readwrite
|
||||
DWORD flProtect = g_hook_flag_allow_write;
|
||||
ret = 0;
|
||||
if( Proxied_VirtualProtectEx )
|
||||
ret = Proxy_VirtualProtectEx( (HANDLE)-1, (void *)connect_orig, 6, flProtect, &old_protect );
|
||||
else
|
||||
ret = VirtualProtectEx( (HANDLE)-1, (void *)connect_orig, 6, flProtect, &old_protect );
|
||||
if( (ret != TRUE) )
|
||||
{
|
||||
DWORD le = GetLastError();
|
||||
if( le == ERROR_ACCESS_DENIED )
|
||||
log_error( LOG_ERROR, "Hook_RestoreConnect_my(): VirtialProtectEx() failed (allow write): (%d) ERROR_ACCESS_DENIED\n", le );
|
||||
else
|
||||
ErrorLogger_LogLastError( "Hook_RestoreConnect_my(): VirtialProtectEx() failed (allow write)", le );
|
||||
ErrorLogger_FlushLogFile();
|
||||
}
|
||||
po = (unsigned char *)&old_func_prologue;
|
||||
pc = (unsigned char *)connect_orig;
|
||||
pc[0] = po[0]; pc[1] = po[1]; pc[2] = po[2];
|
||||
pc[3] = po[3]; pc[4] = po[4]; pc[5] = po[5];
|
||||
log_error( LOG_OK, "Hook_RestoreConnect_my(): restored original connect...\n" );
|
||||
ErrorLogger_FlushLogFile();
|
||||
}
|
||||
else
|
||||
log_error( LOG_WARNING, "Hook_RestoreConnect_my(): old connect() prolog is invalid :(\n" );
|
||||
|
||||
|
||||
// restore previous access to memory
|
||||
if( g_hook_restore_read_only )
|
||||
{
|
||||
if( Proxied_VirtualProtectEx )
|
||||
ret = Proxy_VirtualProtectEx( (HANDLE)-1, (void *)connect_orig, 6, old_protect, &old_protect_2 );
|
||||
else
|
||||
ret = VirtualProtectEx( (HANDLE)-1, (void *)connect_orig, 6, old_protect, &old_protect_2 );
|
||||
if( (ret != TRUE) )
|
||||
{
|
||||
DWORD le = GetLastError();
|
||||
ErrorLogger_LogLastError( "Hook_RestoreConnect_my(): VirtualProtectEx() failed (restore prev)", le );
|
||||
}
|
||||
}
|
||||
|
||||
ErrorLogger_FlushLogFile();
|
||||
}
|
||||
|
||||
|
||||
bool Hook_check_func_prolog( LPCWSTR dllName, LPCSTR funcName, const unsigned char *orig_bytes )
|
||||
{
|
||||
HINSTANCE hDll = GetModuleHandleW( dllName );
|
||||
@ -218,7 +301,7 @@ bool Hook_ValidateInterception_my()
|
||||
logLevel = LOG_WARNING;
|
||||
log_error( LOG_WARNING, "Not intercepted! Dump will follow...\n" );
|
||||
}
|
||||
else log_error( LOG_OK, "Interception OK!\n" );
|
||||
else log_error( LOG_OK, "ws2_32.dll!connect() Interception OK!\n" );
|
||||
|
||||
log_error( logLevel,
|
||||
"dump of machine codes:\n"
|
||||
@ -251,7 +334,7 @@ int __stdcall connect_hook_my( unsigned int sock, void *sockaddr, int addrlen )
|
||||
DWORD le = 0;
|
||||
|
||||
if( Proxied_VirtualProtectEx )
|
||||
log_error( LOG_WARNING, "connect_hook_my(): Using proxied VirtualProtectEx!\n" );
|
||||
log_error( LOG_WARNING, "connect_hook_my(): START: Using proxied VirtualProtectEx!\n" );
|
||||
|
||||
#ifdef _DEBUG
|
||||
log_error( LOG_DEBUGDUMP, "connect_hook_my(): before restoring old code\n" );
|
||||
@ -327,14 +410,14 @@ int __stdcall connect_hook_my( unsigned int sock, void *sockaddr, int addrlen )
|
||||
// log
|
||||
#ifdef _DEBUG
|
||||
if( paddr->sin_family == AF_INET )
|
||||
log_error_np( LOG_DEBUG, "original connect() returned %d\n", ret );
|
||||
log_error_np( LOG_DEBUG, "... original connect() returned %d\n", ret );
|
||||
ErrorLogger_FlushLogFile();
|
||||
#endif
|
||||
|
||||
//Ñíîâà çàìåíÿåì 6 áàéò ôóíêöèè íà êîìàíäó ïåðåõîäà íà íàøó ôóíêöèþ
|
||||
pc[0] = pj[0]; pc[1] = pj[1]; pc[2] = pj[2];
|
||||
pc[3] = pj[3]; pc[4] = pj[4]; pc[5] = pj[5];
|
||||
log_error( LOG_DEBUGDUMP, "connect_hook_my(): after setting jump again\n" );
|
||||
log_error( LOG_DEBUGDUMP, "connect_hook_my(): ENDING: after setting jump again\n" );
|
||||
|
||||
// restore prev. protect
|
||||
if( g_hook_restore_read_only )
|
||||
@ -370,7 +453,8 @@ int __stdcall connect_nohook_my( unsigned int sock, void *sockaddr, int addrlen
|
||||
BOOL vp_ret = FALSE;
|
||||
DWORD le = 0; // last error
|
||||
|
||||
if( Proxied_VirtualProtectEx ) log_error( LOG_WARNING, "connect_nohook_my(): Using proxied VirtualProtectEx!\n" );
|
||||
if( Proxied_VirtualProtectEx )
|
||||
log_error( LOG_WARNING, "connect_nohook_my(): Using proxied VirtualProtectEx!\n" );
|
||||
|
||||
po = (unsigned char *)&old_func_prologue;
|
||||
pj = (unsigned char *)&jump_code;
|
||||
@ -507,6 +591,7 @@ bool Hook_CheckVirtualProtect()
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
__declspec(naked) BOOL __stdcall
|
||||
Proxy_VirtualProtectEx( HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect )
|
||||
{
|
||||
|
@ -1,33 +1,57 @@
|
||||
#define IDC_STATIC -1
|
||||
#define IDC_B_DUMP_ALL_RELATIONS 1001
|
||||
#define IDC_B_PRINTADDRTID 1002
|
||||
|
||||
IDD_DEBUG DIALOGEX 0,0,266,158
|
||||
CAPTION "Debug"
|
||||
#include "resource.h"
|
||||
#include "targetver.h"
|
||||
#include <windows.h>
|
||||
|
||||
IDD_CONFIG DIALOGEX 0,0,332,297
|
||||
CAPTION "Network/Protocol Setup"
|
||||
FONT 8,"MS Shell Dlg",400,0,1
|
||||
STYLE WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_MODALFRAME|DS_SETFONT|DS_FIXEDSYS
|
||||
BEGIN
|
||||
CONTROL "Login listener status:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,7,7,68,8
|
||||
CONTROL "Game listener status:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,7,25,69,8
|
||||
CONTROL "",IDC_ELLSTATUS,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_READONLY|ES_AUTOHSCROLL,90,7,40,14,WS_EX_CLIENTEDGE
|
||||
CONTROL "",IDC_EGLSTATUS,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_READONLY|ES_AUTOHSCROLL,89,23,40,14,WS_EX_CLIENTEDGE
|
||||
CONTROL "Start LL",IDC_STARTLL,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,141,7,50,14
|
||||
CONTROL "Start GL",IDC_STARTGL,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,142,23,50,14
|
||||
CONTROL "Stop LL",IDC_STOPLL,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,197,7,50,14
|
||||
CONTROL "Stop GL",IDC_STOPGL,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,198,23,50,14
|
||||
CONTROL "Flush Log File",IDC_FLUSH_LOG,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,7,42,50,14
|
||||
CONTROL "hp",IDC_HP,"Static",WS_VISIBLE|WS_GROUP|SS_SUNKEN|SS_LEFTNOWORDWRAP,7,61,72,11
|
||||
CONTROL "mp",IDC_MP,"Static",WS_VISIBLE|WS_GROUP|SS_SUNKEN|SS_LEFTNOWORDWRAP,82,61,72,11
|
||||
CONTROL "cp",IDC_CP,"Static",WS_VISIBLE|WS_GROUP|SS_SUNKEN|SS_LEFTNOWORDWRAP,156,61,72,11
|
||||
CONTROL "char_name",IDC_CHARNAME,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP|SS_SUNKEN,7,76,251,11
|
||||
CONTROL "Enable Console",IDC_B_CONENABLE,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,65,42,64,14
|
||||
CONTROL "Disable Console",IDC_B_CONDISABLE,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,141,42,63,14
|
||||
CONTROL "Validate Interception",IDC_B_VALIDATEINTERCEPT,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,6,94,92,15
|
||||
CONTROL "Intercept connect",IDC_B_INTERCEPTCONNECT,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,106,94,80,15
|
||||
CONTROL "Check VP",IDC_B_CHECK_VIRTUALPROTECTEX,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,190,94,60,15
|
||||
CONTROL "Load L2Walker.dll",IDC_B_LOADWALKER,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,7,116,75,14
|
||||
CONTROL "Unload L2Walker.dll",IDC_B_UNLOADWALKER,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,90,116,76,15
|
||||
CONTROL "Dump All Relations",IDC_B_DUMP_ALL_RELATIONS,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,8,136,86,15
|
||||
CONTROL "Print address of UserAI::dwThreadID",IDC_B_PRINTADDRTID,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,102,136,136,15
|
||||
CONTROL "OK",IDOK,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_DEFPUSHBUTTON,132,276,50,15
|
||||
CONTROL "Cancel",IDCANCEL,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,260,276,50,15
|
||||
CONTROL "OverrideGameProtocolVersion:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,16,96,100,9
|
||||
CONTROL "",IDC_E_OVERRIDE_GPV,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,120,92,40,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "Logging level:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,186,138,46,9
|
||||
CONTROL "Enable modify Game Server Traffic",IDC_C_ENABLE_MODGT,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,180,92,128,11
|
||||
CONTROL "",IDC_CB_LOGLEVEL,"ComboBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|CBS_DROPDOWNLIST,258,138,60,87
|
||||
CONTROL "ThreadPriorityRaiseEnable",IDC_C_ENABLE_THREADPRI,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,180,107,100,11
|
||||
CONTROL "L2Walker_Fix_MoveBackwardToLocation",IDC_C_L2WMOVEFIX,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,155,146,11
|
||||
CONTROL "Ports Setup",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,8,203,322,67
|
||||
CONTROL "Listen Login Port:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,18,216,56,9
|
||||
CONTROL "Listen Game Port:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,18,232,58,9
|
||||
CONTROL "",IDC_E_FLPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,82,212,30,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "",IDC_E_FGPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,82,228,30,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "Real Login Server:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,120,214,82,9
|
||||
CONTROL "",IDC_E_REALIP,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,210,212,70,15,WS_EX_CLIENTEDGE
|
||||
CONTROL ":",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,284,212,8,9
|
||||
CONTROL "",IDC_E_REALPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,290,212,32,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "Apply :)",IDC_APPLY,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,196,276,50,15
|
||||
CONTROL "Log Game Packets",IDC_C_LOGGAMEP,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,184,153,128,11
|
||||
CONTROL "Log File Name Prefix:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,184,169,68,9
|
||||
CONTROL "",IDC_E_LOGFNPREFIX,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,258,166,60,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "Lineage II Server Protocol Version:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,20,16,112,8
|
||||
CONTROL "",IDC_CB_L2VER,"ComboBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|CBS_DROPDOWNLIST,150,14,172,70
|
||||
CONTROL "Lineage II Client Version:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,20,31,82,9
|
||||
CONTROL "",IDC_CB_L2CVER,"ComboBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|CBS_DROPDOWNLIST,150,29,172,70
|
||||
CONTROL "Lineage II Versions",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,8,5,318,72
|
||||
CONTROL "Logging",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,178,127,148,70
|
||||
CONTROL "L2Walker_Drop_RequestGMList",IDC_C_L2WDROPGMLIST,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,144,146,11
|
||||
CONTROL "WarnUnknownPackets",IDC_C_WARNUNKP,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,184,182,88,11
|
||||
CONTROL "L2Walker_Fix_ChangeWaitType2",IDC_C_L2WSITFIX,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,166,146,11
|
||||
CONTROL "Force Game Server IP:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,120,232,84,9
|
||||
CONTROL "",IDC_E_FORCEGSIP,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,210,228,70,15,WS_EX_CLIENTEDGE
|
||||
CONTROL "",IDC_E_FORCEGSPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,290,228,32,15,WS_EX_CLIENTEDGE
|
||||
CONTROL ":",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,284,228,4,9
|
||||
CONTROL "L2Walker fixes",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,8,127,162,70
|
||||
CONTROL "L2Walker_Inject_StatusUpdate",IDC_C_L2WALKER_INJECTSTATUSUPDATE,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,179,146,11
|
||||
CONTROL "Misc hacks (be careful!!!)",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,8,83,318,41
|
||||
CONTROL "Reply to L2J GameGuard query",IDC_C_GAMEGUARDREPLY,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,108,134,11
|
||||
CONTROL "Gracia Epilogue Server protocol 148 -> Client protocol 146 hacks (experimental!)",IDC_C_EPILOGUE_148_146,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,18,46,302,11
|
||||
CONTROL "TeonPvP server hacks",IDC_C_TEONPVP_HACKS,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,18,59,114,9
|
||||
CONTROL "",IDC_E_INGAME_GAMESERVER_PORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,290,245,32,13,WS_EX_CLIENTEDGE
|
||||
CONTROL "Also intercept this game server port:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,120,249,154,9
|
||||
CONTROL ":",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,284,247,4,9
|
||||
END
|
||||
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include <shellapi.h>
|
||||
#include <shlobj.h>
|
||||
#include <commdlg.h>
|
||||
#include <Psapi.h>
|
||||
// DirectX
|
||||
#include <ddraw.h>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user