Le Color Aimbot pour les débutants

    Publicités

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

lascars

Membre
Sep 5, 2010
62
0
426
I. Préambule/Licence

Ce tutoriel est sous licence CC-by-sa disponible : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!

Vous êtes donc libre :

  • de partager — reproduire, distribuer et communiquer l’œuvre
  • de remixer — modifier l’œuvre
  • d’utiliser cette œuvre à des fins commerciales
Selon les conditions suivantes :

Paternité — Vous devez attribuer l’œuvre de la manière indiquée par l’auteur de l’œuvre ou le titulaire des droits (mais pas d’une manière qui suggérerait qu’ils vous soutiennent ou approuvent votre utilisation de l’œuvre).
Partage à l’Identique — Si vous modifiez, transformez ou adaptez cette œuvre, vous n’avez le droit de distribuer votre création que sous un contrat identique ou similaire à celui-ci.

II. Introduction

Bonjours, dans ce tutoriel, nous allons voir comment créer un « color aimbot ». Il est à but universel, c’est à dire qu’il peut être adapté facilement pour de nombreux jeux, des programmes extérieurs, des macros, tout ce qui vous passe par la tête … Moi, je l’ai codé pour une sorte de Guitare Hero, puis je l’ai adapté pour pleins d’autres choses. Il faut savoir que ce système est relativement lent et vachement gourmand.

Plusieurs pré-requis sont nécessaire pour suivre ce tutoriel qui ne seront pas abordés ici :

  • Savoir programmer dans un langage
  • Avoir des connaissances (basiques) sur l’API Windows
  • Pour approfondir : Avoir des connaissances (avancées) sur l’API Windows
  • Pour approfondir : Savoir utiliser des threads
Pour cela, nous allons utiliser plusieurs techniques :

  • Récupérer la couleur d’un pixel sur l’écran.
  • Modifier la position de la souris

III. Préparer le programme ciblé

Avant tout, il est nécessaire de préparer le programme sur lequel on va chercher à mettre notre Aimbot.
Dans la plupart des programmes, à l’aide d’une impression écran, on peut obtenir la couleur des pixels que l’on recherche, ces pixels vont toujours garder exactement la même couleur.
Dans certains jeux (Par exemple Counter Strike : Source, ou n’importe quel FPS), on ne peut pas chercher de cette manière : la couleur change si l’objet est à la lumière ou à l’ombre, il va falloir mettre un Skin sur la cible pour qu’elle ait une couleur bien spécifique (de préférence un bon gros vert, rouge ou bleu qui sont rarement observable dans le jeu).
Exemple pour Counter Strike : Source : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!

IV. Mais comment scanner les pixels ?

Hé oui, il existe plusieurs manière de scanner, enfin, j’entends par la plusieurs manière de choisir quel pixel on scanne, dans quel ordre on va scanner les pixels.

La bourrin:

On scanne les pixels en partant de celui tout en haut à droite jusqu’à celui tout en bas à gauche. C’est lent en pratique, mais vachement facile à coder.
C’est surement la première méthode à laquelle on pense, c’est la meilleure pour certains softs statiques :

bourin.png


La FPS:

fps.png


On part du point au centre de l’écran, puis on scanne tous les pixels autour du point au centre. C’est un poil plus dur à coder, puisqu’il faut faire tourner le sens de scan.
Cette technique est bien pour les FPS, puisque la cible à tendance à se placer au centre de l’écran, sur le viseur, si on veut la tuer, mais elle va demander un mouvement particulier de la souris (qui doit partir du centre et pas trop bouger pour pas faire un 180°) :

La tracking :

Le point se déplace, donc on va chercher autour du dernier point détecté afin de trouver vers où il s’est déplacé (à la manière du FPS). Si l’on ne trouve rien, on peut repartir vers un scanner classique.
Cette technique est la plus compliquée à appliquer, puisque elle nécessite un mélange de toutes les techniques précédentes.

V. Couleur exacte ou approchée ?

On peut comparer les couleurs de plusieurs manières :

La manière exacte :

Si la couleur ne change pas, c’est le mieux.
On compare les taux de couleur RGB du pixel, à la valeur de référence, si c’est le même on a gagné, sinon, on continue.

La manière approchée :

On prend le taux de couleur RGB du pixel, si il est proche de la valeur de référence, on a gagné, sinon, on continue à scanner :
On récupère le taux de rouge, et s’il est dans une certaine fourchette de valeur, on continue, de même pour le vert et le bleu.

VI. Scanner

La fonction que l’on va utiliser est la suivante (MSDN powa) :

COLORREF GetPixel(
__in HDC hdc, //Pour HandleDeviceContext
__in int nXPos,//Position en X
__in int nYPos //Position en Y
);

