[Tutorial] Pixelfunktionen

04/06/2009 10:42 buFFy!#1

Also, wie der Name schon sagt werde ich in diesem Tutorial ausführlich die
Pixelfunktionen und den Umgang mit Memoriewerten erläutern, da ja einige
Leute große Schwierigkeiten damit haben, außerdem erhoffe ich mir damit weniger
gebannte accounts durch simple Send-Bots :eek:

Was braucht ihr um dieses Tutorial zu verstehen?

-Grundkenntnisse in AutoIT
-Deutsch
-Gesunden Menschenverstand

Gliederung

Code:

-Pixelsearch
-PixelGetColor

-Was sind Memories?
-Wie finde ich diese heraus?
-Wie benutze ich meine gefundenen Memories?
PixelSearch

Nun, dann fangen wir mal mit der Funktion "PixelSearch" an.
PixelSearch kann man für viele Sachen verwendet, auf dem komplizierten Weg für Wayouts,
oder mal nicht auf Guild Wars bezogen, z.B. einen Aimbot für "RapidFire2" :)

Wenn wir in der AutoIT-Hilfe nachschlagen sehen wir

Code:
PixelSearch ( left, top, right, bottom, color [, shade-variation [, step [, hwnd]]] )
Die Parameter der PixelSearch - Hier mal auf deutsch.

Code:
left = x1 [ x Koordinate der oberen linken Ecke ]
top  = y1 [ y Koordinate der oberen linken Ecke ]
right = x2 [ x Koordinate der unteren rechten Ecke ]
bottom = y2 [ x Koordinate der unteren rechten Ecke ]
[Only registered and activated users can see links. Click Here To Register...]
Code:
color = Farbe [Die Farbe nach der gesucht werden soll]
shadevariation = Farben Variation [ Unterschied der Farbtöne ]
step = Anzahl der zu überspringenden Pixel beim suchen
hwnd = Handle vom Fenster, meiner meinung nach Sinnlos weil das im Hintergrund trotzdem nicht läuft
Also, wie sollen wir diese PixelSearch nun benutzen?
Ist garnicht so schwer..
Wir erstellen uns ein neues *.au3 Skript, dieses nennen wir mal "AimBot"
Dieses können wir vorerst schließen oder minimieren, jetzt öffnen wir Windows Paint.
Ich gehe mal davon aus das das jeder hat.
jetzt nehmen wir die Sprühpistole und machen in verschiedenen Farben ausgemalte Punkte ins Bild.
Jetzt speichern wir das Bild unter "Farbe.jpg".

Bei mir sieht das ganze so aus.

[Only registered and activated users can see links. Click Here To Register...]

Nun gehen wir zurück ins Au3 Skript und erstellen uns ein simples GUI
mit Buttons, diesen Buttons weisen wir jeweils einen Namen der erstellen Farbe aus dem Bild zu, vielleicht dem Button noch ne Farbe geben. Bei mir sieht das ganze so aus:

[Only registered and activated users can see links. Click Here To Register...]

Im Skript machen wir die Includes nach ganz oben.. dies müsste dann so aussehen - nachdem wir Nomad noch hinzugefügt haben

PHP Code:
;-Dateien mit einbeziehen
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
#include-once 
Die NomadMemory.au3 gibt es hier: [Only registered and activated users can see links. Click Here To Register...]

Nun legen wir uns einen HotKey zum beenden.

PHP Code:
;-Hotkeys Belegen
HotKeySet
("{End}""Ende")

;-
Ende
Func Ende
()
    Exit
EndFunc   ;==>Ende 
Jetzt suchen wir auf unserem Bild nach den Farben, ebenfalls mit der WindowInfo. Diese schreiben wir dann als Variablen in unser Skript.

PHP Code:
;-Farben
$gruen 
0x1DB350
$blau 
0x10AFF1
$violet 
0x723091
$grau 
0xDCDCDC
$rot 
0xEC201F
$orange 
0xFFBB17
$schwarz 
0x464646
$rosa 
0xFF9CB8 
Als nächstes müssen wir die Koordinaten unseres Bildes herausfinden.
Dazu öffnen wir es, und schauen mit der WindowInfo nach wo sich diese befinden und schreiben sie in unser Skript. Sieht bei mir wie folgt aus:

