Prozesse durchgehen mit Timer und überprüfen mit Hash-Liste.

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von Vultrax.

    Prozesse durchgehen mit Timer und überprüfen mit Hash-Liste.

    Hallo

    Zwar habe ich schon 2 mal einen ähnlichen Thread dazu erstellt, allerdings komme ich nicht wirklich auf ein Ergebnis.

    (Vorab: Es geht nur um Normale Benutzer, die versuchen mit Namens Änderung des Schädlichen Programmes, die Sicherung zu umgehen)
    Ich würde gerne mit einen Timer die Prozesse die derzeit laufen überprüfen auf "Nicht erlaubte Programme", der Timer soll die Prozess zugehörige Datei auf den Hash überprüfen, ob dieser in der Hash-Liste steht der "Nicht erlaubten Programme".

    Ablauf wie ich ihn mir vorstelle:
    - Timer läuft und checkt alle 5 sek. die Prozesse des Benutzers.
    - Schädliches Programm wird gestartet.
    - Timer überprüft diesen Prozess (... und checkt ob der Hash dieses Programmes auf der Hash-Liste der "Nicht erlaubten Programme" steht).
    - Der Hash der Prozess zugehörigen Datei steht auf der Liste.
    - Prozess wird beenden und eine Meldung wiedergeben. (Process.Kill)

    Mein Bisheriger Code ist: (Der auf Name des schädlichen Programmes angewiesen ist).

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    2. 'Schutz läuft bereits und checkt ob das eig. Programm gestartet wurde.
    3. Do
    4. Dim ProcessExist = Process.GetProcessesByName("Programm")
    5. If ProcessExist.Count > 0 Then
    6. 'Sollte das eigentliche Programm laufen und ein Prozess mit Name "Drittanbieterprogramm" laufen ..
    7. .. wird dieser Prozess beendet.
    8. For Each Process In System.Diagnostics.Process.GetProcessesByName("Drittanbieterprogramm")
    9. Process.Kill()
    10. 'Hier wird in eine Informationstextbox eine Meldung geschrieben und eine Messagebox erscheint.
    11. Me.TextBox2.Text = Me.TextBox2.Text & "Unerwünschtes Programm blockiert." & vbNewLine
    12. Me.TextBox2.SelectionStart = Me.TextBox2.Text.Length
    13. Me.TextBox2.ScrollToCaret()
    14. MsgBox("Schädliches Programm wurde endeckt und beendet.")
    15. Next
    16. End If
    17. Exit Do
    18. Loop
    19. End Sub


    Ich suche jetzt schon wieder eine halbe Ewigkeit im Internet nach einer Lösung, was ich bislang gefunden habe ist, wie man den Hash einer Datei überprüft, aber nicht wie man das mit dauerhaften checken der Prozessliste in Verbindung bringt.

    Ich hoffe ihr mir da endlich weiterhelfen :)
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    @Vultrax
    Musst nurnoch einen Timer einbauen.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Dim hashlist As New List(Of String)
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. hashlist.Add("80073312") 'Chrome
    6. ListProcesses()
    7. End Sub
    8. Public Sub ListProcesses()
    9. For Each p As Process In Process.GetProcesses
    10. If hashlist.Contains(p.ProcessName.GetHashCode.ToString()) Then
    11. p.Kill()
    12. MessageBox.Show(p.ProcessName & " wurde geschlossen")
    13. Exit For 'Normal nicht nötig, war wegen chrome aber sinnvoll
    14. End If
    15. Next
    16. End Sub
    17. End Class
    Wie finde ich den Hash des Prozesses heraus?

    (Ist dieser Hash trotz Namens Änderung der Datei der dieser Prozess zugehört der selbe? | Wird dieser Hash auch auf anderen Computern dieser sein?)

    Zu dem Code: Da bekomme ich eine Fehlermeldung:
    Das Ereignis "Load" wurde nicht gefunden.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vultrax“ ()

    Siehe hier. Wo ist das Problem? Abgesehen davon, dass diese Methode ineffektiv ist wie sonstwas.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Das mit der MainModul-Eigenschaft habe ich immer noch nicht wirklich verstanden.

    Bei der suche habe ich das hier gefunden:
    msdn.microsoft.com/de-de/libra…s.process.mainmodule.aspx

    msdn.microsoft.com/de-de/libra…cs.process.startinfo.aspx
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Und jetzt? Hast du dir das Hauptmodul von den gesammelten Prozessen mal angesehen? Fällt was auf? Alternativ lies' den Hinweis-Abschnitt der MainModule-Seite auf der MSDN.

    Was fragst du mich, du sitzt vor deinem Projekt. Du kannst rumprobieren wie du willst, und vor Allem solltest du das auch. Du scheinst zwar nach Lösungen zu suchen, aber dich nicht näher damit zu beschäftigen. Soll ich das jetzt für dich machen?
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Ich habe keine Ahnung wo ich das Hauptmodul der Prozesse sehen kann ..
    Das blicke ich daran nicht so wirklich.

    Ich würde es gerne lernen und dabei umsetzen.
    Wenn mir jemand sagt, nutze die XYFachChinesisch Funktion verstehe ich nicht was er damit meint, bzw. Was es überhaupt bedeutet und wie es umsetze.

    Könntest du mir vielleicht ein paar Information über die MainModul-Eigenschaft geben?
    Wie nutze ich es / Wie finde ich es?
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Ist das dein Ernst? Ich stehe kurz davor in meine Tastatur zu beissen.

    MSDN schrieb:

    Ein Prozessmodul stellt eine DLL- oder EXE-Datei dar, die in einen bestimmten Prozess geladen wird. Die MainModule-Eigenschaft ermöglicht das Anzeigen von Informationen über die zum Starten des Prozesses verwendete ausführbare Datei, einschließlich des Modulnamens, des Dateinamens und der Informationen über den Modulspeicher.


    Und das alle immer so tuen, das die MSDN ein wahnsinniges Fachwissen voraussetzt, dafür habe ich mal gar kein Verständnis. Das mag bei einigen Artikeln so sein, aber damit merkt man gleichzeitig meistens: Das ist noch zu hoch für mich! Hier wird sogar noch kurz erklärt, was ein Modul ist.

    Setz doch mal nen Haltepunkt und schau dir an, wie diese Eigenschaft aufgebaut ist.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Wo finde ich diese "MainModule-Eigenschaft"? (in VB?) Wie rufe ich diese Informationen ab?

    (Wahrscheinlich verstehe die Logik dahinter nicht so ganz, bitte Schritt für Schritt)
    (z.B. da gehst du auf .... und drückst .... und da stehen die Informationen, und dann machst du .... )
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    MainModule ist vom Typ ProcessModule. Und dieser Typ hat wiederrum eine Eigenschaft FileName. MSDN dazu hier. Ich nehme an, dass du irgendwo eine Liste aller Prozesse hast. Lasse dir diese Eigenschaft für jeden Prozess mal ausgeben, per MessageBox oder per Trace.WriteLine ins VS-Log, falls dir das was sagt.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Nein. In deinem Programm.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Also Quasi eine Listbox die alle Prozesse anzeigt.
    Habe ich eingefügt.

    VB.NET-Quellcode

    1. Dim ProcessList As System.Diagnostics.Process
    2. For Each ProcessList In System.Diagnostics.Process.GetProcesses()
    3. Listbox1.Items.Add(P.ProcessName)
    4. Next
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Dann mache jetzt das, was ich dir oben gesagt habe.

    Und am Rande: [VB.NET] Keine Strings in die File-Listbox!
    Ist aber jetzt eher mal Nebensache.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Ich habe ein paar Probleme mit dem einsetzen und wiedergeben des Codes mit Msgbox.
    Mal ist etwas nicht deklariert, ein andermal macht er plötzlich nichts mehr und, und, und.

    Könntest du mir eventuell weiterhelfen.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Innerhalb der Schleife hast du den jeweiligen Prozess p. IntelliSense hilft dir bei solchen Sachen übrigens auch ganz gut. Wie gesagt: .MainModule.FileName. Dranhängen und dann ausgeben.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Funktioniert immer noch nicht, wahrscheinlich mache ich da was falsch.
    Könntest du mir ein kleines Code Beispiel dazu geben?

    (Ich bin zwar sehr geduldig, aber so langsam nervt mich das schon, das es nicht funktionieren will :-/ ).
    (Danke dennoch das du [Lukas] mir immer noch hilfst, obwohl es meinerseits etwas an Verständnis fehlt).
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Vultrax“ ()

    @Vultrax
    "Funktioniert leider immer noch nicht" reicht nicht. Da muss du Code zeigen.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. For Each p As Process In Process.GetProcesses
    5. Try 'Try wegen Zugriffsverweigerung
    6. MessageBox.Show(p.MainModule.FileName)
    7. Catch ex As Exception
    8. End Try
    9. Next
    10. End Sub
    11. End Class