La fonction renvoie un COLORREF qui contiendra des infos RGB sur notre pixel.
Pour la petite info : Le COLORREF est un double word (32 bits) de type 0x 00 bb vv rr
Le byte de poids fort (à gauche) sont toujours 0×00 (en théorie, mais nous, on va pas respecter cela). Les autres bytes de poids plus faible sont compris entre 0×00 (0) et 0xFF (255) et correspondent au taux de rouge, vert et bleu. Bref, tout le monde s’en fout sauf moi.
La fonction prends en entré un HandleDeviceContext, je passe l’explication théorique : c’est un identifiant nécessaire pour pouvoir dessiner sur windows. Le mieux est de prendre celui de votre fenêtre mais GetDC(NULL) ou GetDC(HWND_DESKTOP) marche pour la grande majorité des cas.

Sum up :

HDC hdc = GetDC(HWND_DESKTOP);
COLORREF pixel;
pixel = GetPixel(hdc, 100, 125);

Bon, c’est bien beau ça, mais on veux les 3 scanners :

Le brutal est le plus facile : Une double boucle :



Code:
 Int x, y;
for (int x = 0; x < 1024; x++)
{
  for (int y = 0; y < 768; y++)
  {
    Pixel = GetPixel(hdc, x, y);
    //La suite ICI
  }
}
1024 et 768 sont la résolution de l’écran, mais vous pouvez l’adapter.
(0,0) est le point départ du scan : à adapter en fonction des besoins.

La FPS est déjà un poil plus dur :

Il va falloir stocker dans quel sens on se déplace pour scanner (on tourne), et de combien de pixel il faut continuer de scanner dans la même direction.
Une petite phase d’algo, une !

Code:
 int pToScan=0, pStill=0;
char sens=0;
int curPosX=384,curPosY=512;
bool b=0;
while(pToScan <=1024)
{
  for(pStill=0; pStill 0 && curPosX0 && curPosY<1024)
    {
      pixel = GetPixel(hdc, curPosX, curPosY);
      //La suite ICI
    }
  }
  sens++;
  pStill = 0;
  if(b)
  {
    pToScan++;
    b= !b;
  }
}
Et enfin la tracking :

C’est une repris du précédent en changeant le centre :

Code:
 //hors de la boucle principale : int lastPosX=512, lastPosY=384;
 
int pToScan=0, pStill=0;
char sens=0;
int curPosX=lastPosX,curPosY=lastPosY;
 
bool b=0;
while(pToScan <=1024)
{
  for(pStill=0; pStill 0 && 0 && curPosY<768)
  {
    pixel = GetPixel(hdc, curPosX, curPosY);
    lastPosX=curPosX;
    lastPosY=curPosY;
    //La suite ICI
  }
}
pStill = 0;
sens++;
if(b)
{
  pToScan++;
  b= !b;
}
//merde, on a rien trouvé, on peut repasser en scan normal, ou mettre le dernier point vu au milieu.
if(pixel==0xFF000000)
{
  lastPosX=curPosX;
  lastPosY=curPosY;
  /*
  int x, y;
  for (int x = 0; x < 1024; x++)
  {
    for (int y = 0; y < 768; y++)
    {
      pixel = GetPixel(hdc, x, y);
      lastPosX=curPosX;
      lastPosY=curPosY;
      //La suite ICI
    }
  }
 */
 pixel=0xFF000000;
}
Pixel = 0xFF000000 : Ce cas est IMPOSSIBLE si l’on essaye de récupérer la couleur d’un pixel (voir plus haut), c’est pourquoi on l’utilise pour vérifier si on a trouvé quelque chose, ou pas.

VII. Comparer la couleur

Méthode exacte :

Code:
if(pixel ==(rgb( 255,0,100)) //Taux de rouge(255), de vert(0) et de bleu(100) dans l’ordre
Mais la méthode plus intéressante est la suivante.

Utiliser une plage de valeur de comparaison :

On récupère le taux de Rouge, de vert et de bleu et on les compare : Dans le cas où on veut isoler un objet rouge.

Code:
int rouge = GetRValue(pixel), vert = GetGValue(pixel), bleu = GetBValue(pixel);
if(rouge > 240 && (vert + bleu) < 120) //j’ai fait une somme, mais vous pouvez faire comme vous voulez
{
//La suite ICI
}
VIII. Téléportation

Maintenant, on déplace le curseur, c’est mieux pour faire un aimbot :
en C++ c’est tout con, mais après, ça dépend du langage choisi :

Code:
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN,x,y,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,x,y,0,0);
Attention, cette technique est dès fois impossible si le jeu possède des protections, il faut alors directement envoyer l’évènement à l’API windows à l’aide de « SendInput() ».