PHP Code:
;-Koordinaten
$x1 
418
$y1 
173
$x2 
1020
$y2 
671 
Nun kommen wir zur Hauptfunktion in dem Skript.
Diese soll die Parameter "Farbe" und "shade" haben.
Außerdem wissen wir das die Funktion mit der Maus zielen soll,
Also nennen wir sie einfach mal "AimTo"

PHP Code:
Func AimTo($Farbe$shade
Als erstes suchen wir nach dem Pixel der jeweiligen Farbe.
Dadurch das wir uns soviele Variablen deklariert haben, haben wir nun
den Vorteil das wir die Pixelsearch mit ihren eigenen Parametern angeben können. Nicht vergessen ihr eine Variable zuzuweisen, sonst wirds nix mit der Fehleranalyse :)

PHP Code:
Func AimTo($Farbe$shade)
    
$PS PixelSearch($x1$y1$x2$y2$Farbe$shade
Nun müssen wir prüfen ob bei der PixelSuche ein Pixel gefunden wurde,
Dies kann man auf mehrere wegen lösen, entweder mit (@error), oder aber mit IsArray. In diesem Fall werde ich es mit IsArray machen.

PHP Code:
Func AimTo($Farbe$shade)
    
$PS PixelSearch($x1$y1$x2$y2$Farbe$shade)
    If 
IsArray($PS) = 1 Then 
Dies sagt uns also.. Wenn $PS True ist, dann...
Nun also das was kommt.

Wenn wir in der AutoIT Hilfe nachgucken, sehen wir den Rückgabewert von PixelSearch.

Code:
Return Value

Success: Returns a two-element array of pixel's coordinates. (Array[0] = x, Array[1] = y) 
Failure: Sets @error to 1 if color is not found.
Das heißt, das wenn wir den Pixel gefunden haben, ein Array [0] & [1] bekommen.
Also:

PHP Code:
Func AimTo($Farbe$shade)
    
$PS PixelSearch($x1$y1$x2$y2$Farbe$shade)
    If 
IsArray($PS) = 1 Then
        MouseMove
($PS[0], $PS[1])
    EndIf
EndFunc 
Also ist unsere Funktion fertig.
Wir wollen, das wenn wir unser Skript starten, sich gleichzeitig das Bild öffnet..

ShellExecute ist hier die Lösung

PHP Code:
ShellExecute("Farbe.jpg"
Unser Skript sieht also bisher wie folgt aus.

Code:
;-Dateien mit einbeziehen
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
#include-once

;-Hotkeys Belegen
HotKeySet("{End}", "Ende")

;-Farben
$gruen = 0x1DB350
$blau = 0x10AFF1
$violet = 0x723091
$grau = 0xDCDCDC
$rot = 0xEC201F
$orange = 0xFFBB17
$schwarz = 0x464646
$rosa = 0xFF9CB8

;-Koordinaten
$x1 = 418
$y1 = 173
$x2 = 1020
$y2 = 671

;-Ende
Func Ende()
	Exit
EndFunc   ;==>Ende

Func AimTo($Farbe, $shade)
	$PS = PixelSearch($x1, $y1, $x2, $y2, $Farbe, $shade)
	If IsArray($PS) = 1 Then
		MouseMove($PS[0], $PS[1])
	EndIf
EndFunc

ShellExecute("Farbe.jpg")
Jetzt kopieren/Verschieben wir unseren GUI nach das ShellExecute.
Je nachdem wie ihr euren GUI genannt habt, ein WinActivate dahinter.. dann ists nachher nur halb-so-nervig :)

Code:
WinActivate("Farben Aimbot [eF_Hacks] Copyright 2009")
Nun die Schleife die unseren GUI sichtbar macht, und gleichzeitig Funktionen zuweißt.
Ich denke das ist selbsterklärend

PHP Code:
While 1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$BlauButton
            AimTo
($blau2)
        Case 
$RosaButton
            AimTo
($rosa2)
        Case 
$VioletButton
            AimTo
($violet2)
        Case 
$OrangeButton
            AimTo
($orange2)
        Case 
$GrauButton
            AimTo
($grau2)
        Case 
$SchwarzButton
            AimTo
($schwarz2)
        Case 
$GruenButton
            AimTo
($gruen2)
        Case 
$RotButton
            AimTo
($rot2)
    EndSwitch
WEnd 
Der gesamte Code sieht nun wie folgt aus:
PHP Code:
;-Dateien mit einbeziehen
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
#include-once

;-Hotkeys Belegen
HotKeySet
("{End}""Ende")

;-
Farben
$gruen 
0x1DB350
$blau 
0x10AFF1
$violet 
0x723091
$grau 
0xDCDCDC
$rot 
0xEC201F
$orange 
0xFFBB17
$schwarz 
0x464646
$rosa 
0xFF9CB8

;-Koordinaten
$x1 
418
$y1 
173
$x2 
1020
$y2 
671

;-Ende
Func Ende
()
    Exit
EndFunc   ;==>Ende

Func AimTo
($Farbe$shade)
    
$PS PixelSearch($x1$y1$x2$y2$Farbe$shade)
    If 
IsArray($PS) = 1 Then
        MouseMove
($PS[0], $PS[1])
    EndIf
EndFunc

ShellExecute
("Farbe.jpg")

;-
Graphical User Interface
#Region ### START Koda GUI section ### Form=
$Form1 GUICreate("Farben Aimbot [eF_Hacks] Copyright 2009"136310261205)
GUISetBkColor(0x99B4D1)
$Group1 GUICtrlCreateGroup("Farben"88113289)
$BlauButton GUICtrlCreateButton("Blau"243275250)
GUICtrlSetBkColor(-10xA6CAF0)
$RotButton GUICtrlCreateButton("Rot"246475250)
GUICtrlSetBkColor(-10xFF0000)
$SchwarzButton GUICtrlCreateButton("Schwarz"249675250)
GUICtrlSetColor(-10xFFFFFF)
GUICtrlSetBkColor(-10x000000)
$RosaButton GUICtrlCreateButton("Rosa"2412875250)
GUICtrlSetBkColor(-10xFF00FF)
$GruenButton GUICtrlCreateButton("Grün"2416075250)
GUICtrlSetBkColor(-10x008000)
$GrauButton GUICtrlCreateButton("Grau"2419275250)
GUICtrlSetBkColor(-10xA0A0A4)
$OrangeButton GUICtrlCreateButton("Orange"2425675250)
$VioletButton GUICtrlCreateButton("Violet"2422475250)
GUICtrlSetBkColor(-10x800080)
GUICtrlCreateGroup("", -99, -9911)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

WinActivate("Farben Aimbot [eF_Hacks] Copyright 2009")

While 
1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$BlauButton
            AimTo
($blau2)
        Case 
$RosaButton
            AimTo
($rosa2)
        Case 
$VioletButton
            AimTo
($violet2)
        Case 
$OrangeButton
            AimTo
($orange2)
        Case 
$GrauButton
            AimTo
($grau2)
        Case 
$SchwarzButton
            AimTo
($schwarz2)
        Case 
$GruenButton
            AimTo
($gruen2)
        Case 
$RotButton
            AimTo
($rot2)
    EndSwitch
WEnd 
Wenn ihr das nun startet, sollte euer Mauszeiger auf die jeweile Farbe im Bild gehen, sofern sie gefunden wurde und ihr auf einen Button gedrückt habt.

Unten hänge ich mal meine Dateien ran.

PixelGetColor

Also, Wir sind jetzt bei PixelGetColor angekommen.
Meiner Meinung nach lässt sich PixelGetColor nur schwer auf GuildWars anwenden, kann aber
Bei anderen Dingen nützlich sein.. (fragt bitte nicht bei welchen ;))

