[DLL]Récupérer les arguments de lancement d'un programme.

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Astropilot

The Lord
V.I.P
V
Jan 6, 2011
9,283
17
1,254
France
Bonjour,bonsoir !
Aujourd'hui je partage une petite dll qui vous permet d'afficher les arguments avec lesquels le programme a été lancé :)

[Screen]
ZWtMe.png


[Tutoriel]
Injectez la dll dans le programme dont vous voulez récupérer les arguments.
Une console s'ouvre avec sur chaque ligne un argument.

[Téléchargement et Virustotal]
Lien: Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!

VirusTotal: Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
 

Astropilot

The Lord
V.I.P
V
Jan 6, 2011
9,283
17
1,254
France
C'est de toi ?
Je trouve l'idée assez cool :)

Oui enfin, le code est pas très dur hein ^^

Le code pour ceux que ca intéresse (la fonction pour la console n'est pas de moi, merci google ^^):
Code:
#include <windows.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <conio.h>

using namespace std;

void vInstallConsole()
{
	int hConHandle;
	long lStdHandle;
	CONSOLE_SCREEN_BUFFER_INFO coninfo;
	FILE *fp;

	AllocConsole();
	GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
	coninfo.dwSize.Y = 500;
	SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);

	lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
	hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
	fp = _fdopen(hConHandle, "w");
	*stdout = *fp;
	setvbuf(stdout, NULL, _IONBF, 0);

	lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
	hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
	fp = _fdopen(hConHandle, "r");
	*stdin = *fp;
	setvbuf(stdin, NULL, _IONBF, 0);
	lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
	hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
	fp = _fdopen(hConHandle, "w");
	*stderr = *fp;
	setvbuf(stderr, NULL, _IONBF, 0);
	ios::sync_with_stdio();
}

void WINAPI MainThread()
{
	vInstallConsole();
	HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTitleA("S4Terminal ~ Astropilot");
	LPWSTR *szArgliste;
	int nArgs = 0;
	szArgliste = CommandLineToArgvW(GetCommandLineW(), &nArgs);

	for (int i = 0; i < nArgs; i++) {
		//MessageBoxW(NULL, szArgliste[i], L"Args", MB_OK);
		//cout << szArgliste[i] << endl;
		printf("%d: %ws\n", i, szArgliste[i]);
	}
	LocalFree(szArgliste);
}

BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpvReserved)
{
	switch (dwReason) {
	case DLL_PROCESS_ATTACH:

		DisableThreadLibraryCalls(hModule);
		
		if (CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MainThread, NULL, 0, NULL) == NULL)
			
		{
			return FALSE;
		}
		break;

	case DLL_PROCESS_DETACH:
		break;

	case DLL_THREAD_ATTACH:
		break;

	case DLL_THREAD_DETACH:
		break;
	}
	return TRUE;
}
 
Last edited:

cafe1231

Membre Banni
Feb 17, 2013
821
0
221
Je comprend pas vraiment le terme d'argument et donc la fonctionnalité de ce tool , quelqu'un pourrait m'éclairé ?
 

Astropilot

The Lord
V.I.P
V
Jan 6, 2011
9,283
17
1,254
France
Et bien, pour certains programmes, ils sont lancés avec des arguments de démarrage, par exemple une version, le nom d'un fichier, etc.
Et ma dll permet d'afficher ces arguments.
Ici comme tu le vois dans le screen, le S4Client est lancé avec certains arguments.
Et si tu essai de lancer directement l'exécutable, il te mettra une erreur car il a besoin de ces arguments.