Register for your free account! | Forgot your password?

Go Back   elitepvpers › Coders Den › General Coding
You last visited: Today at 11:43

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Ingame Chat Nachrichten schicken! (LoL)

Discussion on Ingame Chat Nachrichten schicken! (LoL) within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jun 2011
Posts: 225
Received Thanks: 8
Ingame Chat Nachrichten schicken! (LoL)

Hallo
Wie ist es möglich mit einem Programm, Chat Nachrichten ingame zu versenden? Als Beispiel beim Spiel "League of Legends"
Es gibt zum Beispiel das Programm "Mk Jogo" wo man unter anderem 5 Nachrichten festlegen kann, die man mit einem shortcut dann sofot senden kann... so ähnlich soll das funktionieren.

Danke für Anregungen:
Krabat2 is offline  
Old   #2
 
elite*gold: 5
Join Date: Dec 2011
Posts: 1,083
Received Thanks: 650
Hallo,

da gibt es wie mir spontan einfallen zwei Methoden:

1.) Paket senden an den Server
2.) Funktion in dem Prozess finden, welche für das Senden der Nachrichten zuständig ist und dann callen

Beides läuft auf Reverse Engineering hinaus und später CodeInjection in Form einer DLL o.ä.
.Verkauf´ is offline  
Old   #3
 
_geforce_'s Avatar
 
elite*gold: 47
Join Date: Oct 2007
Posts: 880
Received Thanks: 67
Wenn es nur um nachrichten schicken geht, reicht doch auch eine emulation also das die tastendrücke emuliert werden sollte um einiges leichter sein also reverse engineering oder täusche ich mich da ?
_geforce_ is offline  
Old   #4
 
elite*gold: 5
Join Date: Dec 2011
Posts: 1,083
Received Thanks: 650
Quote:
Originally Posted by _geforce_ View Post
Wenn es nur um nachrichten schicken geht, reicht doch auch eine emulation also das die tastendrücke emuliert werden sollte um einiges leichter sein also reverse engineering oder täusche ich mich da ?
Ja, so kann man es auch machen, hast du recht . Ich bevorzuge jedoch die oben genannten Methoden ^.^
.Verkauf´ is offline  
Old   #5
 
elite*gold: 0
Join Date: Jun 2011
Posts: 225
Received Thanks: 8
Für Methode 2 Sollte ich mich mit Assembler und mit OllyDbg beschäftigen? Habe die beiden Begriffe jedenfalls schon öfters im Zusammenhang mit Reversne Engineering gehört^^
Krabat2 is offline  
Old   #6
 
elite*gold: 5
Join Date: Dec 2011
Posts: 1,083
Received Thanks: 650
Ja, man sollte allerdings Vorwissen in Programmierung und Assembler haben. Die Arbeitsweise der CPU + RAM sollte man ebenfalls beherrschen.
.Verkauf´ is offline  
Old   #7
 
elite*gold: 0
Join Date: Jun 2011
Posts: 225
Received Thanks: 8
Und wie geht man sowas an? Also wie findet man so eine Funktion? Gibt es dazu Tutorials oder Ähnliches?
Krabat2 is offline  
Old   #8
 
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,492
Ich hatte die Funktion vor einiger Zeit, inzwischen sind das sogar Jahre, gefunden.

Der Ingame-Chat hat ja Commands wie z.B. /r oder /all. Die findet man über die String-Suche, dann ist die Funktion zum Senden nicht mehr weit.
florian0 is offline  
Old   #9
 
elite*gold: 0
Join Date: Jun 2011
Posts: 225
Received Thanks: 8
Hab das mal ausprobiert jedoch nichts gefunden.. habe sowohl unicode als auch ASCII probiert
Krabat2 is offline  
Old   #10
 