IX. Conclusion
Et bien, ce n’était pas compliqué. Tout le monde va pouvoir faire du 100% sur Guitare Hero maintenant. Maintenant, à vous de l'adapter pour les jeux que vous utilisez ;)
 

Cyrion

._.
V
Ancien staff
Jul 8, 2010
2,524
2
944
www.bufferoverflow.fr
Juste une remarque , dans la partie Téléportation , les mouse_event n'ont pas besoin des arguments x,y car tu as déjà positionner le curseur , il vaut mieux les remplacé par des 0 , pour qu'il fasse simplement un clic gauche.
 

lascars

Membre
Sep 5, 2010
62
0
426
Non, justement, le curseur de la souris n'a pas bougé, seul le curseur de scan ( curseur imaginaire biensûr ) a bougé. Et dès que le scan est concluant ( couleur que l'on veut trouvé ) , on déplace le curseur de la souris sur le pixel en question.
 

lascars

Membre
Sep 5, 2010
62
0
426
Après test, la fonction mouse_event() a bien besoin des arguments x,y pour fonctionner. Parce que je ne vois pas où dans mon code, avant cette ligne, je déplace mon curseur ... Je ne le déplace pas avant, c'est le curseur du scan que je fait varier afin de trouver le pixel avec la bonne plage de couleur.
 

Cyrion

._.
V
Ancien staff
Jul 8, 2010
2,524
2
944
www.bufferoverflow.fr
SetCursorPos bouge la souris à l'endroit voulu , le mouse_event ne fait qu’effectué le clic.

Nul besoin de spécifié la position dans le mouse_event.
 

lascars

Membre
Sep 5, 2010
62
0
426
Il est préférable de les passer en paramètre, ne serait-ce qu'au cas ou le curseur aurait bougé entre temps ( utilisateur ou autre ).
 

plottee

Membre Banni
Sep 23, 2012
7
0
201
37
Bonjour quand j'ai des erreurs de compilation avec ce code

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{

COLORREF GetPixel(
_In_ HDC hdc,
_In_ int nXPos,
_In_ int nYPos
);
return 0;
}



|In function 'int main()':|
|10|error: '_In_' was not declared in this scope|
|11|error: expected ')' before 'int'|
|12|error: expected ')' before 'int'|
|error: expression list treated as compound expression in initializer [-fpermissive]|
||=== Build finished: 4 errors, 0 warnings (0 minutes, 0 seconds) ===|
 

plottee

Membre Banni
Sep 23, 2012
7
0
201
37
A ok merci je n'avai pas comprit que sa faisait partit de la description x)

---------- Message ajouté à 21h28 ---------- Le message précédent était à 16h55 ----------

re bonjour désoler de encore vous dérangez mais je n'ai aucune erreur de compilation mais le programme cesse de fonctionner a cette ligner:pixel = GetPixel(hdc, x, y);

Code source complet:
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
system("title Aimbot");
COLORREF GetPixel(
HDC hdc, //Pour HandleDeviceContext
int nXPos,//Position en X
int nYPos //Position en Y
);


HDC hdc = GetDC(HWND_DESKTOP);
COLORREF pixel;
pixel = GetPixel(hdc, 100, 125);
int condition = 1;

int x, y;
while (condition == 1)
{
for (int x = 0; x < 1024; x++)
{
for (int y = 0; y < 768; y++)
{
// pixel = GetPixel(hdc, x, y); Crash ici
//La suite ICI
}
}
cout << pixel << endl;
}




return 0;
}
 

plottee

Membre Banni
Sep 23, 2012
7
0
201
37
Esxcuse moi mais apret 3 ans de programmation en c++ je croit connaitre un minimum ce language de plus la fonction fonctionne le compilateur ne me signale rien mais l'appli cesse de fonctionner et puis qui es tu pour juger ?
 

ragnarock

Membre actif
Mar 22, 2010
194
0
917
Esxcuse moi mais apret 3 ans de programmation en c++ je croit connaitre un minimum ce language de plus la fonction fonctionne le compilateur ne me signale rien mais l'appli cesse de fonctionner et puis qui es tu pour juger ?

HAHAHAHAHAAHAHAHAAHAHAH
Désolé, mais tu oses dire que ça fait 3ans que tu programme et tu ne sais même pas comment passer des arguments à une fonction, c'est un peu gros.
S'pèce de troll.
Vas sur le site du zéro si tu veux apprendre les bases, ou google, comme un grand !


Edit: sorry, j'avais que vu
Code:
int main()
{
system("title Aimbot");
COLORREF GetPixel(
HDC hdc, //Pour HandleDeviceContext
int nXPos,//Position en X
int nYPos //Position en Y
);
j'ai pas jugé nécessaire d'aller plus loin.. Pour ton prob', t'as la réponse juste au dessous de mon post.
 
Last edited: