Tool Problem

10/10/2011 15:36 klavier22#16
Das erste ist unsinnig, da $PointerRead ja kein GuiCtrl ist, somit kommt da immer 0 raus.
Das GUICtrlRead musst du nehmen um zb den Innhalt eines Edit Feldes zu bekommen.
Beim 2. sieht man dann ja wieder das iwas icht stimmt, was aber nicht sein kann, denn bei deinem Memorywrite teleportiert er dich ja immer - nur an den falschen Ort.
Langsam glaube ich doch, dass iwas mit den Pointern nicht stimmt.
Hast du einen Pointer mit festem Wert ohne MemoryModuleGetbaseAdress()?
Ach ja - den HotKeySet Rückgabewert musst du nun wirklick NICHT speichern - und das sind sicher nur Codeausschnitte, oder? Denn das Offset und die Basisaddresse sind ja nicht gesetzt.

€dit: stimmt, ist nen Array - daher ^ Schwachsinn :D
10/10/2011 15:37 Logtetsch#17
Quote:
Originally Posted by omer36 View Post
$Open = _MemoryOpen ($PID)
$PointerRead = _MemoryPointerRead ($ModuleX, $Open, $OffsetX, "float")
MsgBox (0,"",$PointerRead[1])
Danke dir :) hab das Array nach dem " $PointerRead " vergessen.

PHP Code:

$hotkey 
HotKeySet ("4","_read")

Func _read ()

 
$Open _MemoryOpen ($PID)
 
$PointerRead _MemoryPointerRead ($ModuleX$Open$OffsetX"float")
 
MsgBox (0,"",$PointerRead[1])
 
$end _MemoryClose ($Open)

EndFunc 
ERGEBNIS = 0
10/10/2011 15:39 klavier22#18
bedeutet Fehler
guck dir mal @error an, was sagt der?

Aus NomadMemory:
; @Error - 0 = No error.
; 1 = $av_Offset is not an array.
; 2 = Invalid $ah_Handle.
; 3 = $sv_Type is not a string.
; 4 = $sv_Type is an unknown data type.
; 5 = Failed to allocate the memory needed for the DllStructure.
; 6 = Error allocating memory for $sv_Type.
; 7 = Failed to read from the specified process.
10/10/2011 15:44 Logtetsch#19
hmmmm, aber wo kann der Fehler sein :/
Ich poste gleich mein ganzes Script und die Bilder der Pointer

PHP Code:

#RequireAdmin
#include <NomadMemory.au3>

If ProcessExists ("TClient.exe") = False Then
    MsgBox 
(48,"Error","Tclient.exe konnte nicht gefunden werden!")
    Exit
EndIf

If 
FileExists ("AGB.txt") = false Then
    IniWrite 
("AGB.txt","Allgemeine Geschäfts Bedingung","AGB","Ich überneheme keinerlei Haftung!")
    
MsgBox (48,"AGB","Bitte lese dir die AGB in dem Textdokument, was sich gerade erstellt hat, durch!")
    
ShellExecute ("AGB.txt")
EndIf

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Porter GUICreate("Porter"337140192124)
$Porter GUICtrlCreateGroup("Porter"241628973)
$X GUICtrlCreateLabel("X"40401117)
$Y GUICtrlCreateLabel("Y"40641117)
$Input1 GUICtrlCreateInput(""643212121)
$Input2 GUICtrlCreateInput(""645612121)
$Port GUICtrlCreateButton("Port"208328141$WS_GROUP)
GUICtrlCreateGroup("", -99, -9911)
$AFK GUICtrlCreateButton("AFK"241046725$WS_GROUP)
$Farm GUICtrlCreateButton("Farm"1041047525$WS_GROUP)
$Exit GUICtrlCreateButton("Exit"2401047525$WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


Global $Pid ProcessExists ("TClient.exe")
Global 
$Open _MemoryOpen ($PID)
Global 
$end _MemoryClose ($Open)

Global 
$ModuleX _MemoryModuleGetBaseAddress ($PID"TClient.exe") + 0x00315AA8
Global $OffsetX[5]
$OffsetX[0] = 0
$OffsetX
[1] = 0xC8
$OffsetX
[2] = 0x338
$OffsetX
[3] = 0x6B0
$OffsetX
[4] = 0x84

Global $ModuleY _MemoryModuleGetBaseAddress ($PID"TClient.exe") + 0x00315224
Global $OffsetY[4]
$OffsetY[0] = 0
$OffsetY
[1] = 0x338
$OffsetY
[2] = 0x6B0
$OffsetY
[3] = 0x84

$hotkey 
HotKeySet ("4","_read")

Func _read ()

 
$Open _MemoryOpen ($PID)
 
$PointerRead _MemoryPointerRead ($ModuleX$Open$OffsetX"float")
 
MsgBox (0,"",$PointerRead[1])
 
$end _MemoryClose ($Open)

EndFunc


While 1
    $nMsg 
GUIGetMsg()

    If 
ProcessExists ("TClient.exe") = False Then
    MsgBox 
(48,"Error","Tclient.exe konnte nicht gefunden werden!")
    Exit
    EndIf

    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit

        Case 
$AFK
            $Open 
_MemoryOpen ($PID)
            
$Write _MemoryPointerWrite ($ModuleX$Open$OffsetX"811""float")
            
$Write2 _MemoryPointerWrite ($ModuleY$Open$OffsetY"117""float")
            
$Close _MemoryClose ($Open)

        Case 
$Exit
            
Exit

        Case 
$Port
            $Open 
_MemoryOpen ($PID)
            
$Write _MemoryPointerWrite ($ModuleX$Open$OffsetXGUICtrlRead ($Input1), "float")
            
$Write2 _MemoryPointerWrite ($ModuleY$Open$OffsetYGUICtrlRead ($Input2), "float")
            
$Close _MemoryClose ($Open)

    EndSwitch
WEnd 
Bilder : X-Koord


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

Bilder : Y-Koord


[Only registered and activated users can see links. Click Here To Register...]
10/10/2011 15:45 klavier22#20
sag doch mal den wert von @error!
MsgBox(0,"",@error)

und wenn du In AutoIT das $ModuleX + Y ausgeben lässt, sind die dann beide:
031003A8?
03101D28?
10/10/2011 15:53 Logtetsch#21
Quote:
Originally Posted by klavier22 View Post
sag doch mal den wert von @error!
MsgBox(0,"",@error)

Was ich immernochnicht verstehe, ist, warum du keinen feste Pointer hast und warum du mehrere Offsets brauchst - musst du denn mehrere Adressen setzen?
Bei diesem Spiel kann man in CheatEngine nur "Pointer Scan for this Address" auswählen.

Bei
PHP Code:
 MsgBox (0,"",@error
kommt "0" raus
10/10/2011 16:04 klavier22#22
HÄ? Wenn dir MemoryPointerWrite 0 zurück gibt, heißt das Fehler
Wenn du dann @error abfragst muss er zwischen 1 und 8 sein ??? weil 0 kein Fehler heißt.

Ich lad mir jetzt das Spiel runter und schaus mir mal an.
Hast du zufällig nen TestAcc oder so?
10/10/2011 16:08 Logtetsch#23
Quote:
Originally Posted by klavier22 View Post
HÄ? Wenn dir MemoryPointerWrite 0 zurück gibt, heißt das Fehler
Wenn du dann @error abfragst muss er zwischen 1 und 8 sein ??? weil 0 kein Fehler heißt.

Ich lad mir jetzt das Spiel runter und schaus mir mal an.
Hast du zufällig nen TestAcc oder so?
Warte.. Ich spiele auf Global. [Only registered and activated users can see links. Click Here To Register...]

Quote:
Originally Posted by klavier22 View Post
HÄ? Wenn dir MemoryPointerWrite 0 zurück gibt, heißt das Fehler
Wenn du dann @error abfragst muss er zwischen 1 und 8 sein ??? weil 0 kein Fehler heißt.

Ich lad mir jetzt das Spiel runter und schaus mir mal an.
Hast du zufällig nen TestAcc oder so?
Wie soll ich das den abfragen :/
10/10/2011 16:17 klavier22#24
naja, du machst einfach:

$writeX = _MemoryPointerWrite(für X)
MsgBox(0,"",$writeX[1])
MsgBox(0,"",@error)

$writeY = _MemoryPointerWrite(für Y)
MsgBox(0,"",$writeY[1])
MsgBox(0,"",@error)

Wenn bei der ersten UND der 2. 0 raus kommt, ist evtl deine NomadMemory beschädigt, denn Rückgabe 0 bedeutet Fehler und genaueres kann man dann in @error finden - dieser allerdings besagt für 0 keinen Fehler...
10/10/2011 16:24 Logtetsch#25
Geht nicht
Sobald ich es verscuhe schließt sich das Programm :/ und Autoit spruckt mir das raus :

MsgBox (0,"",$Write[1])
MsgBox (0,"",$Write^ ERROR
->16:23:09 AutoIT3.exe ended.rc:1
>Exit code: 1 Time: 4.152
10/10/2011 16:43 klavier22#26
joa, in meinem Beispiel hatte ich ja auch WriteX genommen.
Ist ja im Prinzip nichts aderes als das, was du schon geschrieben hattest wo das Ergebnis 0 war.

Hier:
Code:
Func _read ()

 $Open = _MemoryOpen ($PID)
 $PointerRead = _MemoryPointerRead ($ModuleX, $Open, $OffsetX, "float")
 MsgBox (0,"",$PointerRead[1])
 $end = _MemoryClose ($Open)

EndFunc
noch die MsgBox mit @error einfügen und sagen, was rauskommt

Also bei mir ist genau das gleiche - bei debugger attach kommt ne anti hacking meldung und das spiel beendet sich, aber mein Pointer Scan findet nichts

Wenn ich davon ausgehe, dass deine Pointer und Offsets stimmen, dann ist bei dir glaube ich alles richtig und ich weiß nicht warum es nicht geht.

Was ich jetzt noch machen würde(wenn ich das spiel auch spielen würde):
OllyDBG - anti hack Warnung NOPen und dann mit find out what accesses den Pointer suchen - da müsste man dann aber evtl auch noch den Patcher fixen und Pakete simulieren. Ist mir jetzt erstmal zu viel - tut mir leid
10/10/2011 20:52 omer36#27
ich weiß zwar nicht wo bei dir der fehler war, aber ich habs hier mal gemacht...

vllt brauchtest du auch einfach nur die "SetPrivilege("SeDebugPrivilege", 1)" zu setzten...

PHP Code:
#include "Pointer.au3"

SetPrivilege("SeDebugPrivilege"1)

$pid ProcessExists("TClient.exe")
$open _MemoryOpen ($pid)


$Address _MemoryModuleGetBaseAddress($pid"TClient.exe") + 0x315224

Local $OffsetX
[4]
$OffsetX[0]=0
$OffsetX
[1]=0x338
$OffsetX
[2]=0x6B0
$OffsetX
[3]=0x84

Local $OffsetY
[4]
$OffsetY[0]=0
$OffsetY
[1]=0x338
$OffsetY
[2]=0x6B0
$OffsetY
[3]=0x8C

Local $OffsetZ
[4]
$OffsetZ[0]=0
$OffsetZ
[1]=0x338
$OffsetZ
[2]=0x6B0
$OffsetZ
[3]=0x88


AdlibRegister
(_MemoryPointerWrite($Address$open$OffsetX3661.470459'FLOAT'))
AdlibRegister(_MemoryPointerWrite($Address$open$OffsetY558.9066162'FLOAT'))
AdlibRegister(_MemoryPointerWrite($Address$open$OffsetZ86.18725586'FLOAT'))


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 
10/10/2011 20:57 klavier22#28
Und wie bist du an die Adressen / Offsets gekommen?

Bei mir beendet sich das Spiel wenn ich den Debugger von CE attache und der Pointerscan findet nichts...

Was genau bewirkt eig. das SetPrivilege(...)?
10/10/2011 21:14 omer36#29
hier sieht man es eig recht gut:
ab 2:55