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.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 );
}

View File

@ -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;

View File

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

View File

@ -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;

View File

@ -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" );

View File

@ -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
{

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",
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();

View File

@ -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
{

View File

@ -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

View File

@ -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
{

View File

@ -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

View File

@ -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();

View File

@ -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 )
{

View File

@ -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

View File

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