AutoIT Pointer von CE

10/06/2013 18:39 Bubba321#1
Servus epvp,

Ich bin dabei einen Speedhack für Metin2 p-server zu erstellen verzweifle aber :(:confused::confused:
Ich hab mich hier im Forum erkundigt un diesen Code gefunden

Code:
#RequireAdmin
#include-once
SetPrivilege("SeDebugPrivilege", 1)

$pid = WinGetProcess("METIN2")
$openmem = _MemoryOpen($pid)
$baseadress = _MemoryModuleGetBaseAddress($pid,"rub.exe") ;rub.exe ist der Name des starters

;$pid ist der Prozess

    $testoffset1 = "2A8" 
    $testoffset2 = "5BA" 
    $testoffset3 = "003D0A6C"

;hier die offsets + die adresse


Global $AOffset[3]
$AOffset[0] = 0
$AOffset[1] = Dec($testoffset1)
$AOffset[2] = Dec($testoffset2)
$Aaddress = "0x" & Hex($baseadress + Dec($testoffset3))



$Amemread = _MemoryPointerRead($Aaddress, $openmem, $AOffset, "byte[2]")

;memory read funktion welche wir nicht umbedingt brauchen trotzdem möchte ich euch zeigen wie diese angewandt wird. Der wert der daraus kommt ist ein array ;dabei ist [1] der wert den wir brauchen.


$Awert = _ReturnMemoryValue($Amemread[1])
$Awert = Dec($Awert)

;Der ausgelesene Wert ist noch in hex und in der falschen reihenfolge. die Funktion behebt dies.

Func _ReturnMemoryValue($sAdresse)

    $sNewAdresse = ""
    $sAdresse = StringTrimLeft($sAdresse, 2)
    For $i = StringLen($sAdresse) - 1 To 0 Step -2
        $sNewAdresse &= StringMid($sAdresse, $i, 2)
    Next
    Return $sNewAdresse
EndFunc   ;==>_ReturnMemoryValue

;Und hier unten sehen wir, dass er dauerhaft den wert 16256 schreibt.

while 1
 _MemoryPointerWrite($Aaddress, $openmem, $AOffset, "16556", "dword")
wend


das Problem ist er bringt mir immer eine Fehlermeldung.Habe schon gegoogelt aber nichts brauchbares gefunden.

hier mal ein Ausschnitt von den Offsets und den Pointern:
Bild im Anhang !!!!





diese Errors bzw. Fehlermeldungen kommen:

C:\Users\Admin\Desktop\AutoIt v3 Script (neu).au3(3,35) : ERROR: SetPrivilege(): undefined function.
SetPrivilege("SeDebugPrivilege", 1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Users\Admin\Desktop\AutoIt v3 Script (neu).au3(6,28) : ERROR: _MemoryOpen(): undefined function.
$openmem = _MemoryOpen($pid)
~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Users\Admin\Desktop\AutoIt v3 Script (neu).au3(7,57) : ERROR: _MemoryModuleGetBaseAddress(): undefined function.
$baseadress = _MemoryModuleGetBaseAddress($pid,"rub.exe")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~^
C:\Users\Admin\Desktop\AutoIt v3 Script (neu).au3(26,72) : ERROR: _MemoryPointerRead(): undefined function.
$Amemread = _MemoryPointerRead($Aaddress, $openmem, $AOffset, "byte[2]")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~^
C:\Users\Admin\Desktop\AutoIt v3 Script (neu).au3(49,69) : ERROR: _MemoryPointerWrite(): undefined function.
_MemoryPointerWrite($Aaddress, $openmem, $AOffset, "16556", "dword")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~^
C:\Users\Admin\Desktop\AutoIt v3 Script (neu).au3 - 5 error(s), 0 warning(s)

:confused::confused::confused::rolleyes:

Hoffe mir kann das jemand an meinem konkreten Beispiel erklären.
Das ist mein erster Beitrag auf epvp also wenn ich was falsch gemacht habe bitteverbessern:)
Danke im Voraus :D
10/06/2013 18:49 RezChams#2
#moved
10/06/2013 19:11 BladeTiger12#3
Du brauchst Pointer.au3 als Include.

[Only registered and activated users can see links. Click Here To Register...]
10/06/2013 19:28 Logtetsch#4
Code:
#include-once
Ob das gut geht, mag ich zu bezweifeln :rolleyes:
10/06/2013 22:51 Bubba321#5
Erstmal danke für die schnellen Antworten und das moven.
Ich hatte mir auch schon die pointer.au3 heruntergeladen aber hat auch nicht funktioniert. Muss ich die irgendwie in Programm mit einbinden außer #include <pointer.au3> ?
10/06/2013 23:08 alpines#6
Du musst die Pointer.au3 in den Include Ordner von AutoIt packen und das nutzen:
#include <Pointer.au3>

oder ins Verzeichnis wo das Script ist und das benutzen:
#include "Pointer.au3"
10/06/2013 23:20 Sh1Rum#7
Das steht doch nicht bekannte Funktion ..dann sucht man eig. Erstmal die Funktion auch in den Includes ;> Pointer.au3 in Include Ordner und dann oben
Code:
#include<Pointer.au3>
Die Funktionen sind ja in der Pointer.au3 ..also musst du sie mit reinnehmen.
10/07/2013 01:13 BladeTiger12#8
Ich verstehe es trotzdem nicht.
Du bist neu in AutoIt.
Kannst nicht mal Includes einbinden.
Der Code ist gefunden, kennst davon kein Stück....
Wie willst du denn bitte ein Speedhack schreiben ohne kenntnisse
wie das Abläuft u.s.w.

B.z.w wie kommst du darauf das AutoIt einfach so bei Metin2
Werte in der Memory ändern kann o.o?
10/07/2013 01:23 c0w#9
warum sollte autoit das nicht können? :O
10/07/2013 01:37 BladeTiger12#10
Habe es schonmal bei Metin2 mit AutoIt probiert.
Irgendwie ging das garnicht.
Metin2 wollte einfach nicht die Werte verändern o.o.

Das einzigste was geklappt hat war dann eine c++ Dll in .mix
umbenennen und in den Metin2 Ordner zulegen. Das hat dann geklappt.
10/07/2013 01:53 c0w#11
hackshield? da würds dir mit anderen sprachen aber wahrscheinlich ähnlich gehen
10/07/2013 09:51 Bubba321#12
Danke , ich hatte vorher schon #include <Pointer.au3> da stehen und es hat nicht funktioniert , für alle die meinen ich kenne den include nicht. Ich wussste nur nicht, dass man die pointer Datei auch in den Ordner kopieren muss. :) Danke sehr hilfreich

Danke , ich hatte vorher schon #include <Pointer.au3> da stehen und es hat nicht funktioniert , für alle die meinen ich kenne den include nicht. Ich wussste nur nicht, dass man die pointer Datei auch in den Ordner kopieren muss. Danke sehr hilfreich.

Funktioniert aber leider immer noch nicht :(

$baseadress = _MemoryModuleGetBaseAddress($pid,"rub.exe")

meldet er als Fehler, kann da vllt. einer weiterhelfen ?
10/07/2013 12:46 alpines#13
Wäre mal nicht schlecht den Fehler hier zu posten.
So wie ich das entnehmen kann fehlt die Funktion in der UDF (was ich aber nicht glaube, wenns stimmt dann lad dir mal die NomadMemory.au3 runter).
Die hab ich dir in den Anhang gepackt, ist mir ein Rätsel warum man Scripte unbedingt archivieren muss.
10/07/2013 15:25 Bubba321#14
Nein funktioniert leider auch nicht hier mal den Fehler vllt. könnt ihr damit etwas anfangen

C:\Users\Admin\Desktop\AutoIt v3 Script (neu).au3(7,57) : ERROR: _MemoryModuleGetBaseAddress(): undefined function.
$baseadress = _MemoryModuleGetBaseAddress($pid,'rub.exe')
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~^
C:\Users\Admin\Desktop\AutoIt v3 Script (neu).au3 - 1 error(s), 0 warning(s)
!>15:24:40 AU3Check ended. Press F4 to jump to next error.rc:2
>Exit code: 2 Time: 0.331
10/07/2013 15:30 alpines#15
Hier ist die Funktion, hab die NomadMemory ohne die Funktion hochgeladen aber pack das hier einfach in NomadMemory.au3 und es sollte klappen:
Code:
Func _MemoryModuleGetBaseAddress($iPID, $sModule)
    If Not ProcessExists($iPID) Then Return SetError(1, 0, 0)

    If Not IsString($sModule) Then Return SetError(2, 0, 0)

    Local   $PSAPI = DllOpen("psapi.dll")

    ;Get Process Handle
    Local   $hProcess
    Local   $PERMISSION = BitOR(0x0002, 0x0400, 0x0008, 0x0010, 0x0020) ; CREATE_THREAD, QUERY_INFORMATION, VM_OPERATION, VM_READ, VM_WRITE

    If $iPID > 0 Then
        Local $hProcess = DllCall("kernel32.dll", "ptr", "OpenProcess", "dword", $PERMISSION, "int", 0, "dword", $iPID)
        If $hProcess[0] Then
            $hProcess = $hProcess[0]
        EndIf
    EndIf

    ;EnumProcessModules
    Local   $Modules = DllStructCreate("ptr[1024]")
    Local   $aCall = DllCall($PSAPI, "int", "EnumProcessModules", "ptr", $hProcess, "ptr", DllStructGetPtr($Modules), "dword", DllStructGetSize($Modules), "dword*", 0)
    If $aCall[4] > 0 Then
        Local   $iModnum = $aCall[4] / 4
        Local   $aTemp
        For $i = 1 To $iModnum
            $aTemp =  DllCall($PSAPI, "dword", "GetModuleBaseNameW", "ptr", $hProcess, "ptr", Ptr(DllStructGetData($Modules, 1, $i)), "wstr", "", "dword", 260)
            If $aTemp[3] = $sModule Then
                DllClose($PSAPI)
                Return Ptr(DllStructGetData($Modules, 1, $i))
            EndIf
        Next
    EndIf

    DllClose($PSAPI)
    Return SetError(-1, 0, 0)

EndFunc