Du bist schon auf dem richtigen Weg.Quote:
Ich hab etwas von shadow gefunden was den assembler code injected und zwar macht er einen Jump und nopt die unwichtigen adressen nun meine frage wie kann ich nun damit am anderen Ende des Jumps meine Funktion abfragen oder das sie überhaupt ausgeführt wird? Das ist das was ich schon gemacht habe bisher nopt sie alles und jumpt (irgendwo) zu einer Adresse hin.
PHP Code:#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include<CCInject.au3>
#RequireAdmin
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Test", 282, 187, 192, 124)
$Group1 = GUICtrlCreateGroup("Test", 0, 0, 281, 185)
$Input1 = GUICtrlCreateInput("Ich habs geschafft!!!", 24, 32, 233, 21)
$Button1 = GUICtrlCreateButton("Namechange", 8, 120, 89, 57)
$Button2 = GUICtrlCreateButton("Inject Script", 168, 144, 97, 33)
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 $Button1
_Change()
Case $Button2
_Inject()
EndSwitch
WEnd
Func _Inject()
Local $memopen = _MemoryManipulationOpen(ProcessExists("Test.exe"))
$allocated_variable = _AllocateMemoryForVariable($memopen)
$asm_variable = _CreateASM_CopyRegisterToVariable($allocated_variable, "ebx")
$old_opcode = ""
_MemoryBytesWrite($memopen,0x00720BE2,"90")
_MemoryBytesWrite($memopen,0x00720BE3,"90")
$old_opcode = _InjectASMAtAddress($memopen, 0x00720BE4, 5, $asm_variable)
EndFunc
Func _Change()
EndFunc
Das MemorzBytesWrite ist unwichtig, das macht die InjectASMAtAddress-Funktion von alleine. Was du da jetzt machst ist ebx in eine Variable zu speichern, um diese Variable jetzt noch abzufragen musst du noch den befehl "_ReadVariableMemory" (oder so habe die UDF gerade nicht da und kann mich nicht mehr erinnern :D).
Aber ansonsten sieht es gut aus, wenn du beachtet hast, dass du es mit x86 kompillierst.
Das Ganze "Gespringe", was die anderen angemerkt haben ist wirklich nicht trivial, das macht die Funktion aber im Normalfall so, dass du zufrieden bist und dir keine Sorgen mehr machen musst.
Edit:
Wenn du willst, dass du in ebx schreiben kannst, musst du das ganze anders angehen und entweder eine Variable erzeugen von der du dann den Wert per injecteten ASM in ebx schreiben laesst oder du hard codest diesen Wert und schreibst einfach:
"mov ebx, 100"
Falls es dir etwas an Assembler-Kentnisse mangelt kannst du fuer einen Crashkurs auch einmal mein Tut (AutoIt und Assembler) anschauen, darin gehts zwar um andere Anwendungszwecke, aber die UDF FASM.au3 ist bei der CCInject.au3 und auch bei meinem Tut die UDF auf der alles "basiert/aufbaut".