Nun, wir gucken als erstes in unsere über alles geliebte AutoIT Hilfe.
Hier sehen wir:

Code:
PixelGetColor ( x , y [, hwnd] )
Also.. auf Deutsch:

Code:
x = X Koordinate vom Pixel
y = Y Koordinate vom Pixel
hwnd = WinGetHandle => Koordinaten werden relativ zum "hwnd" genommen. Also der Fenstername
Also, wir wollen mal versuchen mit PixelGetColor (ab jetzt nurnoch PGC) die Farbe eines Fenster's herauszufinden.

Dazu erstellen wir uns ein neues Skript, dieses nennen wir "PixelGetColor.au3".
Anfangen tun wir wieder mit den Include Datein.

PHP Code:
;-Dateien mit einbeziehen
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include-once 
Jetzt erstellen wir uns ein GUI, was nach Zufall eine Farbe auswählt, Farben sind in diesem Fall "Blau" und "Rot".

PHP Code:
;-Zufallszahl (1 oder 2)
$rnd Random(121)

;-
Gui1
#Region ### START Koda GUI section ### Form=
$GUI GUICreate("Farbe"1099300)
If 
$rnd 1 Then
    GUISetBkColor
(0x800000)
Else
    
GUISetBkColor(0x99B4D1)
EndIf
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ### 
Dann den 2. Gui, dieser enthält einen einfachen Button der nachher unsere Funktion aufrufen soll.

