Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 16:54

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Autoit Hooking (ohne crash) möglich?

Discussion on Autoit Hooking (ohne crash) möglich? within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
golle12's Avatar
 
elite*gold: 29
Join Date: Aug 2011
Posts: 640
Received Thanks: 493
Autoit Hooking (ohne crash) möglich?

Hallo liebes Forum

kann man mit Autoit ohne Crashes eine Adresse Hooken und ohne Probleme sie wieder auf die Ausgangsadresse umleiten ohne dass das Programm crasht ? Denn jedesmal wenn ich es mache crasht es :/.Daher möchte ich diejenigen Fragen die damit erfahrung haben.(Natürlich wäre es leichter dies mit C++ oder C# zumachen aber ich wollte alles mal mit autoit machen)Hoffe ihr könnt mir helfen.(Im Internet gibt es auch eiige "Hooking.au3" welche aber entweder nicht funktioniert oder einfach eine Fehlermeldung zurück gibt und das noch im Beispiels Script.)
golle12 is offline  
Thanks
1 User
Old 04/19/2014, 15:42   #2
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Das was du mit C++ schaffst geht auch mit AutoIt nur ist es ein bisschen umständlicher.
Entweder exportierst du eine DLL die in C++ geschrieben ist und die Hooking Funktion darin über AutoIt ausführt oder du schreibst selber mit MemoryWrite in den Speicher.
Wenn es crasht, dann liegt es wahrscheinlich an nicht abgesichertem / zugesichertem Speicher (VirtualProtect() in C++).
Schau dir das Grundgerüst in C++ mal an und versuch das zu übernehmen, solltest du das nicht können bastel dir eine kleine DLL die das für dich macht.
alpines is offline  
Old 04/20/2014, 13:47   #3
 
golle12's Avatar
 
elite*gold: 29
Join Date: Aug 2011
Posts: 640
Received Thanks: 493
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"282187192124)
$Group1 GUICtrlCreateGroup("Test"00281185)
$Input1 GUICtrlCreateInput("Ich habs geschafft!!!"243223321)
$Button1 GUICtrlCreateButton("Namechange"81208957)
$Button2 GUICtrlCreateButton("Inject Script"1681449733)
GUICtrlCreateGroup("", -99, -9911)
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($memopen0x00720BE45$asm_variable)
EndFunc

Func _Change
()

EndFunc 
golle12 is offline  
Old 04/20/2014, 14:13   #4
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Du injectest deine Funktion in eine CodeCave, und jumpst dahin (speicherst natürlich den ASM Code auf den du schreibst als 1. in die CodeCave) am Ende deiner Funktionen in der CodeCave jumpst du zurück wo du den eigentlich Jump initiiert hast nur ein Schritt weiter.
alpines is offline  
Thanks
1 User
Old 04/20/2014, 14:26   #5
 
golle12's Avatar
 
elite*gold: 29
Join Date: Aug 2011
Posts: 640
Received Thanks: 493
ok dankeschön, ist mein anfang oben schon richtig oder ist da was falsch ?
golle12 is offline  
Old 04/20/2014, 14:36   #6
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Da kann ich nicht viel zu sagen, da ich mich damit zu wenig auseinandergesetzt hab, aber ein paar Tutorials sollten das glaube ich schon klären.
alpines is offline  
Thanks
1 User
Old 04/20/2014, 14:37   #7
 
golle12's Avatar
 
elite*gold: 29
Join Date: Aug 2011
Posts: 640
Received Thanks: 493
ok dankeschön
golle12 is offline  
Old 04/21/2014, 19:46   #8

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Du machst hier im Moment nichts, außer 2 Byte zu nopen und das Register ebx in deine allokierte Variable zu kopieren. Da ist kein Jump oder sonst was zu erkennen und wenn die Adressen im Speicher einfach so gewählt sind, bringt das auch nichts.

Was du vom Ablauf her machen musst:
- Speicher für deine CC allokieren & deine Instructions dort hin kopieren
- an der gewünschten Stelle zur CC springen
- am Ende der CC zur gewünschten Stelle + len(jump_instruction) springen
- entweder du berechnest die Adresse relativ und springst dann direkt hin (jmp 0x12345678) oder du schiebst die Adresse der CC in ein Register (mov eax, 0x12345678) und springst dann mit der Angabe des Registers (jmp eax). Hat beides Vor- und Nachteile.

Was du momentan machst:
- mov [adresse], ebx

AutoIt ist hierfür in meinen Augen ziemlich ungeeignet, schau dir mal C++ an. Ansonsten könnte AsmJit mit einem Wrapper eine Option sein.
snow is offline  
Old 04/22/2014, 09:14   #9
 
Wayntressierts's Avatar
 
elite*gold: 0
Join Date: Feb 2012
Posts: 424
Received Thanks: 422
Auch mit AutoIt geht das, du musst nur wissen was du tust und wo du hin willst.
Was möchtest du denn mit deinem Script erreichen?

Wenn ich dich richtig verstanden habe, willst du aus AutoIt auf das EBX register an einer Stelle zugreifen... kommt das hin?
Wayntressierts is offline  
Old 04/22/2014, 13:18   #10
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Quote:
Originally Posted by Wayntressierts View Post
Auch mit AutoIt geht das, du musst nur wissen was du tust und wo du hin willst.
Was möchtest du denn mit deinem Script erreichen?

Wenn ich dich richtig verstanden habe, willst du aus AutoIt auf das EBX register an einer Stelle zugreifen... kommt das hin?
Nicht ganz, er will seine ASM Funktion in eine CC injecten und dahin jumpen.
alpines is offline  
Old 04/22/2014, 15:03   #11
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
woher weis man wohin man wieder zurück jumpen muss ?
YatoDev is offline  
Old 04/22/2014, 15:09   #12
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Das ist ganz einfach, hier mal ein vereinfachtes ASM Beispiel:

.... Code davor
0x0001 ADD EBX, 2
0x0002 MOV ECX, EBX
.... restlicher Code

Man möchte zum Beispiel EBX auf 0 setzen, sicherlich kann man hier das ADD EBX, 2 zu einem MOV EBX, 0 machen aber wir wollen das per CC Injection machen.

Unsere CodeCave sieht so aus:

0x1000 ADD EBX, 2
0x1001 MOV EBX, 0
0x1002 JMP 0x0002

Ich bin mir im klaren das der Code Fehler enthält, aber er soll das nur verdeutlichen.
Wenn wir jetzt zur CodeCave jumpen wollen machen wir folgendes

0x0001 ADD EBX, 2
0x0002 MOV ECX, EBX

ändern wir zu

0x0001 JMP 0x1000
0x0002 MOV ECX, EBX

Somit jumpen wir an der Stelle wo vorher das ADD EBX, 2 war zu unserer CC, führen den Code aus der an der Stelle an dem wir dem Jump platziert haben aus (man kann nicht einfach so was zwischen einfügen, deshalb die Anweisung auf jeden Fall kopieren) und fügen unseren Code den wir dort ausführen möchten hinzu und anschließend springen wir zurück. Die 0x001 0x1002 sind nur Beispielspeicheradressen.
Man jumpt am Ende dahin zurück von wo man "weggejumpt" ist +1.
Es gibt sicherlich ein Befehl womit man die aktuelle Speicheradresse abspeichern kann.
alpines is offline  
Old 04/22/2014, 22:18   #13
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
es gibt keinen allgemeinen "befehl" der mich am ende meiner codecave dorthin bringt, wo ich hin will...

je nachdem, was ich mit meiner codecave bewirken will, muss ich entsprechend das ende der codecave anpassen. es gibt situationen, in denen ich 100 zeilen aus dem zielprozess durch 200zeilen aus meiner codecave ersetzen will. hier muss ich natürlich am ende der codecave hinter die 100 zeilen code des zielprozesses springen.

je nachdem was ich vorhabe, kann die zieladresse am ende meiner codecave deshalb sehr stark variieren.

ein kleiner tipp zum schluss: jump befehle sind allgemein recht komplex aufgebaut. es gilt aus zieladresse und aktueller adresse den befehlscode zu errechnen. deutlich leichter geht das auf anderen wegen. nimmt man zb den return befehl, so pusht dieser die zieladresse einfach vom stack.

Code:
jmp x
bringt mich entsprechend zur gleichen stelle, wie
Code:
push x
retn
nur das beim letzteren code keinerlei Berechnungen zur codeerstellung notwendig sind.
lolkop is offline  
Old 04/23/2014, 01:42   #14
 
golle12's Avatar
 
elite*gold: 29
Join Date: Aug 2011
Posts: 640
Received Thanks: 493
ok aber wie macht das Cheat Engine ? Denn bei Cheat Engine ist das anders denn da erstellt er alles selbern ohne da selbst viel zu hantieren daher->

Ich habe eine Cheat Engine Script welches ich mit Autoit "nachahmen " möchte ohne jedesmal ce zu starten daher auch meine Frage Wie bekomme ich es hin von eine Adresse einen jump zu veranlassen welcher dann von meinem Script genutzt wird und dann wieder zurück jump (eins weiter nach unten) ohne dass es crasht ?
golle12 is offline  
Old 04/23/2014, 03:48   #15

 
elite*gold: 64
Join Date: May 2011
Posts: 1,229
Received Thanks: 854
Ich würde sagen, du schreibst die Bytes an deiner Addresse um(MemoryWrite oder mit der CC Inject.au3) und schreibst dir die CodeCave mit einem Debugger vor(OllyDbg, CE), dann musst du nur noch alles auf AutoIt übertragen.(Also wieder Bytes umschreiben.)
BladeTiger12 is offline  
Reply


Similar Threads Similar Threads
[AutoIt] - Systemnahes Entwickeln (DLL's, Hooking, APIs, CodeInjection, Security etc)
01/12/2014 - AutoIt - 3 Replies
Hey, Ich habe diesen Thread als eine Art "Disskussionsthread" erstellt. Ich habe mir gedacht das man ein bisschen über das Systemnahe programmieren mit AutoIt spricht, Tipps gibt, interessante/hilfreiche Links postet, Fragen über die im Titel genannten Themenbereiche stellt, Skripte postet, einander hilft etc. Das soll kein Thread sein indem über AutoIt-Basics gesprochen wird, sondern über Fortgeschrittene Dinge. Also, mal ein paar Links von meiner Seite, bezüglich dem Systemnahen...
Autoit/AutoHotkey hooking the mouse
10/03/2009 - Aion - 3 Replies
I am running EU/US Aion 1.5 so no game guard. I am still having trouble sending mouse clicks to Aion the mouseclick("right") function works fine oustide the game but if I <alt> <tab> in it seems to get blocked. I am a bi t puzzled as the freeware mouse driver that I use to re-map extra mouse buttons works. Of course I have tried removing the mouse driver completely to ensure there is no clash. Any one have any ideas? Cheers.
D3D Hooking [autoit]?
04/17/2009 - GW Bots - 11 Replies
edited



All times are GMT +1. The time now is 16:55.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.