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.
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 ?
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 ^.^
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^^
Habe einmal "SendChatMessageError" oder so Ähnlich gefunden, aber nur einmal jetzt finde ich diese Funktion nicht mehr... bzw es wird nicht mehr damit kommentiert
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:
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?
[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.