Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 14:10

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

Advertisement



C++ DLL ---> Crash

Discussion on C++ DLL ---> Crash within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
Doktor.'s Avatar
 
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
C++ DLL ---> Crash

Hey,

hab mir vorhin mal eine DLL gecodet, die DLL fungiert als Client von einem Server, die DLL wird dabei in ein Game injectet.

Der Code der main
Code:
BOOL APIENTRY DllMain( HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		CreateThread(0, 0, &Function, 0, 0, 0);
		break;
	case DLL_THREAD_ATTACH:
		break;
	case DLL_THREAD_DETACH:
		break;
	case DLL_PROCESS_DETACH:
		 MessageBoxA(0, "DLL_PROCESS_DETACH", "",0);
		break;
	}
	return TRUE;
}
Anfangs funktioniert alles, aber sobald ich in Game z.B. die Auflösung änder oder auf Fullscreen wechsel, hängt sich das Game auf...

Bzw. wird:
Code:
case DLL_PROCESS_DETACH:
		 MessageBoxA(0, "DLL_PROCESS_DETACH", "",0);
		break;
aufgerufen, solange das Programm versucht die Auflösung zu wechseln und wenn ich auch lange genug warte, funktioniert das Game und die DLL auch wieder.

Weis jemand zufällig, wie ich verhindern kann, dass das Game sich aufhängt?


Mfg. ~Wystan
Doktor. is offline  
Old 11/19/2013, 14:55   #2
 
Doktor.'s Avatar
 
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
Weis den niemand woran es liegt?
Doktor. is offline  
Old 11/19/2013, 19:43   #3
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
was machste denn in "Function"?
Dr. Coxxy is offline  
Old 11/19/2013, 20:28   #4
 
Doktor.'s Avatar
 
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
Anfangs wartet die Funktion aufn Server, wenn die connected sind wartet er auf eine Nachricht, das andere dürfte eig. nicht das Problem sein, da es schon crasht wenn er aufn Server wartet.
Doktor. is offline  
Old 11/21/2013, 13:23   #5
 
Doktor.'s Avatar
 
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
Falls es hilft, das Game ist NosTale
Doktor. is offline  
Old 11/21/2013, 14:58   #6
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
wenn du den createthread weglässt - crashts dann auch?
Dr. Coxxy is offline  
Old 11/21/2013, 15:17   #7
 
Doktor.'s Avatar
 
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
Jop, hatte ich anfangs so und dachte mit CreateThread würde es funktionieren, war leider nicht der Fall.
Doktor. is offline  
Old 11/21/2013, 15:49   #8
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
lass mal die messagebox im detach weg und ruf kein createthread auf, also quasi ne leere dll injecten die einfach nix macht.
Dr. Coxxy is offline  
Old 11/21/2013, 16:23   #9
 
Doktor.'s Avatar
 
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
Leer Funktioniert sie
Doktor. is offline  
Old 11/21/2013, 16:26   #10
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
dann lass halt die messagebox im detach weg wenn die zum crash führt?
Dr. Coxxy is offline  
Old 11/21/2013, 16:29   #11
 
Doktor.'s Avatar
 
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
Asoo, dachte du meinst ich solle alles weg machen, also komplett leer ohne irgendeine Funktion^^.
Stürzt natürlich auch ab, wenn ich die MessageBox entferne

Hier mal der Code:
Code:
///*
class CConsole {
	FILE m_OldStdin, m_OldStdout;
	bool m_OwnConsole;
public:
	CConsole();
	~CConsole();
};

static BOOL WINAPI MyConsoleCtrlHandler(DWORD dwCtrlEvent) { return dwCtrlEvent == CTRL_C_EVENT; }
//*/

class NTString
{
public:
	DWORD length;
	char command[256];

	NTString(char *string)
	{
		length = strlen(string);
		memcpy(command, string, length);
		command[length] = 0;
	}
};

//-------- Variablen Deklarieren ---------
std::string packet;
int first = 0;
long conn;
bool checkState[2];

SOCKET s;
SOCKADDR_IN addr;

HWND winNos;
HWND winNTKit;
CConsole *console;

DWORD pID;
//---------Functionen Deklarieren---------
char buffer[256];

int startWinsocket(void);
int main();

void searchNTKitServer();
void RecievePackets();
void setValues();
void SEND_TO_SERVER(char *packet);
void NosTale_Send(char *buffer);

//----------Console Deklarieren----------

CConsole::CConsole() : m_OwnConsole(false) {
	if (!AllocConsole()) return;

	SetConsoleCtrlHandler(MyConsoleCtrlHandler, TRUE);
	RemoveMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND);
	const int in = _open_osfhandle(INT_PTR(GetStdHandle(STD_INPUT_HANDLE)), _O_TEXT);
	const int out = _open_osfhandle(INT_PTR(GetStdHandle(STD_OUTPUT_HANDLE)), _O_TEXT);
	m_OldStdin = *stdin;
	m_OldStdout = *stdout;

	*stdin = *_fdopen(in, "r");
	*stdout = *_fdopen(out, "w");

	m_OwnConsole = true;
}