elite*gold: 0
Join Date: Jun 2011
Posts: 225
Received Thanks: 8
Habe einmal "SendChatMessageError" oder so Ähnlich gefunden, aber nur einmal jetzt finde ich diese Funktion nicht mehr... bzw es wird nicht mehr damit kommentiert
Krabat2 is offline  
Old   #11
 
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,492
Das ist der Code, der vor 3 Jahren am Ende rauskam:
Code:
void SendChat(char* Text)
{
	__asm
	{
		MOV EAX, DWORD PTR DS:[0xAF381F8]
		MOV EAX, DWORD PTR DS:[EAX + 0x2C]
		MOV EAX, DWORD PTR DS:[EAX + 0x8]
		MOV EDX, DWORD PTR DS:[EAX]
		MOV EDX, DWORD PTR DS:[EDX + 0x8]
		PUSH Text
		MOV ECX, EAX
		CALL EDX
	}
}
Bzw. als kompletter Hook wie du es beschrieben hast:
Code:
//bUTL9R ChatHook, credits to florian0 from stagetwo
//=====================================================
//			Includes
//=====================================================
#include "Manager.h"
void CallChat(char* Text);
//==================================================================
//				Important Variables
//==================================================================
DWORD dwEAX = 0; //EAX register wich is not static and needs to be retrived by GetEAX, otherwhise SendMessage will crash the game!
DWORD dwChatAddress; //Where to "hook" the chat function with our GetEAX function
DWORD dwCallOrigSendMessage = 0; //Address to call the original SendMessage from the game itself
DWORD dwJumpBack;
void CreateConsole()
{
	AllocConsole();
	freopen( "CONOUT$", "wb", stdout );
}
void CheckHotkeys()
{
	while (true)
	{
		Sleep(10);
		if (GetAsyncKeyState(VK_NUMPAD1) &1)
		{
			CallChat("easy");
		}
		if (GetAsyncKeyState(VK_NUMPAD2) &1)
		{
			printf("Sending GG\n");
			CallChat("/all GG!");
			if (dwEAX == 0 || dwCallOrigSendMessage == 0)
			{
				return;
			}
			CallChat("/all GG!");
			CallChat("/all GG!");
			CallChat("/all GG!");
			CallChat("/all GG!");
			CallChat("/all GG!");
			CallChat("/all GG!");
			CallChat("/all GG!");
			CallChat("/all GG!");
		}
		if (GetAsyncKeyState(VK_NUMPAD3) &1)
		{
			printf("call sendChat with troll\n");
			CallChat("/all I molest rubber chicken!");
		}
		if (GetAsyncKeyState(VK_NUMPAD4) &1)
		{
			CallChat("/all B1tch where you going?!");
		}
		if (GetAsyncKeyState(VK_NUMPAD5) &1)
		{
			CallChat("/all Not even close baby!");
		}
		if (GetAsyncKeyState(VK_NUMPAD6) &1)
		{
			CallChat("/all My favorite poker card? The ACE!");
		}
		if (GetAsyncKeyState(VK_NUMPAD7) &1)
		{
			CallChat("/all Nope, not on my watch!");
		}
	}
}
//==================================================================
//				CallChat
//Our CallChat function, wich calls the original CallChat function with our text parameter
//==================================================================
void CallChat(char* Text)
{
	//http://www.stagetwo.eu/index.php?page=Thread&threadID=156383&pageNo=3
	// call to SendMessage: 0045F270 
	if (dwEAX == 0 || dwCallOrigSendMessage == 0)
	{
		MessageBox(NULL, "You dumbfuck want me to crash?!", "Error", MB_OK);
		return;
	}
	//you need to use the chat once manually (write hello or something), since we need 2 addresses
	__asm
	{
		mov eax, dwEAX
		mov edx, dwCallOrigSendMessage
		push Text
		mov ecx, eax
		call edx
	}
}
//==================================================================
//				GetEAX
//==================================================================
__declspec(naked) void GetEAX()
{
	__asm 
	{
		mov dwEAX, eax
		mov dwCallOrigSendMessage, edx
		push ecx
		mov ecx, eax
		call edx
	}
	//We got eax, ad edx [address for original sendmessage function], so we restore the original code to stay as undetected as possible
	//orig code: 51 8B C8 FF D2				
	FrameWork->WriteMemory((void *)dwChatAddress, (void *)"\x51\x8B\xC8\xFF\xD2", 5);
	//jump back to original code
	__asm
	{
		jmp [dwJumpBack]
	}
}
//==================================================================
//				InitializeChatHook
//==================================================================
void InitializeChatHook()
{
	CreateConsole();
	//Chat address is inside League of Legends.exe. Modulebase is always 0x00400000
	//LolClient ModuleSize: 0B158000
	printf("Searching chat address!\n");
	dwChatAddress = FrameWork->FindPattern(0x00400000, 0x0B158000, (PBYTE)"\x51\x8B\xC8\xFF\xD2\xB0\x01", "xxxxxxx");
	if (dwChatAddress != 0)
	{
		printf("Found chat address: %x\n", dwChatAddress);
	}
	else
	{
		printf("Did not find chat address!\n");
		return;
	}
	FrameWork->MakeJMP((PBYTE)dwChatAddress, (DWORD)GetEAX, 5);
	dwJumpBack = dwChatAddress + 5; //Important, original game code continues there 
	printf("Detoured function, ready to go.\n");
	CheckHotkeys();
	return;
}
(Von hier: (und Seite 4))


