Mir war gerade mal so danach und da habe ich einen Konverter geschrieben, weil manche sich damit schwer haben die Informationen aus CE in Autoit eintragen. Werden zwar eh die wenigsten brauchen, aber egal xD
Funktionsweise:
1. in CE Rechtsklick auf den Pointer und auf "Copy" klicken
2. in meinem Programm auf "Code generieren" klicken
3. In euer Scite gehen und einfügen
Hier ist der Source Code vom Programm:
Quote:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\..\..\Programme\AutoIt3\Ic ons\au3.ico
#AutoIt3Wrapper_outfile=..\Desktop\CE Pointer to AutoIt3.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=expo_botter
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <String.au3>
#include <Array.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1_1 = GUICreate("CE Pointer to AutoIt3", 218, 39, -1, -1)
$Button1 = GUICtrlCreateButton("Code generieren", 40, 8, 131, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Code()
EndSwitch
Sleep(10)
WEnd
Func Code()
Local $M_R_
Local $Clip_ = ClipGet()
Local $Ex2_
Local $ClipBoard
If StringInStr($Clip_,"<CheatTable>",1) Then
Local $Ex_ = _StringExplode($Clip_,"<Offset>",0)
Dim $Off_[1]
For $i = 1 To UBound($Ex_) - 1
$Ex2_ = _StringExplode($Ex_[$i],"<",0)
_ArrayAdd($Off_,$Ex2_[0])
Next
_ArrayReverse($Off_)
_ArrayDelete($Off_,UBound($Off_))
$Ex_ = _StringExplode($Clip_,"<InterpretableAddress>",0)
If UBound($Ex_) = 3 Then
$Ex2_ = _StringExplode($Ex_[2],"<",0)
$Ex_ = _StringExplode($Ex2_[0],"+",0)
Else
$Ex2_ = _StringExplode($Ex_[1],"<",0)
$Ex_ = _StringExplode($Ex2_[0],"+",0)
EndIf
_ArrayInsert($Off_,0,$Ex_[1])
$ClipBoard &= "Func _GetPointerAddress()" & @CRLF & @TAB & 'Local $M_R_,$Open_Process_ = _MemoryOpen(ProcessExists("' & $Ex_[0] & '"))' & @CRLF & @TAB & '$M_R_ = _MemoryModuleGetBaseAddress(ProcessExists("' & $Ex_[0] & '"),"'
$ClipBoard &= $Ex_[0] & '")' & @CRLF & @TAB & '$M_R_ = "0x" & Hex(_MemoryRead($M_R_ + Dec("' & $Off_[0] & '"),$Open_Process_),8)'
For $i = 1 To UBound($Off_) - 2
$ClipBoard &=@CRLF & @TAB & '$M_R_ = "0x" & Hex(_MemoryRead($M_R_ + Dec("' & $Off_[$i] & '"),$Open_Process_),8)'
Next
$ClipBoard &=@CRLF & @TAB & 'Return "0x" & Hex($M_R_ + Dec("' & $Off_[UBound($Off_) - 1] & '"),8)' & @CRLF & "EndFunc"
ClipPut($ClipBoard)
MsgBox(0,"","generierter Source-Code ins ClipBoard getan")
Else
MsgBox(16,"","Es ist kein Cheat Table im ClipBoard")
EndIf
EndFunc
|
und so würde der Code aussehen (der Pointer ist nur ausgedacht)
Quote:
Func _GetPointerAddress()
Local $M_R_,$Open_Process_ = _MemoryOpen(ProcessExists("TLoader.exe"))
$M_R_ = _MemoryModuleGetBaseAddress(ProcessExists("TLoader .exe"),"TLoader.exe")
$M_R_ = "0x" & Hex(_MemoryRead($M_R_ + Dec("26767c"),$Open_Process_),8)
$M_R_ = "0x" & Hex(_MemoryRead($M_R_ + Dec("0010"),$Open_Process_),8)
$M_R_ = "0x" & Hex(_MemoryRead($M_R_ + Dec("0FEF"),$Open_Process_),8)
$M_R_ = "0x" & Hex(_MemoryRead($M_R_ + Dec("4564564"),$Open_Process_),8)
Return "0x" & Hex($M_R_ + Dec("0120"),8)
EndFunc
|
Ihr braucht nur NomadMemory.au3 und diese Funktion (die theoretisch bei euch noch nicht mit drin sein dürfte)
Quote:
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")
Local $hProcess
Local $PERMISSION = BitOR(0x0002, 0x0400, 0x0008, 0x0010, 0x0020)
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
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
|
Das Programm bezieht sich nicht nur auf TLoader.exe, es kann auch für jedes andere Spiel oder Programm sein.
Wenn euch das Programm was genützt hat drückt den THANKS-BUTTON