PHP Code:
;-Gui2
#Region ### START Koda GUI section ### Form=
$Form1 GUICreate("Start"15481193125)
GUISetBkColor(0x99B4D1)
$Group1 GUICtrlCreateGroup(""8813765)
$PGC GUICtrlCreateButton("PGC"403275250)
GUICtrlCreateGroup("", -99, -9911)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ### 
Jetzt suchen wir uns mal die Farben raus.. in diesem Fall brauchen wir nichtmal die WindowInfo, da unsere Farben ja schon im GUI stehen.. also:

PHP Code:
;-Farben
$Blau 
0x99B4D1
$Rot  
0x800000 
Nun kommen wir zum wichtigesten Teil.
Unserer Funktion.

Wir wissen das PixelGetColor die Parameter x und y benötigt
Und wir wollen mit unserer Funktion die Farbe überprüfen.
Also nennen wir sie FarbCheck, und geben ihr die Parameter x und y.

PHP Code:
Func _FarbCheck($x$y
Als nächstes deklarieren wir uns eine Variable, welche für uns eine PixelSuche auf
X/Y durchführt.

PHP Code:
Func _FarbCheck($x$y)
    
$PGC PixelGetColor($x$y
Wenn wir in der AutoIT Hilfe gucken sehen wir den Return Wert von PGC.

Code:
Success: Returns decimal value of pixel's color. 
Failure: Returns -1 if invalid coordinates.
Also bekommen wir die Farbe als dezimalwert als Return-Wert.

Nun müssen wir mit einem If oder Select-Statement ansetzen.
Ich nehme mal If (ich gehe davon aus das ihr damit erfahrung habt)
Also.

Wenn $PGC = Blau Dann...
Wenn $PGC = Rot Dann...
Wenn nix davon Dann...

PHP Code:
;-Unsere Funktion
Func _FarbCheck
($x$y)
    
$PGC PixelGetColor($x$y)
    If 
$PGC $Blau Then
        MsgBox
(0x40"Blau""Das Blaue Fenster hat sich geöffnet")
    ElseIf 
$PGC $Rot Then
        MsgBox
(0x40"Rot""Das Rote Fenster hat sich geöffnet")
    Else
        
MsgBox(0x10"Keine Ahnung""Keine Ahnung was da ist, aber eines der beiden Fenster ist es nicht")
    EndIf
EndFunc 
Nun noch die Schleife die unseren GUI sichtbar und wirksam macht:

PHP Code:
While 1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$PGC
            _FarbCheck
(41,41)
    EndSwitch
WEnd 
Code sollte jetzt so aussehen:

Code:
;-Dateien mit einbeziehen
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include-once

;-Farben
$Blau = 0x99B4D1
$Rot  = 0x800000

;-Unsere Funktion
Func _FarbCheck($x, $y)
	$PGC = PixelGetColor($x, $y)
	If $PGC = $Blau Then
		MsgBox(0x40, "Blau", "Das Blaue Fenster hat sich geöffnet")
	ElseIf $PGC = $Rot Then
		MsgBox(0x40, "Rot", "Das Rote Fenster hat sich geöffnet")
	Else
		MsgBox(0x10, "Keine Ahnung", "Keine Ahnung was da ist, aber eines der beiden Fenster ist es nicht")
	EndIf
EndFunc

;-Zufallszahl (1 oder 2)
$rnd = Random(1, 2, 1)

;-Gui1
#Region ### START Koda GUI section ### Form=
$GUI = GUICreate("Farbe", 109, 93, 0, 0)
If $rnd = 1 Then
	GUISetBkColor(0x800000)
Else
	GUISetBkColor(0x99B4D1)
EndIf
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

;-Gui2
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Start", 154, 81, 193, 125)
GUISetBkColor(0x99B4D1)
$Group1 = GUICtrlCreateGroup("", 8, 8, 137, 65)
$PGC = GUICtrlCreateButton("PGC", 40, 32, 75, 25, 0)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $PGC
			_FarbCheck(41,41)
	EndSwitch
WEnd
Gut, wenn wir das jetzt ausführen sollte je nach $rnd(1,2,1) ein Blaues oder Rotes fenster auf 0/0 erscheinen. Wenn wir jetzt auf PGC drücken, dann bekommen wir eine MsgBox mit der Farbe des Fensters.

Dateien sind mit unten dran.

Weitere Funktionen folgen. :eek:
04/06/2009 10:50 Frutex#2
Nettes Tut ich denke das wir vielen helfen..
04/06/2009 10:53 NBA#3
Nettes tut, jedoch sollest auch du in die richtige section posten...
04/06/2009 10:58 buFFy!#4
Quote:
Originally Posted by NBA View Post
Nettes tut, jedoch sollest auch du in die richtige section posten...
Ja sorry, ich wusste nicht in welche Sektion.

Kann das ein Admin moven?
04/06/2009 11:57 Jacob_G#5
Gut beschrieben. Jetzt sollte jeder Einzeller das verstehen.
Noch eine kleine Verbesserung ist:
If IsArray($PS) = 1 Then
zu
If IsArray($PS) Then
Dadurch wird es noch minimal schneller, man glaubt es nicht, ist aber so ;).
04/06/2009 13:59 buFFy!#6
PixelGetColor ist jetzt mit drin :)
04/06/2009 17:51 bommelbongo#7
freu mich auf den teil mit den meemories dann werde ich nochmal einen grund haben mich mit autoit auseinander zusetzten
04/06/2009 18:35 | Moep |#8
Quote:
Originally Posted by bommelbongo View Post
freu mich auf den teil mit den meemories dann werde ich nochmal einen grund haben mich mit autoit auseinander zusetzten
Jenen Membern, welchen die Nutzung der Suche Funktion weiterhin verwehrt ist,
bietet sich vielleicht bald die Möglichkeit der Lösung,
über die Beschaffenheit von Memories näher zu kommen.

