ich hab version 8.1 irgendwas und wenn ich sie starte bleibt das script stehen mit einem rechteckigen (update?)fenster was sich nicht schließt... habe mir mal erspart das spiel weiter zu untersuchen bzw auf fehlersuche zu gehen
Beiträge von WhiteLion
-
-
siehe edit2!!!
danke für die prompte antwort, ich habe jetzt folgendes gemacht (aus dem beispiel abgeschaut):
[autoit]$Form1=_AeroCreate($TileofWin,270,370,".\ICONS\Arbeitsplatz.ico",1)
[/autoit][autoit][/autoit][autoit]
$size=_AeroGetSize($Form1)
$style=_AeroStyleCreate(_Array2(0,0),_Array2(0,0),_Array2(0,$size[0]),_Array2(25,$size[1]),_Array2(0x77AAAAAA,0xDD00FF00),_Array2(0xEE555555,0xDD0000FF),0)
_AeroStyleDraw($Form1,$style)
$style2=_AeroStyleCreate($size[0],300,$size[1],0xAAAAAAAA,0xDDAAAAAA,0xEEAAAAFF,4)
GUISetState();$wa=_AeroWorkAreaCreate($Form1,0,0,99,18,@SW_HIDE)
[/autoit][autoit][/autoit][autoit]
;$Form1 = GUICreate($TileofWin, 270, 370, -1, -1)
$wa=_AeroWorkAreaCreate($Form1,10,10,250,55,@SW_HIDE) ; hier ist die area für das bild
$logo = GUICtrlCreatePic(@TempDir & "\logo.jpg", 10, 10, 250, 55)
_AeroWorkAreaSetState($logo,@SW_SHOW)Sleep(8000)
[/autoit]das problem ist nur, dass nichts angezeigt wird an der stelle wo das logo hin soll. - auch mit der jetztigen WorkArea!
(es ist übrigens ein ganz normales, farbiges jpg was ich verwende)
die GUI bleibt quasi leer.
das sleep hab ich extra eingebaut, um zu schauen ob es mit dem nachfolgenden code kollidiert.
(tut es auch es löst einen permanent einen button aus, sobald die sleeptime um ist. das ist dann wohl eine andere baustelle?
da ich die GUI elemente unterhalb des geposteten codes noch nicht umgearbeitet habe)
das script kann ich nicht posten, da es einige anhänge hat, aber es müsste doch so schon gehen !?EDIT: Doofer Fehler ich hab die falsche variable benutzt.... au man, ich bin von dem ganzen probieren schon ganz verwirrt gewesen !
es geht nunEDIT2: Ein Problem hab ich noch: wenn ich GUICtrlCreateLabel auf der GUI benutze, welche möglichkeit habe ich die hintergrundfarbe der schrift durchsichtig zu machen oder kann ich eine schrift/möglichkeit nehmen mit transparenten hitergrund ?
-
falls das hier noch supportet wird?
[autoit]
ich hab versucht den style wie im beispiel in meine GUI nachträglich einzuarbeiten.
jetzt muss ich dazu sagen, dass ich keine gdi experte bin und es ehrlich gesagt auch nur benutzen wollte und mich nicht lange einlesen wollte
jedenfalls hab ich folgendes problem: sobald meine GUI erstellt ist und ich das erste GUI objekt hinzufüge, wird die GUI überall weiss bis auf ein paar umrisse.
ich habe keine ahnung warum.
[/autoit]
$Form1=_AeroCreate("test",270,370,".\ICONS\Arbeitsplatz.ico",1)
$size=_AeroGetSize($Form1)
$style=_AeroStyleCreate(_Array2(0,0),_Array2(0,0),_Array2(0,$size[0]),_Array2(25,$size[1]),_Array2(0x77AAAAAA,0xDD00FF00),_Array2(0xEE555555,0xDD0000FF),0)
_AeroStyleDraw($Form1,$style)
$style2=_AeroStyleCreate($size[0],300,$size[1],0xAAAAAAAA,0xDDAAAAAA,0xEEAAAAFF,4)
GUISetState()
Sleep(1000)
$logo = GUICtrlCreatePic(@TempDir & "\logo.jpg", 10, 10, 250, 55) ; hier wirds weiss!
_AeroWorkAreaSetState($logo,@SW_SHOW)
Sleep(1000) -
-
okey, mal angenommen ich bekomme es trotz meiner mangelhaften C++ kenntnisse hin eine DLL zu schreiben. stellt sich mir die frage: wie kommuniziere ich mit einer injezierten DLL in autoit ... geht das genauso wie mit einer herkömmlichen DLL ?
Die nächste sache: Wie würde die createthread-lösung funktionieren bzw hat jemand antworten zu den fragen aus meinem vorherigen post ?
-
Wenn du mir jetzt noch erklären würdest, wie ich die Konsolenbefehle auf diese Art dem Zielprozess/Funktion übergeben kann, wäre das zumindest eine ergebnisbezoge Lösung. Bin dankbar für jede Hilfe
Den Speicher des Zielprozesses zu modifizieren ist auch kein Problem... allerdings weiss ich nicht wirklich wie ich herausbekommen kann, an welche Speicherstellen zu schreiben wäre.
Die Konsolenfunktion nimmt wie Werte vom Stack, also müsste ich rausfinden wo der Stack aufhört also:
1. ESP des Prozesses auslesen. PROBLEM: wie mach ich das mit Autoit ?
2. Commandline auf den stack pushen/packen
3. ESP um neu setzen
4. Funktion bei 00443e80 ausführen! - verdammt wie geht das ?
5. ESP wieder auf alten wert setzen um den Ablauf des Programmes normal fortzusetzen. -
Hallo liebe Leute,
ich möchte Euch um Mithilfe bei einem meiner Probleme bitten. Ich komme leider nicht weiter.Mein Vorhaben:
In einem externen Prozess einen Thread öffnen und anschließend "benutzen".
In meinem Fall gehts (mal wieder) um meine Konsole an die ich auf diese Weise Befehle schicken möchte, die man sonst in die Commandline eingeben kann.Mein Problem:
Mir fehlt Wissen und ich habe keinen Plan wie ich in angemessener Zeit und aus dem Fachchinesisch, was man beim Googlen findet, das Wichtigste heraus filtern kann. Die Thematik ist aus meiner Sicht nicht gerade einfach.Wozu das Ganze:
Zum Einen interessiert mich die Thematik aus verschiedenen Gründen.(Unter Anderem weil ich irgendwann mal in C++ weiterkommen möchte.)
Zum Anderen hab ich ja nun ein Anwendungsobjekt (siehe oben = Konsole)Was ich habe/weiss:
Einen Speicheroffset (Call) der Konsolenanwendung der offensichtlich die Funktion im Zielprozess startet:
(Sagte mir jedenfalls ein befreundeter Informatiker der sich das Ganze anschaute und meine das wäre der Richtige Call für mein Vorhaben)
ich hab das auch mal in einen im Debugger angeschaut dort ist ein Call:
00443e80: Call 00543550
C++ Sources dank Google hab ich auch - die verstehe ich aber nicht ganz
Eine offensichtlich geniale UDF dafür gibt es hier: http://sites.google.com/site/ascend4ntscode/processfunctions
Download: http://sites.google.com/site/ascend4nt…?attredirects=0dort gibt es die UDF: _ProcessCreateRemoteThread()
Selbige verlangt folgende Parameter (siehe auch Script im Anhang):
_ProcessCreateRemoteThread($hProcess,$pCodePtr,$vParam=0,$bCreateSuspended=False,$iUndocumented=0,$bWow64Code=False)ware das richtig ??:
$hProcess = "rcon14.exe"
$pCodePtr = 0x443e80Mal angenommen das wäre so richtig, wie geht es dann weiter ? - Wie sende ich meine Befehle über diesen Thread dann an die Konsole ???
[autoit]#include-once
[/autoit][autoit][/autoit][autoit]
#include <_ProcessFunctions.au3> ; _ProcessIs32Bit(), _ProcessIs64Bit()
#include <_ProcessUndocumented.au3> ; _ProcessUDGetSubSystemInfo()
#include <_ThreadFunctions.au3> ; for setting $THREAD_LAST_TID (user will need this module for control too)
; ===================================================================================================================
; <_ProcessCreateRemoteThread.au3>
;
; One function to create a Thread in a Remote (external) Process.
; This function checks the Process SubSystem to make sure its not a Native Process (driver) that
; is being injected into, avoiding potential BSOD's.
; Technically these processes can be injected into (see InjLib), but require a lot of jumping throug hoops.
; Also, bit-mode is checked to make sure it matches the given Process, as this can cause a crash as well.
; There *is* an option to inject into a 32-bit Process (32-bit code only!) from a 64-bit process though.
;
; Functions:
; _ProcessCreateRemoteThread() ; create a Thread in another Process
;
; References:
; "InjLib - A Library that implements remote code injection for all Windows versions - CodeProject"
; @ http://www.codeproject.com/kb/library/InjLib.aspx
; MSDN, NTInternals
;
; Author: Ascend4nt
; ===================================================================================================================; ===================================================================================================================
[/autoit][autoit][/autoit][autoit]
; -------------------- GLOBAL CALL INFORMATION VARIABLES --------------------
; ===================================================================================================================; Last Method: 1 = normal, -1 = Undocumented. Last TID = Thread ID of last created Thread
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
Global $REMOTE_THREAD_LAST_METHOD=0,$REMOTE_THREAD_LAST_TID=0; ===================================================================================================================
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
; -------------------- MAIN FUNCTION --------------------
; ===================================================================================================================; ===================================================================================================================
[/autoit][autoit][/autoit][autoit]
; Func _ProcessCreateRemoteThread($hProcess,$pCodePtr,$vParam=0,$bCreateSuspended=False,$iUndocumented=0,$bWow64Code=False))
;
; Creates a Thread in a Remote Process that has had code injected into allocated memory.
; See "_ProcessFunctions.au3" for calls to open a process, allocate memory, read and write to the Process,
; and later free memory in the Process. See '_ThreadFunctions' for functions to Suspend/Resume/Terminate and
; get an Exit Code from the Thread.
;
; Note this *REQUIRES* the Process to call 'ExitThread' when exiting when using the alternate 'RtlCreateUserThread'
; (Otherwise it may not terminate correctly, and the Exit Code will be lost)
;
; ALSO IMPORTANT!! Do NOT attempt to inject code into Processes with a different bit-mode than THIS Process.
; I *do* allow 64-bit to 32-bit Process code injection with $bWow64Code=True, but it had BETTER be 32-bit code!
; (also see in-code notes)
;
; $hProcess = Process handle of the Process to create a Remote Thread in
; NOTE: Process must have been Opened with these attributes (0x043A total):
; PROCESS_CREATE_THREAD, PROCESS_QUERY_INFORMATION, PROCESS_VM_OPERATION, PROCESS_VM_WRITE, and PROCESS_VM_READ;
; $pCodePtr = pointer to Code Address where Thread to execute is located at
; NOTE: Memory must have been allocated using _ProcessMemoryAlloc() with $PAGE_EXECUTE_READWRITE access
; $vParam = Parameter to pass to Thread (only 1 is allowed) [32-bit on x86, 64-bit on x64]
; $bCreateSuspended = If True, create the Thread and put it in a suspended state immediately.
; If False (default), it will execute immediately.
; $iUndocumented = Determines usage of 'Undocumented' API call 'RtlCreateUserThread'. Possible values:
; 1 = Use only if normal method does not work
; 0 = (default): do NOT use the Undocumented method (if the regular method fails)
; -1 = FORCE use of this method (skipping regular method)
; $bWow64Code = If True, and *this* process is running in 64-bit mode, and the process being injected into is running
; in 32-bit mode, this will allow the code to try executing despite the difference in bit-modes. The code had
; better be 32-bit (with optional embedded 'Heavens Gate' code), but do not pass pointers to 64-bit module functions
; (like the 64-bit 'ntdll.dll' and 'wow64' interface DLL's). Pointers inside the Process's 32-bit address space
; (32-bit modules or allocated memory) *can* be truncated down to 32-bit. This is due to the requirement that
; any address within a 32-bit Process's address space MUST be 32-bit and accessible to the application
; (existing in its address space), so truncating should not be a problem.
;
; Recommended: at the minimum, _RemoteThreadXBase functions for setting up code and data and executing it.
;
; Returns:
; Success: Thread Handle, and @extended = Thread ID, with the following variables set:
; $REMOTE_THREAD_LAST_METHOD is set: -1 = Undocumented Thread creation, 1 = Regular Thread Creation
; $REMOTE_THREAD_LAST_TID & $THREAD_LAST_TID set: Thread ID # (same as @extended)
; Failure: 0, with @error set:
; @error = 1 = invalid parameter
; @error = 2 = DLLCall error, @extended = DLLCall @error code (see AutoIT help)
; @error = 3 = 0 Returned from API call (failure - call GetLastError for info)
; @error = 6 = Undocumented API call reported failure (not 'STATUS_SUCCESS'). NTSTATUS code will be returned in @extended
; @error = -11 = Trying to create a Thread in a 'Native System' (driver) Process. This would cause BSOD's
; unless the code is specially tailored to run in that type of Process. (safety precaution)
; @error = 3264 = Can't run 32-bit code in a 64-bit Process
; (normally should only get this if both Process's are 64-bit but $bWow64Code=True)
; @error = 6432 = Can't run 64-bit code in a 32-bit Process, unless its x86 32-bit Code ($bWow64Code=True)
;
; Author: Ascend4nt
; ===================================================================================================================Func _ProcessCreateRemoteThread($hProcess,$pCodePtr,$vParam=0,$bCreateSuspended=False,$iUndocumented=0,$bWow64Code=False)
[/autoit][autoit][/autoit][autoit]
If Not IsPtr($hProcess) Or Not IsPtr($pCodePtr) Then Return SetError(1,0,0);~ ConsoleWrite("_ProcessCreateRemoteThread called. $hProcess="&$hProcess&", $pCodePtr="&$pCodePtr&", $vParam="&$vParam& _
[/autoit][autoit][/autoit][autoit]
;~ ", $bCreateSuspended="&$bCreateSuspended&", $bForceRtl="&$bForceRtl&@CRLF)
Local $iAttrib,$aRet,$stClientID
#cs
; -------------------------------------------------------------------------------------------------
; Injecting into Native System Processes/Drivers will cause a crash most times unless the code is
; specially crafted. I believe only Native NTDLL.DLL functions can be called from it,
; and a special exit technique is required, and *possibly* SEH (structured exception handling).
; Its easier to just AVOID ever injecting code into those types of Processes.
; -------------------------------------------------------------------------------------------------
#ce
If _ProcessUDGetSubSystemInfo($hProcess)=1 Then Return SetError(-11,0,0) ; 1 = Native System Process (driver)
#cs
; ---------------------------------------------------------------------------------------------------
; 32/64 Bit-mode incompatibilities?
; ---------------------------------------------------------------------------------------------------
; Also Important - don't inject code into a Process running in a different bit-mode
; While the 'Wow64' layer allows accessing lower-bit modes through API calls,
; actually *injecting* 64-bit code into a 32-bit Process is a recipe for disaster!
; HOWEVER - it is possible to inject 32-bit code from a 64-bit Process into one, as long as it
; uses its own DLL search methods and NO 64-bit pointers. The $bWow64Code param is for this case.
;
; Also, the so-called 'Heaven's Gate' technique *might* make it possible to access 64-bit
; modules/memory from 32-bit mode (NTDLL.DLL and 2 others that aren't very helpful), but
; you will only have access to NTDLL.DLL functions if you can even manage to get 'to' Heaven's Gate.
; With NTDLL.DLL, you could further inject another process and THEN get access to other functions,
; but what are you, nuts?! Either way, the $bWow64Code param should allow that code too.
; ADDITIONALLY, You *could* also try 'Heaven's Gate' *from* a 32-bit Process with _ThreadCreate(),
; however, thats another module altogether.
; ---------------------------------------------------------------------------------------------------
#ce
If @AutoItX64 Then
If _ProcessIs32Bit($hProcess) Then
If Not $bWow64Code Then Return SetError(6432,0,0)
Else
If $bWow64Code Then Return SetError(3264,0,0)
EndIf
Else
If _ProcessIs64Bit($hProcess) Then Return SetError(3264,0,0) ; shouldn't really get here if Access mode set properly
EndIfIf $iUndocumented>=0 Then
[/autoit][autoit][/autoit][autoit]
; Attempt 1: Use the standard API call; Set attributes based on whether the code should be started in a Suspended state or not (leave stack size at default)
[/autoit][autoit][/autoit][autoit]
If $bCreateSuspended Then
$iAttrib=4 ; CREATE_SUSPENDED = 4
Else
$iAttrib=0 ; thread starts immediately
EndIf$aRet=DllCall($_COMMON_KERNEL32DLL,"handle","CreateRemoteThread","handle",$hProcess,"ptr",0,"ulong_ptr",0, _
[/autoit][autoit][/autoit][autoit]
"ptr",$pCodePtr,"ulong_ptr",$vParam,"dword",$iAttrib,"dword*",0)
If @error Then Return SetError(2,@error,0)
ConsoleWrite("CreateRemoteThread return: handle:"&$aRet[0]&" Thread ID:"&$aRet[7]&@CRLF)
If $aRet[0] Then
$REMOTE_THREAD_LAST_METHOD=1
$THREAD_LAST_TID=$aRet[7] ; save Thread ID
$REMOTE_THREAD_LAST_TID=$aRet[7]
Return SetExtended($aRet[7],$aRet[0]) ; Thread ID in extended
EndIf
If $iUndocumented=0 Then Return SetError(3,0,0) ; not allowed to attempt Undocumented version?
EndIf; Failure on Attempt 1, or $iUndocumented<0: Use the 'undocumented' API call
[/autoit][autoit][/autoit][autoit]
; Note this *REQUIRES* the Process to call 'ExitThread' to exit in order to get a proper Exit code$stClientID=DllStructCreate("ulong_ptr;ulong_ptr") ; CLIENT_ID structure (Process ID, Thread ID)
[/autoit][autoit][/autoit][autoit]$aRet=DllCall($_COMMON_NTDLL,"long","RtlCreateUserThread","handle",$hProcess,"ptr",0,"bool",$bCreateSuspended,"ulong",0, _
[/autoit][autoit][/autoit][autoit]
"ulong*",0,"ulong*",0,"ptr",$pCodePtr,"ulong_ptr",$vParam,"handle*",0,"ptr",DllStructGetPtr($stClientID))
If @error Then Return SetError(2,@error,0)If $aRet[0] Then Return SetError(6,$aRet[0],0) ; Not STATUS_SUCCESS? Return with NTSTATUS in @extended
[/autoit][autoit][/autoit][autoit]$THREAD_LAST_TID=DllStructGetData($stClientID,2) ; get Thread ID #
[/autoit][autoit][/autoit][autoit]
;~ ConsoleWrite("Status-success returned from RtlCreateUserThread(). StackReserved value:"&$aRet[5]&", StackCommit value:"&$aRet[6]& _
;~ ", Handle:"&$aRet[9]&", Thread ID#:"&$THREAD_LAST_TID&", Process ID#:"&DllStructGetData($stClientID,1)&@CRLF)
$REMOTE_THREAD_LAST_METHOD=-1
$REMOTE_THREAD_LAST_TID=$THREAD_LAST_TIDReturn SetExtended($THREAD_LAST_TID,$aRet[9]) ; Thread ID in extended
[/autoit]
EndFunc -
danke ich hab mich zwar noch für keine lösung entschieden, aber die anregungen genügen
-
he leute,
ich zerbreche mir gerade den Kopf darüber einen PC zuverlässig identifizieren zu können.
So recht einfallen tut mir nur die möglichkeit aus den hardwarekomponenten etwas zu generieren.
Die wechseln ja meist nicht oft bzw wäre das in kauf zu nehmen.
Das nächste wäre dann die umsetzung. Wie lese ich den aus komponenten diese eindeutigen infos aus hmmmm ? -
-
natürlich sind mir deine funktionen geläufig, evtl hab ich auch nur alle diese funktionen immer verkannt, aber ich sehe da immer "titel des fensters" als pflichtangabe. genau der ist ja variabel bzw den würde ich gerne gegen ein handle austauschen. gibt es denn die möglichkeit hier einfach das handle statt dessen zu verwenden ?
-
-
guten abend liebe leute,
ich habe mal wieder ein problem dessen lösung ich einfach nicht bewältige.
ich habe ein recht schlichtes win-consolenfenter in welches mein script befehle sendet.
nun passiert es aus mir unerklärlchen gründen, auf einigen rechnern, dass der titel
des fensters auf einmal wechselt. ich habe verzweifelt ursachenforschung betrieben,
konnte aber nicht wirklich herausfinden wann das passiert, warum und warum auf
einigen rechnern nicht. das problem daran ist, dass ich in dem moment wo der titel
wechselt keine möglichekeit mehr habe befehle an das fenster zu senden. :(((
welche möglichkeiten habe ich, den titel zuverlässig auszulesen ?
im speicher hab ich schon herumgesucht, doch leider bleibt dort immer nur der alte/erste titel an
der stelle die ich betrachtet habe .... bzw finde ich nix verwertbares.
wenn ich zuverlässig befehle senden will, dann sollte es einigermaßen schnell gehen den
titel zu ermitteln, so das ich es vor jedem befehl prüfen kann.
danke für die mühe. -
ich bin auch gegen closen! aber meiner erfahrung nach wird sich hier trotzdem kaum ein qualifizierter / profi mehr zu dem thema äußern ...scheint wie eine phobie zu sein wenn du gewisse wörter in einer kombination erwähnst. man kennt das ja von geheimdiensten z.B. "präsident & bombe" hier ist es halt z.B. "spiel & manipulation" (es muss nicht mal stimmen, aber hilfe wird trotzdem verweigert) ....also versuchs im autobot-forum....
-
ich habe mich noch nicht mit deiner thematik oder überhaupt damit beschätigt packete abzufangen oder zu manipulieren.
ich denke allerdings du solltest deine frage eher im autobot forum stellen und nicht hier. -
der gevatter hats gelöst (post 4)
au man war das wieder eine einfache lösung
danke ebenso an alle beteiligten für die bemühungen. -
da hast du zwar recht (Er hat einige sogar mehrfach), aber leider ist ihm damit nicht geholfen.
-
ich würde gerne wissen wie ich aus hex strings (in den dem fall 64 bit):
CD 4C 18 F7 01 00 10 01
den uint ermitteln kann ? dieser müsste so lauten:
76561202105830605danke
-
-
hat denn keiner eine idee ?