DLL injector prozess anzeige button

06/29/2011 23:39 lautlosertot#1
Hay ich möchte von diesen source wo ein dll searcher drin ist noch ein butten über den aneren mit dem ich alle prozesse anzeigen lääst und wenn ich auf ein rauf klickt das er in den input eingefügt wird.

Hier der Code:
Quote:
PHP Code:
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_UseX64=n

#RequireAdmin
#include <GUIConstants.au3>

GUICreate("Beispiel", 275, 100)
GUISetBkColor(0xFFFFFF)
GUICtrlCreateLabel("Prozess:", 10, 10, 50, 17)
$I_ProcessName = GUICtrlCreateInput("", 65, 10, 200, 21)
GUICtrlCreateLabel("DLL:", 10, 40, 50, 17)
$I_DllPath = GUICtrlCreateInput("", 65, 40, 150, 21)
$B_SearchDll = GUICtrlCreateButton("...", 225, 40, 40, 25)
$R_Auto = GUICtrlCreateRadio("Automatisch", 10, 75, 75, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$R_Man = GUICtrlCreateRadio("Manuell", 130, 75, 55, 17)
$B_Inject = GUICtrlCreateButton("Injizieren", 190, 70, 75, 25)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState()

$Injected = False

Do
    
$Msg = GUIGetMsg()
    Switch 
$Msg
        
Case $B_SearchDll
            GUICtrlSetData
($I_DllPath, FileOpenDialog("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
($ProcessId, GUICtrlRead($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 - 0 = No error.
;                             
1 = Invalid ProcessId.
;                             
2 = File does not exist.
;                             
3 = File is not a .dll (invalid file).
;                             
4 = Failed to open 'Advapi32.dll'.
;                             
5 = Failed to get the full path.
;                             
6 = Failed to open the process.
;                             
7 = Failed to call 'GetModuleHandle'.
;                             
8 = Failed to call 'GetProcAddress'.
;                             
9 = 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($DllPath, 4) == ".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_Path, 1), "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)
EndFun 
06/30/2011 00:02 RunzelEier#2
so gehts.
ich hatte das in nem combo gemacht, aber sollte ja kein ding sein das umzubauen
PHP Code:
Func _refresh()
    
$process = ProcessList()
    For 
$i = 1 to UBound($process)-1
        GUICtrlSetData
($Combo,$process[$i][0])
    
Next
    _GUICtrlComboBox_SetCurSel
($Combo,0)
EndFunc 
06/30/2011 00:25 KDeluxe#3
Ich würde dafür eine ListView benutzen. Ein neuer Thread war dafür aber nicht nötig.

PHP Code:
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_UseX64=n

#RequireAdmin
#include <GUIConstants.au3>
#include <GUIListView.au3>
#include <ListViewConstants.au3>

#Region MainGUI
$MainGUI = GUICreate("Beispiel", 275, 100)
GUISetBkColor(0xFFFFFF)
GUICtrlCreateLabel("Prozess:", 10, 10, 50, 17)
$I_ProcessName = GUICtrlCreateInput("", 65, 10, 150, 21)
$B_SearchProcess = GUICtrlCreateButton("...", 225, 10, 40, 25)
GUICtrlCreateLabel("DLL:", 10, 40, 50, 17)
$I_DllPath = GUICtrlCreateInput("", 65, 40, 150, 21)
$B_SearchDll = GUICtrlCreateButton("...", 225, 40, 40, 25)
$R_Auto = GUICtrlCreateRadio("Automatisch", 10, 75, 75, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$R_Man = GUICtrlCreateRadio("Manuell", 130, 75, 55, 17)
$B_Inject = GUICtrlCreateButton("Injizieren", 190, 70, 75, 25)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState()
#EndRegion

#Region SubGUI
$SubGUI = GUICreate("Prozesse", 250, 255)
$ListView = GUICtrlCreateListView("Prozess|Prozess ID", 0, 0, 250, 230)
GUICtrlSendMsg(-1, $LVM_SETEXTENDEDLISTVIEWSTYLE, 0, 0x21)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 75)
$B_Process = GUICtrlCreateButton("Prozess auswählen", 0, 230, 250, 25)
#EndRegion

$Injected = False

While Sleep(10)
    
$Msg = GUIGetMsg(1)
    If 
$Msg[1] == $MainGUI Then
        
Switch $Msg[0]
            Case 
$GUI_EVENT_CLOSE
                
Exit
            Case 
$B_SearchProcess
                _GUICtrlListView_DeleteAllItems
($ListView)
                
$ProcessList = ProcessList()
                For 
$i = 1 To $ProcessList[0][0]
                    
GUICtrlCreateListViewItem($ProcessList[$i][0] & "|" & $ProcessList[$i][1], $ListView)
                
Next
                GUISetState
(@SW_SHOW, $SubGUI)
            Case 
$B_SearchDll
                GUICtrlSetData
($I_DllPath, FileOpenDialog("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

    ElseIf 
$Msg[1] == $SubGUI Then
        
Switch $Msg[0]
            Case 
$GUI_EVENT_CLOSE
                GUISetState
(@SW_HIDE, $SubGUI)
            Case 
$B_Process
                $SelectedItem 
= _GUICtrlListView_GetSelectedIndices($ListView, True)
                
GUICtrlSetData($I_ProcessName, _GUICtrlListView_GetItemText($ListView, $SelectedItem[1], 0))
                
GUISetState(@SW_HIDE, $SubGUI)
        EndSwitch
    EndIf

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

    
Sleep(10)
WEnd



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 - 0 = No error.
;                             
1 = Invalid ProcessId.
;                             
2 = File does not exist.
;                             
3 = File is not a .dll (invalid file).
;                             
4 = Failed to open 'Advapi32.dll'.
;                             
5 = Failed to get the full path.
;                             
6 = Failed to open the process.
;                             
7 = Failed to call 'GetModuleHandle'.
;                             
8 = Failed to call 'GetProcAddress'.
;                             
9 = 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($DllPath, 4) == ".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_Path, 1), "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 
07/01/2011 20:59 lautlosertot#4
Danke hatt geklappt