Ich kann mir nicht vorstellen, dass der Hook noch funktioniert. Dafür ist zu viel Zeit vergangen.

Der LoL-Client arbeitet viel mit Übersetzungen. Ggf. findet man /all nicht mehr. Aber die hier findet man noch:
  • game_chat_known_commands
  • game_chat_command_help
  • game_console_chatcommand
florian0 is offline  
Old   #12
 
elite*gold: 0
Join Date: Jun 2011
Posts: 225
Received Thanks: 8
mhm ICh habe eigentlich immer alle Strings nach "chat" durchsucht und nie soetwas wie game_chat_known_commands
game_chat_command_help

gefunden :/ Irgendwas mache ich falsch
Krabat2 is offline  
Old   #13
 
elite*gold: 0
Join Date: Jun 2011
Posts: 225
Received Thanks: 8
Ok lag daran dass ich zu wenig mit ollydbg gearbeitet habe..
Habe nicht vorher das Modul "League of Legends.exe" ausgeführt, aber den weg bis zur chat funktion verstehe ich nicht.. habe zum Beispiel als String "Buy Item" gefunden und den Anfang der Funktion mit einem BReak Point versehen...

Wenn ich ein Item gekauft habe, wurde LoL aber nicht pausiert?
Krabat2 is offline  
Old   #14
 
elite*gold: 0
Join Date: Jun 2011
Posts: 225
Received Thanks: 8
Bei anderen funktionen wie "Hover Shop", "Close Shop" etc. stoppt/pausiert es ebenfalls nicht
Krabat2 is offline  
Old   #15
 
elite*gold: 8
Join Date: Sep 2014
Posts: 625
Received Thanks: 178
Dann musst du halt weitersuchen Nur weil sie zur Aktion passen, heißt es nicht, dass auf diese auch zugegriffen werden muss.
qqdev is offline  
Reply


Similar Threads Similar Threads
[SQLite] Chat Nachrichten speichern
02/01/2015 - General Coding - 3 Replies
Hallo, ich habe vor Chat Nachrichten von Usern zu speichern, weis leider nicht genau wie ich dies angehen sollte. Eine Idee war es die Nachrichten in einem Column zu speichern, dies wäre aber glaube ich zu langsam, da ich dafür die Nachrichten splitten etc. müsste um an einzelne Nachrichten zu kommen und dies auf einem Smartphone. Die zweite Idee war es für jeden einzelnen User ein neuen Table zu erstellen wo dann die Columns "_id" und "message" und halt weitere infos haben. Bin mir...
Privater Chat [Private Nachrichten verbessern...]
04/05/2014 - Suggestions & Feedback Archive - 7 Replies
Wie wäre es, wenn man einen Chat einbaut, so das man alleine mit z.B. dem Handelspartner chatten kann? So muss man nicht immer 30sec. warten, bis man die nächste private Nachricht verschicken kann und nicht F5 spammen, um zu gucken, wann eine Antwort kommt. Dann brauch man auch nicht mehr Skype nutzen, und dadurch läuft der Handel nur durch epvp ab und man hat auch bessere Chancen, um gegen Scammer vorzugehen. Ich denke mal auch selber das es ist so schwer ist, das zu programmieren :)
Private Nachrichten Ingame
08/16/2011 - Metin2 Private Server - 5 Replies
Hey Leute, wäre es möglich einen NPC einzurichten, an dem anderen Spielern eine Nachricht geschrieben werden kann, auch wenn dieser Offline ist? Sodass wenn der Empfänger dann wieder Online ist, der NPC blinkt und die Nachrichten anzeigt...umsetzbar oder zu schwer? Lg worse.:rtfm:
Nachrichten und Chat EINFÜGEN!
06/06/2010 - Metin2 - 1 Replies
hi, hat hier jemand noch das tool, bei dem es 3 felder, je für F9;F10 und F11 gab, und man in die felder texte reinschreiben konnte. dann musste man nurnoch ingame chat aufmachen F9/F10/F11 drücken und schon war der text da. die sufu hat nichts ergeben, wäre nett wenn ihr es posten könntet. der erste ders postet kriegt n THX inb4: man kann ingame "pfeil-nachoben"drücken.



All times are GMT +1. The time now is 11:44.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.