Viele tapfere Helden haben sich bereits diesem Mysterium gestellt.
Jedoch sind alle ihre Berichte erst auf Seite 2
und den darauf folgenden Seiten zu verzeichnet.

Somit ist dieses Wissen für viele Member unerreichbar
und in den unendlichen Tiefen des E*pvp Forums verschollen...
04/06/2009 18:49 S T A Y L A#9
Sehr schönenes leicht zuverstehendes Tut, hatt mir sehr geholfen...

So kann man teoretisch auch AimBots für Ego Shooter proggen oder?

5* von mir !
04/06/2009 18:52 __wadim#10
aber solch pixelaimbots sind total unzuverlässig/zu langsam, etc... für ego shooter.
04/06/2009 18:53 buFFy!#11
Quote:
Originally Posted by S T A Y L A View Post
Sehr schönenes leicht zuverstehendes Tut, hatt mir sehr geholfen...

So kann man teoretisch auch AimBots für Ego Shooter proggen oder?

5* von mir !
Ich habe überlegt ob ich dazu schreibe das das NICHT
geht, probiert hab ichs als ich mit nem dx hook simple chams (rot) gemacht habe, so also die gegner rot waren. dann hab ich mit pixelsearch gesucht.. hat soweit funktioniert - dein character schießt in den himmel.

E:

Quote:
Originally Posted by __wadim View Post
aber solch pixelaimbots sind total unzuverlässig/zu langsam, etc... für ego shooter.
In den Spielen wo ich es getestet habe (AAO, CS:S, Unreal Tournament) hat es nicht funktioniert.
04/06/2009 19:51 Hokler#12
als in css hab ich es hinbekommen über PixelSearch einen aimbot zumachen =) er ist aber sehr auffällig weil er andauernd rumwackelt und so =(

b2t: sehr schönes tut =)
04/06/2009 20:17 buFFy!#13
Quote:
Originally Posted by Hokler View Post
als in css hab ich es hinbekommen über PixelSearch einen aimbot zumachen =) er ist aber sehr auffällig weil er andauernd rumwackelt und so =(

b2t: sehr schönes tut =)
Gut, dann nehme ich meine Aussage zurück, habe mich nicht großartig damit beschäftigt. :D

€: Habs hinbekommen.. der Mausclick wars ;D
04/08/2009 14:42 NANAAA#14
wie siehts mit dem Memory Tutorial aus ? wolltest doch mal was machen :P
04/08/2009 15:07 buFFy!#15
Kommt noch, aber ich bin gerade bei meinem Vater.
Nichtmal au3 auf dem PC, geduldet euch noch ein wenig :)