Prozess_Analysierer

  • Hi,
    also ich beschreibe einfach mal was mein Programm macht. Es überprüft jeden Prozess auf eventuelle Bedrohung. Als 1. Ist es eine Windowsdatei, wenn ja wird es automatisch zu erlaubten Prozessen hinzugefügt (die Datei heißt Pfad.txt und ist für XP ausgelegt, weil ich XP habe ^^ aber kann beliebig erweitert werden) wenn es keine Windowsdatei ist dann prüft es ob es eventuell ein Spiel ist (anhand der CPU-Auslastung des Prozesses wenn ein Spiel ist dann wird es automatisch erlaubt), wenn es kein Spiel ist dann analysiert es 4 Kriterien:

    1. Fenstername (Bedrohung wenn kein Fenstername)
    2. Autostart (Bedrohung wenn es sich automatisch bei Windowsstart öffnet)
    3. Internetverbindung (Bedrohung wenn es eine Verbindung zum Internet herstellt)
    4. Firewalleintrag (Bedrohung wenn es einen Firewalleintrag zum Prozess gibt)

    Wenn es weniger als 2 Kriterien erfüllt dann wird es automatisch zu erlaubten Programmen hinzugefügt, aber wenn mehr 2 der oben angegeben Kriterien zutreffen dann wird über ein GUI dargestellt wo sich die Datei befindet inclusive der 4 Kriterien danach muss der Benutzer entscheiden ob es gut oder böse is, wenn böse kann es den Prozess stoppen und immer wenn es wiederkommt wird der Prozess beendet. Naja im groben und ganzen wars das eigentlich.
    In dem Archiv sind noch n Paar Sachen wie Icons und 1 Wavedatei, könnt ihr in den Windowsordner kopieren, müsst ihr aber net

    Bei Fragen, Anregungen oder Kritik einfach posten :)
    Ich habe mein Programm liebevoll Prozess_Security genannt ^^

    Hier ist der Source aber ist auch nochmal im Archiv enthalten.

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=..\..\..\..\..\Programme\TuneUp Utilities 2009\Data\ico_alpha_cmDisplayStartmenuForm_il_8_32x32.ico
    #AutoIt3Wrapper_Outfile=Prozess_Security.exe
    #AutoIt3Wrapper_UseUpx=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    $P = ProcessList("Prozess_Security.exe")
    If $P[0][0] > 1 Then Exit
    ;Opt("TrayMenuMode", 1) | Normalerweise aktiviert
    FileDelete(@WindowsDir & "Firewall.txt")
    FileDelete(@WindowsDir & "Firewall2.txt")
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <Sound.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Process.au3>
    #include <Array.au3>
    #include <Guiedit.au3>
    $Warnung = _SoundOpen(@WindowsDir & "\Icon\Warnung.wav")
    ProcessSetPriority("Prozess_Security.exe", 4)
    TraySetToolTip("Prozess_Security")
    $Len1 = StringLen(@HomeDrive & "\WINDOWS\")
    $Len2 = StringLen(@HomeDrive & "\Dokumente und Einstellungen\")
    _Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Programmstart")
    $Ini = @WindowsDir & '\Prozesse.ini'
    $Gruen = @WindowsDir & "\Icon\Grün.ico"
    $Gelb = @WindowsDir & "\Icon\Gelb.ico"
    $Rot = @WindowsDir & "\Icon\Rot.ico"
    $Orange = @WindowsDir & "\Icon\Orange.ico"
    Global $l, $Reg_Len, $Reg, $Inet_Len, $Inet, $Fire_Len, $Fire, $Fen_Len, $Fen, $File_Read
    If Not FileExists($Ini) Then
    IniWrite($Ini, "Immer", "explorer.exe", @WindowsDir & "\explorer.exe")
    IniWrite($Ini, "Status", "AUTOEXEC", FileGetSize(@HomeDrive & "\AUTOEXEC.bat"))
    EndIf
    _Whileschleife()
    Func _Whileschleife()
    While 1
    Global $Prozesse = ProcessList()
    If $l = $Prozesse[0][0] Then
    Sleep(40)
    Else
    $l = $Prozesse[0][0]
    TraySetIcon($Gelb)
    For $k = 2 To $l
    $PID = $Prozesse[$k][1]
    If $Prozesse[$k][0] = "Prozess_Security.exe" Or $Prozesse[$k][0] = "System" Or $Prozesse[$k][0] = "csrss.exe" Or $Prozesse[$k][0] = "svchost.exe" Then
    Else
    Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', 0x0410, 'int', 0, 'int', $PID)
    If $aProc[0] = 0 Then $Prozess_Pfad = "Nicht ermittelbar!"
    Local $vStruct = DllStructCreate('int[1024]')
    DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
    Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameExW', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'wstr', '', 'int', 2048)
    If $aReturn[0] = 0 Then $Prozess_Pfad = "Nicht ermittelbar!"
    $Prozess_Pfad = $aReturn[3]
    $Read_Ini = IniReadSection($Ini, "Block")
    If Not @error Then
    For $a = 1 To $Read_Ini[0][0]
    If IniRead($Ini, "Block", $Read_Ini[$a][1], "") = $Prozess_Pfad Then
    If ProcessExists($Read_Ini[$a][0]) Then
    TraySetIcon($Rot)
    ProcessClose($Read_Ini[$a][0])
    Sleep(100)
    If Not ProcessExists($Read_Ini[$a][0]) Then
    _Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Prozess " & $Read_Ini[$a][0] & " geblockt")
    $l = 0
    _Whileschleife()
    Else
    _Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Prozess " & $Read_Ini[$a][0] & " konnte nicht geblockt werden")
    $l = 0
    _Whileschleife()
    EndIf
    Sleep(1000)
    EndIf
    EndIf
    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If IniRead($Ini, "Immer", $Prozesse[$k][0], "") <> $Prozess_Pfad Then
    $P = ProcessList($Prozesse[$k][0])
    If $P[0][0] = 1 Then
    _Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Prozess " & $Prozesse[$k][0] & " nicht bekannt")
    _Unbekannt($Prozesse[$k][0], $Prozess_Pfad, $PID)
    EndIf
    EndIf
    EndIf
    Next
    If IniRead($Ini, "Status", "AUTOEXEC", "") = FileGetSize(@HomeDrive & "\AUTOEXEC.bat") Then
    Else
    $File = FileOpen(@HomeDrive & "AUTOEXEC.bat", 0)
    $Text = FileRead($File)
    MsgBox(16, "Autoexec.bat wurde geändert!!!", "Aktueller Inhalt:" & @CRLF & @CRLF & $Text)
    IniWrite($Ini, "Status", "AUTOEXEC", FileGetSize(@HomeDrive & "\AUTOEXEC.bat"))
    EndIf
    _Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] " & $Prozesse[0][0] & " Prozesse erfolgreich kontrolliert")
    TraySetIcon($Gruen)
    EndIf
    WEnd
    EndFunc ;==>_Whileschleife

    [/autoit] [autoit][/autoit] [autoit]

    Func _Unbekannt($Prozessname, $Pfad, $PID)
    $Gef = 0
    TraySetIcon($Orange)
    $Win = Windows($Pfad)
    $Win_Len = StringLen($Win)
    If $Win_Len <> 1 Or StringInStr($Pfad, "\SystemRoot\System32\smss.exe") Or StringInStr($Pfad, "\??\" & @HomeDrive & "\WINDOWS\system32\winlogon.exe") Or $Prozessname == "alg.exe" Then
    $l = 0
    IniWrite($Ini, "Immer", $Prozessname, $Pfad)
    _Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Systemprozess " & $Prozessname & " automatisch erlaubt")
    _Whileschleife()
    EndIf
    Sleep(100)
    $Win = Windows($Pfad)
    $Win_Len = StringLen($Win)
    If $Win_Len <> 1 Or StringInStr($Pfad, "\SystemRoot\System32\smss.exe") Or StringInStr($Pfad, "\??\" & @HomeDrive & "\WINDOWS\system32\winlogon.exe") Or $Prozessname == "alg.exe" Then
    $l = 0
    IniWrite($Ini, "Immer", $Prozessname, $Pfad)
    _Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Systemprozess " & $Prozessname & " automatisch erlaubt")
    _Whileschleife()
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ProcessSetPriority("Prozess_Security.exe", 2)
    Sleep(1000)
    $Usage = _ProcessListCPU("", 0)
    $P = _ArraySearch($Usage, StringLeft($Prozessname, StringLen($Prozessname) - 4))
    If $P <> -1 Then
    Sleep(1000)
    If $Usage[$P][2] > 20 Then
    Sleep(1000)
    $Usage = _ProcessListCPU("", 0)
    $P = _ArraySearch($Usage, StringLeft($Prozessname, StringLen($Prozessname) - 4))
    If $P <> -1 Then
    If $Usage[$P][2] > 50 Then
    $l = 0
    IniWrite($Ini, "Immer", $Prozessname, $Pfad)
    _Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Prozess " & $Prozessname & " automatisch als Spiel erkannt")
    _Whileschleife()
    EndIf
    EndIf
    EndIf
    EndIf
    ProcessSetPriority("Prozess_Security.exe", 4)
    $Reg = Reg($Prozessname)
    $Fen = _PID2WinTitle($PID)
    $Fire = Firewall($Prozessname)
    $Inet = Inet($Prozessname)
    $Fen_Len = StringLen($Fen)
    $Reg_Len = StringLen($Reg)
    If $Fen_Len = 1 Then $Fen = _PID2WinTitle($PID)
    If $Reg_Len = 1 Then $Reg = Reg($Prozessname)

    [/autoit] [autoit][/autoit] [autoit]

    $Fen_Len = StringLen($Fen)
    $Reg_Len = StringLen($Reg)
    $Inet_Len = StringLen($Inet)
    $Fire_Len = StringLen($Fire)

    [/autoit] [autoit][/autoit] [autoit]

    If $Fen_Len = 1 Then $Gef += 1
    If $Reg_Len <> 1 Then $Gef += 1
    If $Inet_Len <> 1 Then $Gef += 1
    If $Fire_Len <> 1 Then $Gef += 1

    [/autoit] [autoit][/autoit] [autoit]

    If $Gef >= 2 Then
    Gefahr($Prozessname, $Pfad, $PID)
    Else
    IniWrite($Ini, "Immer", $Prozessname, $Pfad)
    _Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Prozess " & $Prozessname & " besteht keine Gefahr")
    EndIf
    EndFunc ;==>_Unbekannt

    [/autoit] [autoit][/autoit] [autoit]

    Func Gefahr($Prozessname, $Pfad, $PID)
    _SoundPlay($Warnung)
    $Form = GUICreate($Prozessname & " (PID:" & $PID & ")", 754, 314, -1, -1)
    $Label1 = GUICtrlCreateLabel("", 8, 8, 4, 4)
    $Pfad_Auswertung = GUICtrlCreateLabel("", 584, 48, 52, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Internet = GUICtrlCreateLabel("", 224, 128, 34, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Label3 = GUICtrlCreateLabel("baut Verbindung zum Internet auf:", 8, 128, 199, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Label4 = GUICtrlCreateLabel("Prozesspfad:", 8, 48, 80, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Label2 = GUICtrlCreateLabel("Autostarteintrag:", 8, 168, 100, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Autostart = GUICtrlCreateLabel("", 128, 168, 200, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Label5 = GUICtrlCreateLabel("Analyse", 8, 8, 59, 22)
    GUICtrlSetFont(-1, 12, 400, 0, "arial")
    $Label6 = GUICtrlCreateLabel("Bewertung auf mögliche Infektion", 496, 8, 231, 22)
    GUICtrlSetFont(-1, 12, 400, 0, "arial")
    $Internet_Auswertung = GUICtrlCreateLabel("Internet", 584, 128, 47, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Autostart_Auswertung = GUICtrlCreateLabel("Autostart", 584, 168, 57, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Label8 = GUICtrlCreateLabel("Fenstername:", 8, 88, 84, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Label9 = GUICtrlCreateLabel("Firewalleintrag:", 8, 208, 91, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Firewall = GUICtrlCreateLabel("", 120, 208, 34, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Firewall_Auswertung = GUICtrlCreateLabel("Firewall", 584, 208, 48, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Fenster_Auswertung = GUICtrlCreateLabel("Fenster", 584, 88, 48, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Label10 = GUICtrlCreateLabel("______________", 552, 248, 116, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Label11 = GUICtrlCreateLabel("Gesamtbewertung:", 448, 280, 113, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Gesamtbewertung = GUICtrlCreateLabel("", 584, 280, 50, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "arial")
    $Button1 = GUICtrlCreateButton("Erlauben", 8, 278, 115, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Prozess beenden", 136, 278, 115, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Immer blocken", 264, 278, 115, 25, $WS_GROUP)
    $Edit1 = GUICtrlCreateEdit($Pfad, 96, 40, 377, 33, $ES_READONLY)
    GUICtrlSetFont(-1, 8, 400, 0, "arial")
    $Edit2 = GUICtrlCreateEdit("", 96, 80, 377, 33, $ES_READONLY)
    GUICtrlSetFont(-1, 8, 400, 0, "arial")

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    WinActivate($Form)
    WinSetOnTop($Form, "", 1)

    [/autoit] [autoit][/autoit] [autoit]

    If StringInStr(@HomeDrive & "\WINDOWS\", StringLeft($Pfad, $Len1)) Or StringInStr(@HomeDrive & "\Dokumente und Einstellungen\", StringLeft($Pfad, $Len2)) Then
    If StringLeft($Pfad, $Len2) <> $Pfad Or StringLeft($Pfad, $Len1) <> $Pfad Then
    GUICtrlSetData($Pfad_Auswertung, "10")
    Else
    GUICtrlSetData($Pfad_Auswertung, "0")
    EndIf
    Else
    GUICtrlSetData($Pfad_Auswertung, "0")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $Reg_Len <> 1 Then
    GUICtrlSetData($Autostart, StringLeft($Reg, StringLen($Reg) - 3))
    GUICtrlSetData($Autostart_Auswertung, StringRight($Reg, 2))
    Else
    GUICtrlSetData($Autostart, "NEIN")
    GUICtrlSetData($Autostart_Auswertung, "0")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $Inet_Len <> 1 Then
    GUICtrlSetData($Internet, StringLeft($Inet, StringLen($Inet) - 3))
    GUICtrlSetData($Internet_Auswertung, StringRight($Inet, 2))
    Else
    GUICtrlSetData($Internet, "NEIN")
    GUICtrlSetData($Internet_Auswertung, "0")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $Fire_Len <> 1 Then
    GUICtrlSetData($Firewall, StringLeft($Fire, StringLen($Fire) - 3))
    GUICtrlSetData($Firewall_Auswertung, StringRight($Fire, 2))
    Else
    GUICtrlSetData($Firewall, "NEIN")
    GUICtrlSetData($Firewall_Auswertung, "0")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $Fen_Len <> 1 Then
    GUICtrlSetData($Edit2, $Fen)
    GUICtrlSetData($Fenster_Auswertung, "0")
    Else
    GUICtrlSetData($Edit2, "")
    GUICtrlSetData($Fenster_Auswertung, "30")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Gesamtbewertung, GUICtrlRead($Pfad_Auswertung) + GUICtrlRead($Autostart_Auswertung) + GUICtrlRead($Internet_Auswertung) + GUICtrlRead($Firewall_Auswertung) + GUICtrlRead($Fenster_Auswertung))

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(40)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button1
    GUIDelete($Form)
    IniWrite($Ini, "Immer", $Prozessname, $Pfad)
    _Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] " & $Prozessname & " erlaubt")
    $l = 0
    _Whileschleife()
    Case $Button2
    GUIDelete($Form)
    ProcessClose($Prozessname)
    Sleep(100)
    $l = 0
    _Whileschleife()
    Case $Button3
    GUIDelete($Form)
    IniWrite($Ini, "Block", $Prozessname, $Pfad)
    ProcessClose($Prozessname)
    _Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] " & $Prozessname & " zu Blocken hinzugefügt")
    $l = 0
    _Whileschleife()
    EndSwitch
    WEnd
    EndFunc ;==>Gefahr

    [/autoit] [autoit][/autoit] [autoit]

    Func Reg($Prozessname)
    For $k = 1 To 1000
    $var = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $k)
    If @error <> 0 Then ExitLoop
    $var2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $var)
    If StringInStr($var, $Prozessname) Or StringInStr($var2, $Prozessname) Then Return "JA (HKLM/Run) 25"
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $k = 1 To 1000
    $var = RegEnumVal("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $k)
    If @error <> 0 Then ExitLoop
    $var2 = RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $var)
    If StringInStr($var, $Prozessname) Or StringInStr($var2, $Prozessname) Then Return "JA (HKCU/Run) 20"
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $k = 1 To 1000
    $var = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices", $k)
    If @error <> 0 Then ExitLoop
    $var2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices", $var)
    If StringInStr($var, $Prozessname) Or StringInStr($var2, $Prozessname) Then Return "JA (HKLM/RunServices) 25"
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $k = 1 To 1000
    $var = RegEnumVal("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices", $k)
    If @error <> 0 Then ExitLoop
    $var2 = RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices", $var)
    If StringInStr($var, $Prozessname) Or StringInStr($var2, $Prozessname) Then Return "JA (HKCU/RunServices) 20"
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $k = 1 To 1000
    $var = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", $k)
    If @error <> 0 Then ExitLoop
    $var2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", $var)
    If StringInStr($var, $Prozessname) Or StringInStr($var2, $Prozessname) Then Return "JA (HKLM/RunOnce) 25"
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $k = 1 To 1000
    $var = RegEnumVal("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", $k)
    If @error <> 0 Then ExitLoop
    $var2 = RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", $var)
    If StringInStr($var, $Prozessname) Or StringInStr($var2, $Prozessname) Then Return "JA (HKCU/RunOnce) 20"
    Next
    EndFunc ;==>Reg

    [/autoit] [autoit][/autoit] [autoit]

    Func Inet($Prozess)
    FileDelete(@WindowsDir & "\Firewall.txt")
    _RunDOS("netstat -b >" & @WindowsDir & "\Firewall.txt")
    _FileReadToArray(@WindowsDir & "\Firewall.txt", $File_Read)
    $Array = _ArraySearch($File_Read, "[" & $Prozess & "]", 0, 0, 1, 1, 0)
    If $Array <> -1 Then Return "JA 30"
    FileDelete(@WindowsDir & "\Firewall.txt")
    EndFunc ;==>Inet

    [/autoit] [autoit][/autoit] [autoit]

    Func _PID2WinTitle($PID)
    $Liste = WinList()
    For $i = 1 To $Liste[0][0]
    If $PID = WinGetProcess($Liste[$i][0]) Then Return $Liste[$i][0]
    Next
    EndFunc ;==>_PID2WinTitle

    [/autoit] [autoit][/autoit] [autoit]

    Func Firewall($Prozess)
    FileDelete(@WindowsDir & "\Firewall2.txt")
    _RunDOS("netsh firewall show config >" & @WindowsDir & "\Firewall2.txt")
    _FileReadToArray(@WindowsDir & "\Firewall2.txt", $File_Read)
    $Array = _ArraySearch($File_Read, $Prozess, 0, 0, 1, 1, 0)
    If $Array <> -1 Then Return "JA 35"
    FileDelete(@WindowsDir & "\Firewall2.txt")
    EndFunc ;==>Firewall

    [/autoit] [autoit][/autoit] [autoit]

    Func Windows($Pfad_Windows)
    $Pfad_Right = StringRight($Pfad_Windows, StringLen($Pfad_Windows) - 3)
    _FileReadToArray(@WindowsDir & "\Pfad.txt", $File_Read)
    $Array = _ArraySearch($File_Read, $Pfad_Right)
    If $Array <> -1 Then Return "JAJAJA"
    EndFunc ;==>Windows

    [/autoit] [autoit][/autoit] [autoit]

    Func _Log($Text)
    If FileExists(@HomeDrive & "\Prozess_Security_Log.txt") Then
    $File_Open = FileOpen(@HomeDrive & "\Prozess_Security_Log.txt", 9)
    FileWrite(@HomeDrive & "\Prozess_Security_Log.txt", @CRLF & $Text)
    FileClose($File_Open)
    Else
    $File_Open = FileOpen(@HomeDrive & "\Prozess_Security_Log.txt", 9)
    FileWrite(@HomeDrive & "\Prozess_Security_Log.txt", $Text)
    FileClose($File_Open)

    [/autoit] [autoit][/autoit] [autoit]

    EndIf
    EndFunc ;==>_Log

    [/autoit] [autoit][/autoit] [autoit]

    Func _ProcessStop($process)
    $processid = ProcessExists($process)
    If $processid Then
    $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
    $i_sucess = DllCall("ntdll.dll", "int", "NtSuspendProcess", "int", $ai_Handle[0])
    DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
    If IsArray($i_sucess) Then
    Return 1
    Else
    SetError(1)
    Return 0
    EndIf
    Else
    SetError(2)
    Return 0
    EndIf
    EndFunc ;==>_ProcessStop

    [/autoit] [autoit][/autoit] [autoit]

    Func _ProcessListCPU($strProcess = "", $iSampleTime = 500, $sComputerName = @ComputerName)
    Dim $aResultSet[1][3]

    [/autoit] [autoit][/autoit] [autoit]

    If $strProcess = 0 And IsNumber($strProcess) Then $strProcess = "Idle"
    If $iSampleTime = "" And IsString($iSampleTime) Then $iSampleTime = 500
    If $sComputerName = "" Then $sComputerName = @ComputerName

    [/autoit] [autoit][/autoit] [autoit]

    If Not IsDeclared("aProcess") And $iSampleTime = 0 Then
    $bFirstTimeInLoopMode = 1
    Else
    $bFirstTimeInLoopMode = 0
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If Not IsDeclared("aProcess") Then

    [/autoit] [autoit][/autoit] [autoit]

    Global $aProcess[10000][10]

    [/autoit] [autoit][/autoit] [autoit]

    Global $objWMIService

    [/autoit] [autoit][/autoit] [autoit]

    $objWMIService = ObjGet("winmgmts:\\" & $sComputerName & "\root\CIMV2")
    If @error Then
    $aResultSet[0][0] = -2
    Return $aResultSet
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $iSampleTime Or $bFirstTimeInLoopMode = 1 Then
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_PerfProc_Process")

    [/autoit] [autoit][/autoit] [autoit]

    For $objItem In $colItems

    [/autoit] [autoit][/autoit] [autoit]

    $iPID = $objItem.IDProcess
    If $iPID = 0 And $objItem.Name = "_Total" Then $iPID = 9999

    [/autoit] [autoit][/autoit] [autoit]

    $aProcess[$iPID][4] = $objItem.PercentProcessorTime
    $aProcess[$iPID][5] = $objItem.TimeStamp_Sys100NS
    Next

    [/autoit] [autoit][/autoit] [autoit]

    If $objItem = "" Then
    $aResultSet[0][0] = -1
    Return $aResultSet
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Sleep($iSampleTime)
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_PerfProc_Process")

    [/autoit] [autoit][/autoit] [autoit]

    $iCountItems = 0
    $iTotalUsedByName = 0
    $iTotalUsed = 0

    [/autoit] [autoit][/autoit] [autoit]

    For $objItem In $colItems

    [/autoit] [autoit][/autoit] [autoit]

    If $objItem.Name = "_Total" And Not ($strProcess = "_Total") Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    $iPID = $objItem.IDProcess
    If $iPID = 0 And $objItem.Name = "_Total" Then $iPID = 9999
    $aProcess[$iPID][6] = $objItem.PercentProcessorTime
    $aProcess[$iPID][7] = $objItem.TimeStamp_Sys100NS
    $aProcess[$iPID][8] = $aProcess[$iPID][6] - $aProcess[$iPID][4]
    $aProcess[$iPID][9] = $aProcess[$iPID][7] - $aProcess[$iPID][5]
    $aProcess[$iPID][3] = Round(($aProcess[$iPID][8] / $aProcess[$iPID][9]) * 100, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $aProcess[$iPID][4] = $aProcess[$iPID][6]
    $aProcess[$iPID][5] = $aProcess[$iPID][7]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If Not ($objItem.Name = "Idle") And Not ($objItem.Name = "_Total") Then
    $iTotalUsed = $iTotalUsed + $aProcess[$iPID][3]
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If (($strProcess = "") And IsString($strProcess)) Or _
    (StringUpper($strProcess) = StringUpper($objItem.Name)) Or _
    (IsNumber($strProcess) And ($strProcess = $objItem.IDProcess)) Then

    [/autoit] [autoit][/autoit] [autoit]

    $iCountItems += 1
    ReDim $aResultSet[$iCountItems + 1][3]
    $aResultSet[$iCountItems][0] = $objItem.Name
    $aResultSet[$iCountItems][1] = $iPID
    $aResultSet[$iCountItems][2] = $aProcess[$iPID][3]
    $aResultSet[0][0] = $iCountItems

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If Not ($objItem.Name = "Idle") Or ($strProcess = "Idle") Then
    $iTotalUsedByName = $iTotalUsedByName + $aProcess[$iPID][3]
    EndIf
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    If $objItem = "" Then
    $aResultSet[0][0] = -1
    Return $aResultSet
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $aResultSet[0][1] = $iTotalUsed
    $aResultSet[0][2] = $iTotalUsedByName

    [/autoit] [autoit][/autoit] [autoit]

    Return $aResultSet
    EndFunc ;==>_ProcessListCPU

    [/autoit]

    Edit: folgende Änderung:

    Spoiler anzeigen
    [autoit]


    If IniRead($Ini, "Immer", $Prozesse[$k][0], "") <> $Prozess_Pfad Then
    $P = ProcessList($Prozesse[$k][0])
    If $P[0][0] = 1 Then
    _Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Prozess " & $Prozesse[$k][0] & " nicht bekannt")
    _Unbekannt($Prozesse[$k][0], $Prozess_Pfad, $PID)
    EndIf
    EndIf

    [/autoit]
  • Undzwar wird so z.B. bei ping.exe keine Prüfung durchgeführt da sie ja zu Windows gehört. Auch schnellaufpopende Programme wie srundll.exe werden somit nicht zur Prüfung geschickt. Manchmal hängt sich nämlich netstat -b auf oder dauert ewig ka warum, kennt vielleicht jemand noch ne andere Möglichkeit wie man prüfen kann ob ein Programm ein Zugriff zum Internet hat?

    Pfad.txt = sind die Pfade von Windows die immer erlaubt werden
    Iconordner = Damit man sieht wo sich das Programm gerade befindet (Grün = alles OK, Gelb = Prüfung der Prozesse, Orange = unbekannter Prozess entdeckt, Rot = Prozess geblockt)
    Warnung.wav = Hab ich von Avast gemobbst damit wenn es das Fenster aufpoppt einen Ton gibt

    Einmal editiert, zuletzt von xXlowXx (22. Oktober 2009 um 16:26)

  • Bug behoben: Doppelte Prozesse wurden nicht korrekt auf Pfad überprüft (Pfad ist leer gewesen)
    Edit Post 1