.exe starten

Status
Niet open voor verdere reacties.

NLScotty

Gebruiker
Lid geworden
17 aug 2009
Berichten
200
Hallo,

Weet iemand misschien hoe je zo'n standaard windows window opent waar je door de C/D schijf etc kan kijken en als je op een .exe drukt dat die dan in een edit control komt (SetDlgItemText), maar dat je dan op een anere button drukt en dat dan die .exe wordt opsgestart, zoals C:Programfiles/lol.exe start ofzo.

Alvast bedankt,

Groetjes
 
Je kunt een gebruiker een bestand laten selecteren door middel van een GUI met de GetOpenFileName functie.
 
Weetje misschien hoe je 2 dezelfde process opent die gebruik maken vancreamutex om zichzelf te controleren, dat hook ik dan emt dit.

Ik heb nu dit in mijn .exe.

Code:
STARTUPINFO si;
				PROCESS_INFORMATION pi;
				STARTUPINFO si2;
				PROCESS_INFORMATION pi2;

				ZeroMemory( &si, sizeof(si) );
				si.cb = sizeof(si);
				ZeroMemory( &pi, sizeof(pi) );
				ZeroMemory( &si2, sizeof(si2) );
				si.cb = sizeof(si2);
				ZeroMemory( &pi2, sizeof(pi2) );

				CreateProcess("D:\\Spellen\\Europe MapleStory\\MapleStory.exe", "2", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
				CloseHandle( pi.hProcess );
				CloseHandle( pi.hThread );
			

				MshWnd1 = FindWindow(NULL, "Maplestory");
				MshWnd2 = FindWindow(NULL, "Maplestory1");
				DWORD ProcID;
				Sleep(5000);
				if(MshWnd1)
				{
					if(GetWindowThreadProcessId(MshWnd1, &ProcID))
					{
						MessageBoxA(hWnd,"1","ïnj",0);
						InjectDLL(ProcID, "C:Visual Studio 2010\\Projects\\Andres\\MultiClient\\Debug\\Multidll.dll");

					}
				}
				Sleep(3000);

				CreateProcess("D:\\Spellen\\Europe MapleStory\\MapleStory.exe1", "1", NULL, NULL, FALSE, 0, NULL, NULL, &si2, &pi2);
				CloseHandle( pi2.hProcess );
				CloseHandle( pi2.hThread );

				if(MshWnd2)
				{
					if(GetWindowThreadProcessId(MshWnd2, &ProcID))
					{
						MessageBoxA(hWnd,"2","ïnj",0);
						InjectDLL(ProcID, "C:Visual Studio 2010\\Projects\\Andres\\MultiClient\\Debug\\Multidll.dll");

					}
				}

en dan dit in mijn .dll
Code:
HANDLE (WINAPI * Real_CreateMutex)(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner,LPCWSTR lpName) = CreateMutexW;
HANDLE WINAPI Fake_CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,BOOL bInitialOwner, LPCWSTR lpName)
{
	MessageBoxA(0,"Create","er",0);
	HANDLE hMutex = OpenMutexW(MUTEX_ALL_ACCESS, FALSE, lpName);
	if(hMutex != NULL)
	{
		SetLastError(ERROR_SUCCESS);
		return hMutex; 
	}
	return Real_CreateMutex(lpMutexAttributes, bInitialOwner, lpName);
}
HANDLE (WINAPI * Real_OpenMutex)(DWORD dwDesiredAccess,BOOL bInheritHandle,LPCTSTR lpName) = OpenMutexW;
HANDLE WINAPI Fake_OpenMutex(DWORD dwDesiredAccess,BOOL bInheritHandle,LPCTSTR lpName)
{
	MessageBoxA(0,"open","er",0);
		SetLastError(ERROR_SUCCESS);
		return 0; 
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					   
					 )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		MessageBoxA(0,"dll injected","Good",0);
		DisableThreadLibraryCalls(hModule);
		DetourTransactionBegin();
		DetourUpdateThread(GetCurrentThread());
		DetourAttach(&(PVOID&)Real_CreateMutex,Fake_CreateMutex);	
		DetourAttach(&(PVOID&)Real_OpenMutex,Fake_OpenMutex);

Enig idee waarom het programma maar 1x opstart?
 
Ik zou het desbetreffende proces in suspended mode opstarten. Vervolgens de WriteProcessMemory functie roepen waarbij lpBaseAddress naar het adres van de mutex string verwijst. Ergens wordt de string die gebruikt wordt om het mutex object te creëren in het geheugen van het desbetreffende proces geladen. Deze string passen we in runtime aan met behulp van de WriteProcessMemory functie voordat de CreateMutex functie door het desbetreffende proces wordt geroepen (aangezien wij het proces in suspended mode hebben opgestart). Als de string is aangepast laten we het proces verder draaien door de ResumeThread functie te roepen met als parameter de primaire thread van het desbetreffende proces. Nu creëert het desbetreffende proces een mutex object met een naam die wij in zijn geheugen hebben geschreven. Als laatst start je het desbetreffende proces een tweede maal op zonder fratsen. Het injecteren van een dynamic link library is niet nodig en ik denk dat deze methode het effectiefst/gemakkelijkst is om jouw doel te bereiken.
 
Euhm, niet echt, misschien ken je het spel maplestory wel, dat probeerde ik, maar ik hoorde dat een "hack/glitch" het niet meer deed is dit zinloos. Ik heb u wel een hackshield bypass gemaakt, ben nu bezig met packets..... Van een struct naar een treeview.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan