GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Eloctro le 13 Novembre 2010, 10:51:04
-
Bonjour ,
J'aimerais créer en C++ un launcher direct qui ne passe pas par sa-mp.exe mais Gtasa.exe + sa-mp.dll
Merci d'avance ;)
-
C'est assez simple, tu as juste à lancer le jeu ( GTA_SA.EXE ) ensuite tu injecte SAMP.DLL.
Mais bien sur faut lancer le jeu avec les bon arguments que tu peut trouver sur http://sa-mp.com (http://sa-mp.com) =)
Si tu ne sais pas comment injecter une dll dit le moi sur ce post =)
-
Je sais pas injecté le DLL et j'ai trouvé les paramètres dans ce sujet http://forum.sa-mp.com/showthread.php?t=70282&page=2 (http://forum.sa-mp.com/showthread.php?t=70282&page=2)
-
Tu peut utiliser cette fonction qui viens est faite par UZI-I
http://public.yoa2n.fr/source/RemoteLoadLibrary.cpp___.txt (http://public.yoa2n.fr/source/RemoteLoadLibrary.cpp___.txt)
STARTUPINFOW siStartupInfo;
PROCESS_INFORMATION piProcessInfo;
memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));
siStartupInfo.cb = sizeof(siStartupInfo);
CreateProcess("./gta_sa.exe", "", 0, 0, true, CREATE_DEFAULT_ERROR_MODE, 0, 0, &siStartupInfo, &piProcessInfo);
HWND hWnd = NULL;
DWORD pID = NULL;
HANDLE hndl = NULL;
while(!(hWnd = FindWindow(NULL,"GTA: San Andreas"))){Sleep(20);}
GetWindowThreadProcessId (hWnd,&pID);
hndl = OpenProcess(PROCESS_ALL_ACCESS,false,pID);
if(!RemoteLoadLibrary (hndl,"samp.dll"))
{
}
Un truc dans ce genre devrai fonctionner, c'est codé à l'arrache désolé ^^
-
Merci ,et je met où les paramètres ?
-
Le second paramètre de CreateProcess
-
Ok merci beaucoup :)
-
Je viens de voir pour en faire un vite fait en Visual Basic (langage tout con :D) mais c'est quoi la fonction pour lancer une application avec une dll ?
(Ça existe ? :D)
Myk3L.
PS : La flemme de faire ça en C ou C++ pour un test :D (en plus je chie aevec les GUI)
-
Ya un problème au niveau du create process :
cannot convert 'STARTUPINFOW*' to '_STARTUPINFOA*' for argument '9' to 'BOOL CreateProcessA(const CHAR*, CHAR*, _SECURITY_ATTRIBUTES*, _SECURITY_ATTRIBUTES*, BOOL, DWORD, void*, const CHAR*, _STARTUPINFOA*, _PROCESS_INFORMATION*)'|
Je penses que c'est du à : siStartupInfo
-
Tien un très bon injecteur pour toi made by me :p
#include < iostream >
#include < windows.h >
bool InjectDLL( HANDLE handle, const char* pathOfDLL )
{
void *Lib, *Str;
Lib = ( void* )GetProcAddress( GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
Str = ( void* )VirtualAllocEx( handle, NULL, strlen( pathOfDLL ), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory( handle, ( void* )Str, pathOfDLL, strlen( pathOfDLL ), NULL);
CreateRemoteThread( handle, NULL, NULL, (LPTHREAD_START_ROUTINE)Lib, ( void* )Str, NULL, NULL);
return true;
}
int main( int ArgCount, char** Args )
{
STARTUPINFO startupInfo;
PROCESS_INFORMATION processInfo;
memset( &startupInfo, 0x00, sizeof( STARTUPINFO ) );
memset( &processInfo, 0x00, sizeof( PROCESS_INFORMATION ) );
startupInfo.cb = sizeof( STARTUPINFO );
if( CreateProcess( L"./gta_sa.exe", L" ICI les argument et tout :p", NULL, NULL, true, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &startupInfo, &processInfo ) == false )
{
// ICI GTA ne s'est pas lancé
return 0;
}
InjectDLL ( processInfo.hProcess, "samp.dll" );
return 0;
}