Sign in to follow this  
Poulais4

 tutoriel Lire la Mémoire

Recommended Posts

Niveau requis Débutant

Temps estimé : 30 minutes

 

Ouais, un autre article axé 'newbie', que voulez-vous, faut pas s'attendre à un tutoriel sur l'exploitation UMA sous freebsd, j'mappelle pas overcl0k. Bref, pour expliquer ça vite fait, chaque programme utilise de la mémoire, ça vous le savez, certains programme, utilisent cette mémoire pour stocker des informations importantes, tels que des mots de passe et j'en passe (la rime de foo © int_0×80 ), cet article traitera donc, l'écriture d'un dumper (anglicisme nécessaire) de mémoire.

 

Révélation

 

Pour commencer notre dump l'on a besoin du numéro d'identification du programme victime.

#include 
#include 

void main(int argc,char *argv[])
{
//déclaration de quelques vars

char buf[24000]; // ceci est le buffer, où la mémoire est stockée.
DWORD bufsize = sizeof(buf); // ceci est le nombre de bytes que l'on va utiliser.
DWORD hPID=0; // Un PID standard. 
HANDLE hReadp; // Va tenir ( sens figuré pour les cons qui auront pas compris ) la rentrée de la fonction lulz.

printf("Numéro d'identification du programme (PID) ");
scanf("%d",&hPID);

hReadp = lulz(PROCESS_QUERY_INFORMATION | 
PROCESS_VM_READ,FALSE, hPID); // La fonction lulz se chargera d'ouvrir note programme.

if(NULL != hReadp)
{

int ret = ReadProcessMemory(hReadp,(LPCVOID)0x400000, &buf, 
bufsize,NULL);

 if(ret<=0)

 {
  printf("échecbr0 %d\n",GetLastError());
 }

  if(ret>0)
  {


   for(int e=0;e<=sizeof(buf);e++)
   printf("%c",buf[e]);    // Le coup de maestro, on echo notre résultat magique. Le tour est joué.
  }
}

CloseHandle(hReadp); 
}
Le code étant relativement simple, je n'ai pris le temps que de commenter les lignes les plus cruciales.

 

 
Cordialement,
Hey hey

Share this post


Link to post
Share on other sites

le but du programme est surtout une dérision pour le c/c++ pour t'aider a développer ex:.. un programme pour récupérer la musique de deezer ... la musique de spotify ... récupérer les fichier de certain jeux ... cracker une application ....

donc très utile !!

Share this post


Link to post
Share on other sites

Je déterre ce post au risque de prendre un avertissement, mais je me doit de rétablir la vérité : Ce code est dégueulasse !

 

#include 
#include 
#include 


int		main()
{
int    ret;
int    i;
char   *buf;
DWORD  hPID; // PID (Processus ID)
HANDLE hReadp;

i = hPID = 0;
printf("Numéro d'identification du programme (PID) ");
scanf("%d",&hPID);
if ((buf = malloc(sizeof(char *) * 24000 + 1)) == NULL)	// Allocation de la taille mémoire à la chaine buf
	return (-1);
hReadp = lulz(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE, hPID); // Prend le return de la fonction lulz()

if (hReadp != NULL)
{
	if (ret = ReadProcessMemory(hReadp,(LPCVOID)0x400000, &buf, sizeof(buf), NULL)) <= 0)
	{
		printf("Erreur : Can't Read Process Memory\n");
		return (-1);
	}
	else
	{
		while (i <= sizeof(buff))
			printf("%c", buf[i++]);
	}
}
CloseHandle(hReadp);
return (0);
}

 

Voilà qui est plus propre, il n'a pas été testé mais bon c'est déjà mieux de partir avec de bonnes syntaxes et bases

  • Like 1

Share this post


Link to post
Share on other sites

Normal, déjà il y a une erreur que j'ai glissé dedans exprès (un rapport avec le buffer) et ensuite le code de base je ne l'ai pas testé (J'ai d'autres choses à faire quand même ^^)

Share this post


Link to post
Share on other sites

Je déterre ce sujet une fois de plus car inclure directement windows.h est une mauvaise pratique, il serait plus judicieux d'utiliser une macro pour rentre le code portatif (osx, linux, windaube):

 

#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__)
 #include 
#else
 #include  /* Linux et OSX utilisent le même header */
#endif

 

Utiliser le C c'est bien, le rendre cross-plateform c'est mieux ;)

Share this post


Link to post
Share on other sites

Ouais mais ça n a aucun intérêt de mettre les header Unix dans un code qui utilise des fonctions de l API Windows...

ReadProcessMemory, les HANDLE c'est des trucs specifiques a Windows. Ça sera jamais cross platform.

 

Je suis d'accord qu'il vaut mieux mettre des ifdef, mais dans le cas présent, c'est inutile et ca donne du boulot inutile au préprocesseur (même si ça pour le coup c'est complètement négligeable)

Share this post


Link to post
Share on other sites
Sign in to follow this