CConsole::~CConsole() {
	if (m_OwnConsole) {
		fclose(stdout);
		fclose(stdin);
		*stdout = m_OldStdout;
		*stdin = m_OldStdin;
		SetConsoleCtrlHandler(MyConsoleCtrlHandler, FALSE);
		FreeConsole();
	}
}


//------Alle Functionen Definieren-------
void SEND_TO_SERVER(char *packet)
{

	DWORD SEND_EAX = ******, SEND_ADDR = *******;

	__asm
	{
		MOV EAX, DWORD PTR DS : [SEND_EAX]
		MOV EAX, DWORD PTR DS : [EAX]
		MOV EAX, DWORD PTR DS : [EAX]
		MOV EDX, packet
			CALL SEND_ADDR
	}
}

void NosTale_Send(char *buffer)
{
	NTString str(buffer);
	SEND_TO_SERVER(str.command);
	return;
}

void searchNTKitServer()
{
	if (first == 1)
	{
		closesocket(s);
		closesocket(conn);
		setValues();
	}
	conn = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
	while (conn == SOCKET_ERROR)
	{
		conn = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
	}
}

DWORD WINAPI AttachSucess(LPVOID unused)
{

	pID = GetProcessId(GetCurrentProcess());
	main();

	return 0x0;
}

void RecievePackets()
{
	recv(s, buffer, 256, 0);//Packete recieven
	if (buffer != "")//Abfrage ob Packet angekommen ist
	{
		NosTale_Send(buffer);//Send Packet zu Nostale
		cout << buffer << endl << endl;//Packet ausgabe
		memset(buffer, '\0', 256);//Leere das recievte Packet
	}
}

void setValues()
{
	if (first == 1)
	{
		s = socket(AF_INET, SOCK_STREAM, 0);
		memset(&addr, 0, sizeof(SOCKADDR_IN));
	}
	addr.sin_family = AF_INET;
	addr.sin_port = htons(5555);
	addr.sin_addr.s_addr = inet_addr("127.0.0.1");
}

//------------------------------------------
int main()
{
	MessageBoxA(0, "Main started", "", MB_ICONERROR);
	if (startWinsocket() == 0)
	{
		s = socket(AF_INET, SOCK_STREAM, 0);
		if (s != INVALID_SOCKET)
		{
			memset(&addr, 0, sizeof(SOCKADDR_IN));

			setValues();
			searchNTKitServer();
			first = 1;

			stringstream ss;
			ss << pID;

			packet = ss.str();

			send(s, packet.data(), sizeof(packet), 0);

			//Console starten
			console = new CConsole();

			//Haupt-Schleife
			while (true)
			{
				RecievePackets();
			}
		}
	}
	return 0;
}

int startWinsocket(void)
{
	WSADATA wsa;
	return WSAStartup(MAKEWORD(2, 0), &wsa);
}

//------------------------------------------
BOOL APIENTRY DllMain( HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		CreateThread(0, 0, &AttachSucess, 0, 0, 0);
		break;
	case DLL_THREAD_ATTACH:
		break;
	case DLL_THREAD_DETACH:
		break;
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}
Doktor. is offline  
Old 11/21/2013, 21:26   #12
 
Padmak's Avatar
 
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
Eieiei..
Code:
class NTString
{
public:
	DWORD length;
	char command[256];

	NTString(char *string)
	{
		length = strlen(string);
		memcpy(command, string, length);
		command[length] = 0;
	}
};
Was passiert denn, wenn length > 255?

Ruf mal in deiner DllMain auf, damit reduzierst du die Aufrufe derselben.

Code:
recv(s, buffer, 256, 0);//Packete recieven
if (buffer != "")//Abfrage ob Packet angekommen ist
Bist du dir wirklich SICHER, dass man so auf angekommene Packets überprüft?

Alles in allem ist dein Code ziemlich instabil, der Crash könnte überall sein bzw von allem verursacht werden.

Padmak
Padmak is offline  
Thanks
1 User
Old 11/21/2013, 22:53   #13
 
Doktor.'s Avatar
 
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
Quote:
Originally Posted by Padmak View Post

Code:
recv(s, buffer, 256, 0);//Packete recieven
if (buffer != "")//Abfrage ob Packet angekommen ist
Bist du dir wirklich SICHER, dass man so auf angekommene Packets überprüft?
Padmak
Ob man dies so überprüft bin ich mir nicht so ganz sicher, bin noch nicht der Erfahrenste in dem Bereich.

Das andere werde ich nachher mal versuchen, danke.


#Edit
Danke, Problem ist jetzt dank weg
Doktor. is offline  
Reply


Similar Threads Similar Threads
Crash Frei 100%***~~~CyberRazzer NoMenu Chams/NoFog/FullBright!!!!!~~~***Crash Fre
11/30/2010 - WarRock Hacks, Bots, Cheats & Exploits - 66 Replies
Download: Removed! DT! Waiting for new Version!



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


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

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