extend config optons DialogBox

teon pvp server hacks
This commit is contained in:
alexey.min 2012-02-05 15:09:42 +00:00
parent df6a9cc098
commit a424966835
15 changed files with 330 additions and 117 deletions

View File

@ -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.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.3 - Gracia Final") );
SendMessage( h, CB_ADDSTRING, 0, (LPARAM)TEXT("Chaotic Throne 2.4 - Gracia Epilogue") ); 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 ); SendMessage( h, CB_SETCURSEL, (WPARAM)g_cfg.L2_version, 0 );
// L2 Client Version // L2 Client Version
h = GetDlgItem( hDlg, IDC_CB_L2CVER ); 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.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.3 - Gracia Final") );
SendMessage( h, CB_ADDSTRING, 0, (LPARAM)TEXT("Chaotic Throne 2.4 - Gracia Epilogue") ); 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 ); SendMessage( h, CB_SETCURSEL, (WPARAM)g_cfg.L2_client_version, 0 );
// full mode enable // full mode enable
@ -80,6 +84,8 @@ void ConfigDlg_OnInitDialog( HWND hDlg )
CheckDlgButton( hDlg, IDC_C_GAMEGUARDREPLY, g_cfg.ReplyL2JGameGuardQuery ); CheckDlgButton( hDlg, IDC_C_GAMEGUARDREPLY, g_cfg.ReplyL2JGameGuardQuery );
// Gracia Epilogue protocol 148 hacks // Gracia Epilogue protocol 148 hacks
CheckDlgButton( hDlg, IDC_C_EPILOGUE_148_146, g_cfg.GraciaEpilogueProtocol_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 // L2Walker_DropRequestGMList
CheckDlgButton( hDlg, IDC_C_L2WDROPGMLIST, g_cfg.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 // forced game server select setting
SetDlgItemTextA( hDlg, IDC_E_FORCEGSIP, g_cfg.ForceGameServerIP ); SetDlgItemTextA( hDlg, IDC_E_FORCEGSIP, g_cfg.ForceGameServerIP );
SetDlgItemInt( hDlg, IDC_E_FORCEGSPORT, g_cfg.ForceGameServerPort, TRUE ); SetDlgItemInt( hDlg, IDC_E_FORCEGSPORT, g_cfg.ForceGameServerPort, TRUE );
SetDlgItemInt( hDlg, IDC_E_INGAME_GAMESERVER_PORT, g_cfg.IngameGameServerPort, TRUE );
ConfigDlg_UpateEnabledControls( hDlg ); ConfigDlg_UpateEnabledControls( hDlg );
} }
@ -141,6 +148,8 @@ void ConfigDlg_OnOK( HWND hDlg, BOOL bEndDialog )
g_cfg.ReplyL2JGameGuardQuery = IsDlgButtonChecked( hDlg, IDC_C_GAMEGUARDREPLY ); g_cfg.ReplyL2JGameGuardQuery = IsDlgButtonChecked( hDlg, IDC_C_GAMEGUARDREPLY );
// Gracia Epilogue protocol 148 hacks // Gracia Epilogue protocol 148 hacks
g_cfg.GraciaEpilogueProtocol_148_hacks = IsDlgButtonChecked( hDlg, IDC_C_EPILOGUE_148_146 ); 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 // L2Walker_DropRequestGMList
g_cfg.L2Walker_DropRequestGMList = IsDlgButtonChecked( hDlg, IDC_C_L2WDROPGMLIST ); g_cfg.L2Walker_DropRequestGMList = IsDlgButtonChecked( hDlg, IDC_C_L2WDROPGMLIST );
@ -177,10 +186,12 @@ void ConfigDlg_OnOK( HWND hDlg, BOOL bEndDialog )
// forced GS settings // forced GS settings
GetDlgItemTextA( hDlg, IDC_E_FORCEGSIP, g_cfg.ForceGameServerIP, sizeof(g_cfg.ForceGameServerIP) ); GetDlgItemTextA( hDlg, IDC_E_FORCEGSIP, g_cfg.ForceGameServerIP, sizeof(g_cfg.ForceGameServerIP) );
g_cfg.ForceGameServerPort = GetDlgItemInt( hDlg, IDC_E_FORCEGSPORT, NULL, TRUE ); 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(); g_cfg.SaveConfig();
if( bEndDialog == TRUE ) EndDialog( hDlg, IDOK ); if( bEndDialog == TRUE )
EndDialog( hDlg, IDOK );
} }
void ConfigDlg_OnApply( HWND hDlg ) 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_REALPORT ), FALSE );
//EnableWindow( GetDlgItem( hDlg, IDC_E_PLAYGSNO ), 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 // also temporarily disable some controls
EnableWindow( GetDlgItem( hDlg, IDC_C_ENABLE_MODGT ), FALSE ); //EnableWindow( GetDlgItem( hDlg, IDC_C_ENABLE_MODGT ), FALSE );
} }

