DLL Injection with AutoIt ...

06/19/2011 22:03 Exetra#1
#old
06/21/2011 12:22 Ludder231#2
is this line correct?

PHP Code:
MsgBox(16"Error""Failed to inject" & @CRLF "Error code : " &@error
Should that means:
PHP Code:
MsgBox(16"Error""Failed to inject" & @CRLF "Error code : " &$err
????
06/27/2011 19:41 lautlosertot#3
geht nicht-.-
06/28/2011 14:21 Reeek#4
sag' mal, laut, gehst du in die Schule? Kannst du lesen? Das ist kein Release, der TE hat eine Frage gestellt, weil sein Script eben nicht geht >.<

#vote4IQ-Test beim Registrieren
06/28/2011 14:32 ClOuDy.#5
da war ein kurzer anflug von hackorskillz abgreifen
06/28/2011 18:57 KDeluxe#6
Das Problem mit dem Fehlercode wird wohl an der fehlenden Berechtigung fehlen. Das dürfte eigentlich kein Problem sein, wenn man die Datei als Admin ausführt.

Ich habe aber mal meine UDF genommen und ein Beispiel dafür erstellt:
PHP Code:
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_UseX64=n

#RequireAdmin
#include <GUIConstants.au3>

GUICreate("Beispiel"275100)
GUISetBkColor(0xFFFFFF)
GUICtrlCreateLabel("Prozess:"10105017)
$I_ProcessName GUICtrlCreateInput(""651020021)
GUICtrlCreateLabel("DLL:"10405017)
$I_DllPath GUICtrlCreateInput(""654015021)
$B_SearchDll GUICtrlCreateButton("..."225404025)
$R_Auto GUICtrlCreateRadio("Automatisch"10757517)
GUICtrlSetState(-1$GUI_CHECKED)
$R_Man GUICtrlCreateRadio("Manuell"130755517)
$B_Inject GUICtrlCreateButton("Injizieren"190707525)
GUICtrlSetState(-1$GUI_DISABLE)
GUISetState()

$Injected False

Do
    
$Msg GUIGetMsg()
    Switch 
$Msg
        
Case $B_SearchDll
            GUICtrlSetData
($I_DllPathFileOpenDialog("Dll", @HomeDrive"Dynamic Link Library (*.dll)"3))
        Case 
$R_Auto
            GUICtrlSetState
($B_Inject$GUI_DISABLE)
        Case 
$R_Man
            GUICtrlSetState
($B_Inject$GUI_ENABLE)
        Case 
$B_Inject
            _InjectDll
(ProcessExists(GUICtrlRead($I_ProcessName)), GUICtrlRead($I_DllPath))
            
_Message(@error)
    EndSwitch

    If 
BitAND(GUICtrlRead($R_Auto), $GUI_CHECKED) And Not $Injected Then
        $ProcessId 
ProcessExists(GUICtrlRead($I_ProcessName))
        If 
$ProcessId 0 Then
            _InjectDll
($ProcessIdGUICtrlRead($I_DllPath))
            
_Message(@error)
            
$Injected True
            
;Exit
        EndIf
    EndIf

    
Sleep(10)
Until $Msg == $GUI_EVENT_CLOSE



Func _Message
($ErrorCode)
    If 
$ErrorCode <> 0 Then
        MsgBox
(48"Fehler""Es ist ein Fehler aufgetreten!" & @CRLF "Fehlercode: " & @error)
    Else
        
MsgBox(64"Info""Injektion erfolgreich!")
    EndIf
EndFunc


;=================================================================================================
; Function:            
_InjectDll($ProcessId$DllPath)
Description:        Injects a .dll into a running program.
; Return 
Value(s):    On Success Returns true
;                    On Failure Returns false
;                    @Error No error.
;                             
Invalid ProcessId.
;                             
File does not exist.
;                             
File is not a .dll (invalid file).
;                             
Failed to open 'Advapi32.dll'.
;                             
Failed to get the full path.
;                             
Failed to open the process.
;                             
Failed to call 'GetModuleHandle'.
;                             
Failed to call 'GetProcAddress'.
;                             
Failed to call 'VirtualAllocEx'.
;                             
10 Failed to write the memory.
;                             
11 Failed to create the 'RemoteThread'.
Author(s):        KillerDeluxe
;=================================================================================================

Func _InjectDll($ProcessId$DllPath)
    If 
$ProcessId == 0 Then Return SetError(1""False)
    If 
Not(FileExists($DllPath)) Then Return SetError(2""False)
    If 
Not(StringRight($DllPath4) == ".dll"Then Return SetError(3""False)

    
$Kernel32 DllOpen("kernel32.dll")
    If @
error Then Return SetError(4""False)

    
$DLL_Path DllStructCreate("char[255]")
    
DllCall($Kernel32"DWORD""GetFullPathNameA""str"$DllPath"DWORD"255"ptr"DllStructGetPtr($DLL_Path), "int"0)
    If @
error Then Return SetError(5""False)

    
$hProcess DllCall($Kernel32"DWORD""OpenProcess""DWORD"0x1F0FFF"int"0"DWORD"$ProcessId)
    If @
error Then Return SetError(6""False)

    
$hModule DllCall($Kernel32"DWORD""GetModuleHandleA""str""kernel32.dll")
    If @
error Then Return SetError(7""False)

    
$lpStartAddress DllCall($Kernel32"DWORD""GetProcAddress""DWORD"$hModule[0], "str""LoadLibraryA")
    If @
error Then Return SetError(8""False)

    
$lpParameter DllCall($Kernel32"DWORD""VirtualAllocEx""int"$hProcess[0], "int"0"ULONG_PTR"DllStructGetSize($DLL_Path), "DWORD"0x3000"int"4)
    If @
error Then Return SetError(9""False)

    
DllCall("kernel32.dll""BOOL""WriteProcessMemory""int"$hProcess[0], "DWORD"$lpParameter[0], "str"DllStructGetData($DLL_Path1), "ULONG_PTR"DllStructGetSize($DLL_Path), "int"0)
    If @
error Then Return SetError(10""False)

    
$hThread DllCall($Kernel32"int""CreateRemoteThread""DWORD"$hProcess[0], "int"0"int"0"DWORD"$lpStartAddress[0], "DWORD"$lpParameter[0], "int"0"int"0)
    If @
error Then Return SetError(11""False)

    
DllCall($Kernel32"BOOL""CloseHandle""DWORD"$hProcess[0])
    
DllClose($Kernel32)

    Return 
SetError(0""True)
EndFunc 
Vielleicht hilft es ja.
08/26/2011 01:52 Rolandfrance#7
Very Good KillerDeluxe !!