Warum wird der Pointer nicht verändert?

11/05/2012 19:23 EasyFarm#1
Hi..

Ich habe ein Problem.
Ich habe sämtliche Autoitcodes probiert, leider geht keiner.
Ich glaube ich mache was mit dem Pointer Falsch...

Hier mein Autoitcode:

PHP Code:
#RequireAdmin
#include <Pointer.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 GUICreate("Beispielhack 1.3"38938192124)
$Input1 GUICtrlCreateInput(""8824121)
$Button1 GUICtrlCreateButton("On"25685717$WS_GROUP)
$Button2 GUICtrlCreateButton("Off"32085717$WS_GROUP)
GUISetState(@SW_SHOW)

Dim $Speedhack[3] = [00x4200x66A]
$Base 0x002ED9B0
$Handle 
_MemoryOpen(ProcessExists("metin2.bin"))

While 
1
$nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$Button1
            _MemoryPointerWrite
($Base$Handle$Speedhack,GuiCtrlRead($Input1))
        Case 
$Button2
            _MemoryPointerWrite
($Base$Handle$Speedhack,16230)
    EndSwitch
Wend 
So sieht es bei Cheat Engine aus:
[Only registered and activated users can see links. Click Here To Register...]

Ich hoffe jemand erkennt meinen Fehler..
Der Pointer geht 100%.

Danke.
Mfg. EasyFarm


Edit:
Mein Problem ist natürlich, dass sich die Value nicht ändert ^^
11/05/2012 21:29 Logtetsch#2
Hab gerade mal kurz drüber geschaut und ein paar Dinge verändert.
Bin etwas müde von der Arbeit, deshalb will ich auch nicht genauer auf die einzelnen Punkte eingehen. Schau es dir einfach mal an und frag, wenn du was nicht verstehen solltest.

11/05/2012 22:24 EasyFarm#3
Thx erstmal.
Leider ändert sich die Value wieder nicht.
Wie kann ich das für 4 Bytes mal machen?
In Cheat Engine ist es auf 4 Bytes, aber mit 2 gehts auch.

Mfg. EasyFarm
11/05/2012 22:46 BladeTiger12#4
Also ich würde es so machen:

PHP Code:
#RequireAdmin 
#include <Pointer.au3> 
#include <ButtonConstants.au3> 
#include <EditConstants.au3> 
#include <GUIConstantsEx.au3> 
#include <WindowsConstants.au3> 

$Form1 GUICreate("Beispielhack 1.3"38938192124
$Input1 GUICtrlCreateInput(""8824121,$ES_NUMBER
$Button1 GUICtrlCreateButton("On"25685717$WS_GROUP
$Button2 GUICtrlCreateButton("Off"32085717$WS_GROUP
GUISetState(@SW_SHOW

$Base 0x002ED9B0 
$Process 
ProcessExists("metin2.bin")
$Handle _MemoryOpen($Process
$GetModule _MemoryModuleGetBaseAddress($Process "metin2.bin")
$Read $GetModule $Base

While 
$Read 
_MemoryRead($Read $Handle) + 0x420
$Read 
_MemoryRead($Read $Handle) + 0x66A
$nMsg 
GUIGetMsg() 
    Switch 
$nMsg 
        
Case $GUI_EVENT_CLOSE 
            
Exit 
        Case 
$Button1 
            _MemoryWrite
($Read $Handle GUICtrlRead($Input1))
        Case 
$Button2 
            _MemoryWrite
($Read $Handle "WERT")
    EndSwitch 
Wend 
Nicht getestet.

Hier ist der Befehl der glaub ich nicht in der Pointer.au3 steht.
Aber irgendwo in google( nicht von mir ):
PHP Code:
Func _MemoryModuleGetBaseAddress($iPID$sModule)
    If 
Not ProcessExists($iPIDThen Return SetError(100)

    If 
Not IsString($sModuleThen Return SetError(200)

    
Local   $PSAPI DllOpen("psapi.dll")

    ;
Get Process Handle
    Local   $hProcess
    Local   $PERMISSION 
BitOR(0x00020x04000x00080x00100x0020) ; CREATE_THREADQUERY_INFORMATIONVM_OPERATIONVM_READVM_WRITE

    
If $iPID 0 Then
        Local $hProcess 
DllCall("kernel32.dll""ptr""OpenProcess""dword"$PERMISSION"int"0"dword"$iPID)
        If 
$hProcess[0Then
            $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($Modules1$i)), "wstr""""dword"260)
            If 
$aTemp[3] = $sModule Then
                DllClose
($PSAPI)
                Return 
Ptr(DllStructGetData($Modules1$i))
            EndIf
        
Next
    
EndIf

    
DllClose($PSAPI)
    Return 
SetError(-100)

EndFunc 
11/05/2012 23:15 Logtetsch#5
Tut mir leid. Mir ist auf deinem Bild garnicht aufgefallen, dass man die Baseaddresse erst herausfinden muss.

Das, was BladeTiger12 zeigt, wäre eine Option, die aber suboptimal ist.
Außerdem viel zu aufwendig.
Die bessere und effizientere Methode ist ebenfalls recht einfach. Du kopierst den Text, der auf deinem Bild zu sehen ist ("Metin2.bin+002ED9B0") und drückst anschließend auf den button "Add address manually". Nun öffnet sich ein kleines Pop-Up-Fenster. In das erste input Feld, das für die Adresse zuständig ist, fügst du den kopierten Text ein und bestätigst das ganze einfach mit "OK". Nun befindet sich unten in der listview eine neue Zeile mit einer neuen Adresse und den dazugehörigen Werten (Description, Address, Type, Value). Die gesuchte Baseadresse befindet sich in dem Kategoriefeld "Address". Diese kannst du ganz simple in dein Script importieren.
11/05/2012 23:23 BladeTiger12#6
Naja ob man das jetzt so macht oder wie ich es gemacht habe
kommt am schluss doch immer die gleiche raus.
Und warum erst mit Cheat Engine das machen.
Wenn man die Base Address auch so bekommt.
Und verändert kann man das ganze ja auch gleich.
11/05/2012 23:25 EasyFarm#7
Quote:
Originally Posted by Logtetsch View Post
Tut mir leid. Mir ist auf deinem Bild garnicht aufgefallen, dass man die Baseaddresse erst herausfinden muss.

Das, was BladeTiger12 zeigt, wäre eine Option, die aber suboptimal ist.
Außerdem viel zu aufwendig.
Die bessere und effizientere Methode ist ebenfalls recht einfach. Du kopierst den Text, der auf deinem Bild zu sehen ist ("Metin2.bin+002ED9B0") und drückst anschließend auf den button "Add address manually". Nun öffnet sich ein kleines Pop-Up-Fenster. In das erste input Feld, das für die Adresse zuständig ist, fügst du den kopierten Text ein und bestätigst das ganze einfach mit "OK". Nun befindet sich unten in der listview eine neue Zeile mit einer neuen Adresse und den dazugehörigen Werten (Description, Address, Type, Value). Die gesuchte Baseadresse befindet sich in dem Kategoriefeld "Address". Diese kannst du ganz simple in dein Script importieren.
Danke.
Hab ich gemacht.
Leider kommt da jetzt eine ganz andere Value bei raus.
Mfg. Easy
11/05/2012 23:36 BladeTiger12#8
Hmm.
Komm mal in Skype und da kann ich dir besser helfen.
Und das da eine andere value raus kommt ist ja klar.
Da es keine Offsets hat wenn du es nur Addest.
Und du sollst ja auch nur wie er gesagt hat die Adresse rauskopieren
und sie in Autoit einfügen.