View File

@ -36,6 +36,7 @@ void CConfig::_initNull()
OverrideGameProtocolVersion = 0; OverrideGameProtocolVersion = 0;
ReplyL2JGameGuardQuery = 0; ReplyL2JGameGuardQuery = 0;
GraciaEpilogueProtocol_148_hacks = 0; GraciaEpilogueProtocol_148_hacks = 0;
TeonPvP_hacks = 0;
// L2Walker fixes // L2Walker fixes
L2Walker_DropRequestGMList = 0; L2Walker_DropRequestGMList = 0;
L2Walker_FixMoveBackwardToLocation = 1; L2Walker_FixMoveBackwardToLocation = 1;
@ -172,6 +173,10 @@ bool CConfig::ReadConfig( const char *szConfigFileName )
{ {
sscanf( token, "%d", &(this->GraciaEpilogueProtocol_148_hacks) ); sscanf( token, "%d", &(this->GraciaEpilogueProtocol_148_hacks) );
} }
if( strstr( line, "TeonPvP_hacks" ) == line )
{
sscanf( token, "%d", &(this->TeonPvP_hacks) );
}
if( strstr( line, "ThreadProirityRaiseEnable" ) == line ) if( strstr( line, "ThreadProirityRaiseEnable" ) == line )
{ {
sscanf( token, "%d", &(this->ThreadProirityRaiseEnable) ); sscanf( token, "%d", &(this->ThreadProirityRaiseEnable) );
@ -221,13 +226,15 @@ bool CConfig::SaveConfig()
fprintf( f, "" fprintf( f, ""
"# First - configure Lineage2 game protocol version and L2 Client version.\n" "# First - configure Lineage2 game protocol version and L2 Client version.\n"
"# Supported versions are:\n" "# Supported versions are:\n"
"# * Chaotic Throne 1 - The Kamael = 0\n" "# * Chaotic Throne 1 - The Kamael = 0\n"
"# * Chaotic Throne 1.5 - Hellbound = 1\n" "# * Chaotic Throne 1.5 - Hellbound = 1\n"
"# * Chaotic Throne 2 - Gracia (Part 1) = 2\n" "# * Chaotic Throne 2 - Gracia (Part 1) = 2\n"
"# * Chaotic Throne 2.2 - Gracia Part 2 = 3\n" "# * Chaotic Throne 2.2 - Gracia Part 2 = 3\n"
"# * Chaotic Throne 2.3 - Gracia Final = 4\n" "# * Chaotic Throne 2.3 - Gracia Final = 4\n"
"# * Chaotic Throne 2.4 - Gracia Epilogue = 5\n" "# * Chaotic Throne 2.4 - Gracia Epilogue = 5\n"
"# default is 4 (CT2.3 Gracia Final)\n" "# * 2nd Throne - Freya = 6\n"
"# * 2nd Throne - High Five = 7\n"
"# default is 6 (CT2.5 Freya)\n"
"Lineage2Version = %d\n" "Lineage2Version = %d\n"
"Lineage2ClientVersion = %d\n" "Lineage2ClientVersion = %d\n"
"\n\n", "\n\n",
@ -384,6 +391,12 @@ bool CConfig::SaveConfig()
"\n", "\n",
GraciaEpilogueProtocol_148_hacks ); GraciaEpilogueProtocol_148_hacks );
fprintf( f, ""
"# Enables server specific protocol handlers for TeonPvP server.\n"
"TeonPvP_hacks = %d\n"
"\n",
TeonPvP_hacks );
fprintf( f, "" fprintf( f, ""
"# Fixes L2Walker wrong or old packets\n" "# Fixes L2Walker wrong or old packets\n"
"L2Walker_DropRequestGMList = %d\n" "L2Walker_DropRequestGMList = %d\n"
@ -426,13 +439,9 @@ bool CConfig::SaveConfig()
void CConfig::SetDefault() void CConfig::SetDefault()
{ {
// declared in L2PcodeObfuscator.h (include L2Packets.h) // declared in L2_versions.h (include L2Packets.h)
//#define L2_VERSION_T1 0 L2_version = 7;
//#define L2_VERSION_T15 1 L2_client_version = 7;
//#define L2_VERSION_T2 2
//#define L2_VERSION_T22 3
L2_version = 4;
L2_client_version = 4;
// Listen port setup // Listen port setup
strcpy( FakeListenLoginIP, "127.0.0.1" ); strcpy( FakeListenLoginIP, "127.0.0.1" );
@ -462,6 +471,7 @@ void CConfig::SetDefault()
OverrideGameProtocolVersion = 0; OverrideGameProtocolVersion = 0;
ReplyL2JGameGuardQuery = 0; ReplyL2JGameGuardQuery = 0;
GraciaEpilogueProtocol_148_hacks = 0; GraciaEpilogueProtocol_148_hacks = 0;
TeonPvP_hacks = 0;
// L2Walker fixes // L2Walker fixes
L2Walker_DropRequestGMList = 0; L2Walker_DropRequestGMList = 0;

View File

@ -51,6 +51,7 @@ public:
int OverrideGameProtocolVersion; int OverrideGameProtocolVersion;
int ReplyL2JGameGuardQuery; int ReplyL2JGameGuardQuery;
int GraciaEpilogueProtocol_148_hacks; int GraciaEpilogueProtocol_148_hacks;
int TeonPvP_hacks;
// L2Walker fixes // L2Walker fixes
int L2Walker_DropRequestGMList; int L2Walker_DropRequestGMList;

View File

@ -37,6 +37,7 @@ void DebugDlg_OnTimer( HWND hDlg, UINT_PTR nIDEvent );
void DebugDlg_updateInfo( HWND hDlg ); void DebugDlg_updateInfo( HWND hDlg );
void DebugDlg_OnBnClickedValidateInterception( HWND hDlg ); void DebugDlg_OnBnClickedValidateInterception( HWND hDlg );
void DebugDlg_OnBnClickedInterceptConnect( HWND hDlg ); void DebugDlg_OnBnClickedInterceptConnect( HWND hDlg );
void DebugDlg_OnBnClickedRestoreConnect( HWND hDlg );
void DebugDlg_OnBnClickedCheckVP( HWND hDlg ); void DebugDlg_OnBnClickedCheckVP( HWND hDlg );
void DebugDlg_OnBnClickedDumpAllRelations( HWND hDlg ); void DebugDlg_OnBnClickedDumpAllRelations( HWND hDlg );
void DebugDlg_OnBnClickedPrintAddrTid( 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_CONDISABLE: DebugDlg_OnBnClickedDisableConsole( hDlg ); break;
case IDC_B_VALIDATEINTERCEPT: DebugDlg_OnBnClickedValidateInterception( hDlg ); break; case IDC_B_VALIDATEINTERCEPT: DebugDlg_OnBnClickedValidateInterception( hDlg ); break;
case IDC_B_INTERCEPTCONNECT: DebugDlg_OnBnClickedInterceptConnect( 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_CHECK_VIRTUALPROTECTEX: DebugDlg_OnBnClickedCheckVP( hDlg ); break;
case IDC_B_LOADWALKER: DebugDlg_OnBnClickedLoadWalker( hDlg ); break; case IDC_B_LOADWALKER: DebugDlg_OnBnClickedLoadWalker( hDlg ); break;
case IDC_B_UNLOADWALKER: DebugDlg_OnBnClickedUnloadWalker( 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 ) void DebugDlg_OnBnClickedCheckVP( HWND hDlg )
{ {
hDlg = NULL; hDlg = NULL;

View File

@ -233,7 +233,7 @@ bool GameClient::PP_full_fromClient( unsigned char *bytes, unsigned int len,
p->read_protoVer( &(this->gameProtoVer) ); p->read_protoVer( &(this->gameProtoVer) );
delete p; delete p;
log_error( LOG_PACKETNAME, "Client: 0e ProtocolVersion %u\n", this->gameProtoVer ); 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) this->thisWasJustServerPing = true; // received client ping (full)
log_error( LOG_PACKETNAME, "Received client ping server... no process\n" ); log_error( LOG_PACKETNAME, "Received client ping server... no process\n" );

View File

@ -145,6 +145,7 @@ bool GameClient::PP_full_fromServer( unsigned char *bytes, unsigned int len,
lpco->init_tables( this->opcodeObfuscator ); lpco->init_tables( this->opcodeObfuscator );
this->clsObfuscator = (void *)lpco; this->clsObfuscator = (void *)lpco;
} }
else log_error( LOG_PACKETNAME, "Server: 2e KeyPacket: not using obfuscation key! OK\n" );
} break; // KeyPacket } break; // KeyPacket
case 0x09: // CharacterSelectionInfo // Hellbound case 0x09: // CharacterSelectionInfo // Hellbound
{ {

View File

@ -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", log_error( LOG_WARNING, "GameClient::ProcessClient_onlySniff(): Cannot open log file [%s] for writing!\n",
filename ); filename );
// open raw log data for not decrypted packets, if problems with decryption // 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 // set initial game client state
@ -235,6 +235,11 @@ closeSocks: // all cleanup
fclose( this->logfile ); fclose( this->logfile );
this->logfile = NULL; this->logfile = NULL;
} }
if( this->logfileRaw )
{
fclose( this->logfileRaw );
this->logfileRaw = NULL;
}
// stop AI thread // stop AI thread
ai.notifyEvent( UAI_EVENT_STOP ); ai.notifyEvent( UAI_EVENT_STOP );
this->resetConnectedState(); this->resetConnectedState();

View File

@ -77,20 +77,44 @@ void GameClient::PP_sniff_fromServer( unsigned char *bytes, unsigned int len )
//case 0x00: // Interlude: KeyPacket, FirstKey //case 0x00: // Interlude: KeyPacket, FirstKey
case 0x2e: // Hellbound: KeyPacket, FirstKey case 0x2e: // Hellbound: KeyPacket, FirstKey
{ {
L2Game_KeyPacket *p = new L2Game_KeyPacket( bytes, len ); if( g_cfg.TeonPvP_hacks )
p->read_key( this->key_client_cs ); {
p->read_GameServerID(); L2GamePacket *p = new L2GamePacket( bytes, len );
this->opcodeObfuscator = p->read_OpcodeObfuscator(); unsigned char opcode = p->getPacketType();
L2Game_KeyPacket::createInitialHellboundKey( this->key_client_cs, unsigned char protoOk = p->readC();
this->key_client_cs ); p->readBytes( this->key_client_cs, 16 ); // 16 bytes instead of 8?
delete p; 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, memcpy( this->key_client_sc, this->key_client_cs,
sizeof(this->key_client_cs) ); sizeof(this->key_client_cs) );
this->xor_enabled = true; this->xor_enabled = true;
log_error( LOG_PACKETNAME, "Server: 2e KeyPacket\n" ); log_error( LOG_PACKETNAME, "Server: 2e KeyPacket\n" );
log_error( LOG_DEBUGDUMP, "Server: 2e KeyPacket: key: " ); log_error( LOG_PACKETNAME, "Server: 2e KeyPacket: key: " );
for( i=0; i<16; i++ ) log_error_np( LOG_DEBUGDUMP, "%02X ", this->key_client_cs[i] ); for( i=0; i<16; i++ ) log_error_np( LOG_PACKETNAME, "%02X ", this->key_client_cs[i] );
log_error_np( LOG_DEBUGDUMP, "\n" ); log_error_np( LOG_PACKETNAME, "\n" );
// log obfuscator, if it is != 0x00000000 // log obfuscator, if it is != 0x00000000
LOG_LEVEL log_level = LOG_DEBUGDUMP; LOG_LEVEL log_level = LOG_DEBUGDUMP;
if( this->opcodeObfuscator != 0x00000000 ) if( this->opcodeObfuscator != 0x00000000 )
@ -111,6 +135,7 @@ void GameClient::PP_sniff_fromServer( unsigned char *bytes, unsigned int len )
lpco->init_tables( this->opcodeObfuscator ); lpco->init_tables( this->opcodeObfuscator );
this->clsObfuscator = (void *)lpco; this->clsObfuscator = (void *)lpco;
} }
else log_error( LOG_PACKETNAME, "Server: 2e KeyPacket: not using obfuscator\n" );
} break; // KeyPacket } break; // KeyPacket
case 0x09: // CharacterSelectionInfo // Hellbound case 0x09: // CharacterSelectionInfo // Hellbound
{ {

View File

@ -24,54 +24,59 @@ BEGIN
END END
IDD_CONFIG DIALOGEX 0,0,332,261 IDD_CONFIG DIALOGEX 0,0,332,297
CAPTION "Network/Protocol Setup" CAPTION "Network/Protocol Setup"
FONT 8,"MS Shell Dlg",400,0,1 FONT 8,"MS Shell Dlg",400,0,1
STYLE WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_MODALFRAME|DS_SETFONT|DS_FIXEDSYS STYLE WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_MODALFRAME|DS_SETFONT|DS_FIXEDSYS
BEGIN BEGIN
CONTROL "OK",IDOK,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_DEFPUSHBUTTON,208,241,50,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,262,241,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,84,100,9 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,81,40,15,WS_EX_CLIENTEDGE 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,127,46,9 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,81,128,11 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,127,60,87 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,96,100,11 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,144,146,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,10,192,320,46 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,206,56,9 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,219,58,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,201,36,15,WS_EX_CLIENTEDGE 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,217,36,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,126,203,60,9 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,196,201,84,15,WS_EX_CLIENTEDGE 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,201,8,9 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,201,32,15,WS_EX_CLIENTEDGE 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,152,241,50,15 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,142,128,11 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,158,68,9 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,155,60,15,WS_EX_CLIENTEDGE 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 "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 "",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 "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 "",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 "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,116,148,70 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,132,146,11 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,171,88,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,155,146,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,124,219,76,9 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,204,217,76,15,WS_EX_CLIENTEDGE 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,217,32,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,217,4,9 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,116,162,70 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,166,146,11 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,72,318,41 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,97,134,11 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 "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 END
IDD_DEBUG DIALOGEX 0,0,266,158
IDD_DEBUG DIALOGEX 0,0,266,160
CAPTION "Debug" CAPTION "Debug"
FONT 8,"MS Shell Dlg",400,0,1 FONT 8,"MS Shell Dlg",400,0,1
STYLE WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_MODALFRAME|DS_SETFONT|DS_FIXEDSYS 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 "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 "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 "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 "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,106,94,80,15 CONTROL "Intercept connect",IDC_B_INTERCEPTCONNECT,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,136,94,62,15
CONTROL "Check VP",IDC_B_CHECK_VIRTUALPROTECTEX,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,190,94,60,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,7,116,75,14 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,116,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,136,86,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,136,136,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 END

View File

@ -113,11 +113,11 @@ BOOL CALLBACK RadarDllWindowThread_EnumWindowsProc( HWND hWnd, LPARAM lParam )
// window is running in the same process as we are // window is running in the same process as we are
// check window class or name to check is it is main Lineage II window // check window class or name to check is it is main Lineage II window
bool isL2Window = false; bool isL2Window = false;
TCHAR wndTitle[256]; wchar_t wndTitle[256];
memset( wndTitle, 0, sizeof(wndTitle) ); memset( wndTitle, 0, sizeof(wndTitle) );
GetWindowText( hWnd, wndTitle, 255 ); GetWindowTextW( hWnd, wndTitle, 255 );
log_error( LOG_DEBUGDUMP, ".. got window title [%S]\n", wndTitle ); 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; isL2Window = true;
log_error( LOG_DEBUG, "... found L2 window by title!\n" ); log_error( LOG_DEBUG, "... found L2 window by title!\n" );
@ -126,11 +126,11 @@ BOOL CALLBACK RadarDllWindowThread_EnumWindowsProc( HWND hWnd, LPARAM lParam )
if( !isL2Window ) if( !isL2Window )
{ {
log_error( LOG_DEBUGDUMP, "... window title doesn't match, trying by class name...\n" ); log_error( LOG_DEBUGDUMP, "... window title doesn't match, trying by class name...\n" );
TCHAR buffer_for_class_name[256] = {0}; wchar_t buffer_for_class_name[256] = {0};
if( GetClassName( hWnd, buffer_for_class_name, 255 ) ) if( GetClassNameW( hWnd, buffer_for_class_name, 255 ) )
{ {
log_error( LOG_DEBUGDUMP, ".... got window class name = [%S]\n", buffer_for_class_name ); 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; isL2Window = true;
log_error( LOG_DEBUG, ".... found L2 window by class name!\n" ); log_error( LOG_DEBUG, ".... found L2 window by class name!\n" );
@ -139,6 +139,33 @@ BOOL CALLBACK RadarDllWindowThread_EnumWindowsProc( HWND hWnd, LPARAM lParam )
else else
ErrorLogger_LogLastError( "GetClassName()", GetLastError() ); 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... // checks...
if( isL2Window ) // found if( isL2Window ) // found
{ {

View File

@ -94,7 +94,8 @@
#define IDC_E_FORCEGSPORT 1088 #define IDC_E_FORCEGSPORT 1088
#define IDC_B_VALIDATEINTERCEPT 1089 #define IDC_B_VALIDATEINTERCEPT 1089
#define IDC_B_INTERCEPTCONNECT 1090 #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_C_L2WALKER_INJECTSTATUSUPDATE 1122
#define IDC_B_LOADWALKER 1123 #define IDC_B_LOADWALKER 1123
#define IDC_B_UNLOADWALKER 1124 #define IDC_B_UNLOADWALKER 1124
@ -102,6 +103,8 @@
#define IDC_C_EPILOGUE_148_146 1126 #define IDC_C_EPILOGUE_148_146 1126
#define IDC_B_DUMP_ALL_RELATIONS 1127 #define IDC_B_DUMP_ALL_RELATIONS 1127
#define IDC_B_PRINTADDRTID 1128 #define IDC_B_PRINTADDRTID 1128
#define IDC_C_TEONPVP_HACKS 1159
#define IDC_E_INGAME_GAMESERVER_PORT 1160
// radar sound alerts setup dlg // radar sound alerts setup dlg
#define IDC_C_SOUNDENEMYENTER 1089 #define IDC_C_SOUNDENEMYENTER 1089

View File

@ -8,6 +8,7 @@ bool Hook_ValidateAlign();
// my method // my method
void Hook_InterceptConnect_my(); void Hook_InterceptConnect_my();
void Hook_RestoreConnect_my();
bool Hook_ValidateInterception_my(); bool Hook_ValidateInterception_my();
bool Hook_IsWinsockConnectOrig(); bool Hook_IsWinsockConnectOrig();
bool Hook_CheckVirtualProtect(); bool Hook_CheckVirtualProtect();

View File

@ -29,6 +29,9 @@ VirtualProtectEx (kernel32) 8B FF 55 8B EC 5D // jump follows, r
// rejump/relocate to VirtualProtectEx inside kernelbase.dll // 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-òè çàòèðàåìûõ áàéò íà÷àëà ôóíêöèè unsigned char old_func_prologue[6] = {0,0,0, 0,0,0}; // îáëàñòü äëÿ õðàíåíèÿ 6-òè çàòèðàåìûõ áàéò íà÷àëà ôóíêöèè
jmp_push_ret jump_code; // ìàøèííûå èíñòðóêöèè push addr; ret jmp_push_ret jump_code; // ìàøèííûå èíñòðóêöèè push addr; ret
unsigned int connect_orig; // áóäóùèé àäðåñ îðèãèíàëüíîé ôóíêöèè 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; bool g_hook_restore_read_only = false;
unsigned int Proxied_VirtualProtectEx = 0; unsigned int Proxied_VirtualProtectEx = 0;
BOOL __stdcall Proxy_VirtualProtectEx( HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect ); BOOL __stdcall Proxy_VirtualProtectEx( HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect );
void Hook_InterceptConnect_my() void Hook_InterceptConnect_my()
{ {
//ñíà÷àëà ïîëó÷èì àáñîëþòíûé àäðåñ ôóíêöèè äëÿ ïåðåõâàòà //ñíà÷àëà ïîëó÷èì àáñîëþòíûé àäðåñ ôóíêöèè äëÿ ïåðåõâàòà
@ -63,7 +68,7 @@ void Hook_InterceptConnect_my()
connect_orig = (DWORD)GetProcAddress( hws2_32, "connect" ); connect_orig = (DWORD)GetProcAddress( hws2_32, "connect" );
if( connect_orig == 0 ) 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(); ErrorLogger_FlushLogFile();
return; return;
} }
@ -78,15 +83,20 @@ void Hook_InterceptConnect_my()
// struct member alignment must be == 1 !!!!! // struct member alignment must be == 1 !!!!!
// Çàäàäèì ìàøèííûé êîä èíñòðóêöèè ïåðåõîäà, êîòîðûé çàòåì âïèøåì â íà÷àëî ïîëó÷åííîãî àäðåñà: // Çàäàäèì ìàøèííûé êîä èíñòðóêöèè ïåðåõîäà, êîòîðûé çàòåì âïèøåì â íà÷àëî ïîëó÷åííîãî àäðåñà:
jump_code.instr_push = 0x68; jump_code.instr_push = INSTR_PUSH; // PUSH
jump_code.push_arg = (unsigned int)connect_hook_my; jump_code.push_arg = (unsigned int)connect_hook_my; // connect_hook_my
jump_code.instr_ret = 0xC3; jump_code.instr_ret = INSTR_RET; // RET
// Ïðî÷èòàåì è ñîõðàíèì ïåðâûå îðèãèíàëüíûå 6 áàéò ñòàíäàðòíîé API ôóíêöèè // Ïðî÷èòàåì è ñîõðàíèì ïåðâûå îðèãèíàëüíûå 6 áàéò ñòàíäàðòíîé API ôóíêöèè
po = (unsigned char *)&old_func_prologue; po = (unsigned char *)&old_func_prologue;
pj = (unsigned char *)connect_orig; pj = (unsigned char *)connect_orig;
po[0] = pj[0]; po[1] = pj[1]; po[2] = pj[2]; if( pj[0] != INSTR_PUSH )
po[3] = pj[3]; po[4] = pj[4]; po[5] = pj[5]; {
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 // remove read-only access to memory; remember prev.access rights
//ret = VirtualProtect( (void *)connect_orig, 6, PAGE_EXECUTE_WRITECOPY, &old_protect ); //ret = VirtualProtect( (void *)connect_orig, 6, PAGE_EXECUTE_WRITECOPY, &old_protect );
@ -127,12 +137,85 @@ void Hook_InterceptConnect_my()
} }
} }
#ifdef _DEBUG #ifdef _DEBUG
log_error( LOG_DEBUG, "Hook_InterceptConnect_my(): work done?...\n" ); log_error( LOG_DEBUG, "Hook_InterceptConnect_my(): END: work done?...\n" );
#endif #endif
ErrorLogger_FlushLogFile(); 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 ) bool Hook_check_func_prolog( LPCWSTR dllName, LPCSTR funcName, const unsigned char *orig_bytes )
{ {
HINSTANCE hDll = GetModuleHandleW( dllName ); HINSTANCE hDll = GetModuleHandleW( dllName );
@ -218,7 +301,7 @@ bool Hook_ValidateInterception_my()
logLevel = LOG_WARNING; logLevel = LOG_WARNING;
log_error( LOG_WARNING, "Not intercepted! Dump will follow...\n" ); 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, log_error( logLevel,
"dump of machine codes:\n" "dump of machine codes:\n"
@ -251,7 +334,7 @@ int __stdcall connect_hook_my( unsigned int sock, void *sockaddr, int addrlen )
DWORD le = 0; DWORD le = 0;
if( Proxied_VirtualProtectEx ) 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 #ifdef _DEBUG
log_error( LOG_DEBUGDUMP, "connect_hook_my(): before restoring old code\n" ); 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 // log
#ifdef _DEBUG #ifdef _DEBUG
if( paddr->sin_family == AF_INET ) 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(); ErrorLogger_FlushLogFile();
#endif #endif
//Ñíîâà çàìåíÿåì 6 áàéò ôóíêöèè íà êîìàíäó ïåðåõîäà íà íàøó ôóíêöèþ //Ñíîâà çàìåíÿåì 6 áàéò ôóíêöèè íà êîìàíäó ïåðåõîäà íà íàøó ôóíêöèþ
pc[0] = pj[0]; pc[1] = pj[1]; pc[2] = pj[2]; pc[0] = pj[0]; pc[1] = pj[1]; pc[2] = pj[2];
pc[3] = pj[3]; pc[4] = pj[4]; pc[5] = pj[5]; 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 // restore prev. protect
if( g_hook_restore_read_only ) 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; BOOL vp_ret = FALSE;
DWORD le = 0; // last error 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; po = (unsigned char *)&old_func_prologue;
pj = (unsigned char *)&jump_code; pj = (unsigned char *)&jump_code;
@ -507,6 +591,7 @@ bool Hook_CheckVirtualProtect()
return ret; return ret;
} }
__declspec(naked) BOOL __stdcall __declspec(naked) BOOL __stdcall
Proxy_VirtualProtectEx( HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect ) Proxy_VirtualProtectEx( HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect )
{ {

View File

@ -1,33 +1,57 @@
#define IDC_STATIC -1 #define IDC_STATIC -1
#define IDC_B_DUMP_ALL_RELATIONS 1001
#define IDC_B_PRINTADDRTID 1002
IDD_DEBUG DIALOGEX 0,0,266,158 #include "resource.h"
CAPTION "Debug" #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 FONT 8,"MS Shell Dlg",400,0,1
STYLE WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_MODALFRAME|DS_SETFONT|DS_FIXEDSYS STYLE WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_MODALFRAME|DS_SETFONT|DS_FIXEDSYS
BEGIN BEGIN
CONTROL "Login listener status:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,7,7,68,8 CONTROL "OK",IDOK,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_DEFPUSHBUTTON,132,276,50,15
CONTROL "Game listener status:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,7,25,69,8 CONTROL "Cancel",IDCANCEL,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,260,276,50,15
CONTROL "",IDC_ELLSTATUS,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_READONLY|ES_AUTOHSCROLL,90,7,40,14,WS_EX_CLIENTEDGE CONTROL "OverrideGameProtocolVersion:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,16,96,100,9
CONTROL "",IDC_EGLSTATUS,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_READONLY|ES_AUTOHSCROLL,89,23,40,14,WS_EX_CLIENTEDGE CONTROL "",IDC_E_OVERRIDE_GPV,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,120,92,40,15,WS_EX_CLIENTEDGE
CONTROL "Start LL",IDC_STARTLL,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,141,7,50,14 CONTROL "Logging level:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,186,138,46,9
CONTROL "Start GL",IDC_STARTGL,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,142,23,50,14 CONTROL "Enable modify Game Server Traffic",IDC_C_ENABLE_MODGT,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,180,92,128,11
CONTROL "Stop LL",IDC_STOPLL,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,197,7,50,14 CONTROL "",IDC_CB_LOGLEVEL,"ComboBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|CBS_DROPDOWNLIST,258,138,60,87
CONTROL "Stop GL",IDC_STOPGL,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,198,23,50,14 CONTROL "ThreadPriorityRaiseEnable",IDC_C_ENABLE_THREADPRI,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,180,107,100,11
CONTROL "Flush Log File",IDC_FLUSH_LOG,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,7,42,50,14 CONTROL "L2Walker_Fix_MoveBackwardToLocation",IDC_C_L2WMOVEFIX,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,16,155,146,11
CONTROL "hp",IDC_HP,"Static",WS_VISIBLE|WS_GROUP|SS_SUNKEN|SS_LEFTNOWORDWRAP,7,61,72,11 CONTROL "Ports Setup",IDC_STATIC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,8,203,322,67
CONTROL "mp",IDC_MP,"Static",WS_VISIBLE|WS_GROUP|SS_SUNKEN|SS_LEFTNOWORDWRAP,82,61,72,11 CONTROL "Listen Login Port:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,18,216,56,9
CONTROL "cp",IDC_CP,"Static",WS_VISIBLE|WS_GROUP|SS_SUNKEN|SS_LEFTNOWORDWRAP,156,61,72,11 CONTROL "Listen Game Port:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,18,232,58,9
CONTROL "char_name",IDC_CHARNAME,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP|SS_SUNKEN,7,76,251,11 CONTROL "",IDC_E_FLPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,82,212,30,15,WS_EX_CLIENTEDGE
CONTROL "Enable Console",IDC_B_CONENABLE,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,65,42,64,14 CONTROL "",IDC_E_FGPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,82,228,30,15,WS_EX_CLIENTEDGE
CONTROL "Disable Console",IDC_B_CONDISABLE,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,141,42,63,14 CONTROL "Real Login Server:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,120,214,82,9
CONTROL "Validate Interception",IDC_B_VALIDATEINTERCEPT,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,6,94,92,15 CONTROL "",IDC_E_REALIP,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,210,212,70,15,WS_EX_CLIENTEDGE
CONTROL "Intercept connect",IDC_B_INTERCEPTCONNECT,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,106,94,80,15 CONTROL ":",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,284,212,8,9
CONTROL "Check VP",IDC_B_CHECK_VIRTUALPROTECTEX,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,190,94,60,15 CONTROL "",IDC_E_REALPORT,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,290,212,32,15,WS_EX_CLIENTEDGE
CONTROL "Load L2Walker.dll",IDC_B_LOADWALKER,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,7,116,75,14 CONTROL "Apply :)",IDC_APPLY,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,196,276,50,15
CONTROL "Unload L2Walker.dll",IDC_B_UNLOADWALKER,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,90,116,76,15 CONTROL "Log Game Packets",IDC_C_LOGGAMEP,"Button",WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,184,153,128,11
CONTROL "Dump All Relations",IDC_B_DUMP_ALL_RELATIONS,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,8,136,86,15 CONTROL "Log File Name Prefix:",IDC_STATIC,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,184,169,68,9
CONTROL "Print address of UserAI::dwThreadID",IDC_B_PRINTADDRTID,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,102,136,136,15 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 END

View File

@ -29,6 +29,7 @@
#include <shellapi.h> #include <shellapi.h>
#include <shlobj.h> #include <shlobj.h>
#include <commdlg.h> #include <commdlg.h>
#include <Psapi.h>
// DirectX // DirectX
#include <ddraw.h> #include <ddraw.h>