Programm Sicherheit/ Programm schließen verhindern

  • Hallo Zusammen,

    ich hab ein Problem :/

    Ich schreibe momentan ein Tool, mein Problem bezieht sich nur auf einen winzigen Part bei dem bei einer bestimmten Fehlerhäufigkeit, verlangt wir ein Passwort einzugeben.

    Also 3 mal das falsche eingegeben zack geht die Inputbox auf und lässt sich auch nicht mehr schließen. Das Programm wird komplett ausgegraut, der Exit Button des Haupttol funktioniert in dem Fall auch nicht mehr.

    Jedenfalls ist es dennoch sehr einfach dies zu Umgehen:

    1. Indem das Tool über die Schnellstartleiste geschlossen wird, also Exit, dann irgend einen Button der InputBox klicken und schon ist das Programm zu.

    oder

    2. Einfach über den Taskmanager schließen.


    Gibt es eine Möglichkeit, dass das Tool weder über Taskmanager noch über die Schnellstartleiste zu beenden ist, quasi wie ein antivirus?
    Das was ich bisher gefunden hab ist nicht zugbrauchen (Prozess verstecken, 2tes Programm laufen lassen):/

  • Ich hab keine Idee, aber ich denke das sollte schwierig werden, da dein Tool auf einer höheren Ebene liegt als dass es iwas komplett sperren dürfe. So zumindest meine Sicht. Aber wissen tu ich es nicht.

    Musst leider noch auf eine vermutliche sichere Quelle warten :P

    Grüße Yaerox

    Grüne Hölle

  • also den icon mit Exit kannst du ja mit #NoTrayIcon wegmachen das sollte nicht das problem sein!
    und dann machs halt so dass wenn es falsch eingegen wird irgendwo im system eine datei erstellt wird wo das drinsteht:D und jedes mal wenn du das programm ausführst prüft es, ob in dieser datei der wert zb "locked" drinsteht!

  • Zu 1. (falls du den Bereich neben der Uhr meinst):

    [autoit]

    #NoTrayIcon

    [/autoit]

    Ich frage mich wirklich wieso das nicht der Standard ist; nutzt dieses unprofessionell wirkende Feature überhaupt irgendjemand?

    Zu 2.: Es gibt da schon einige Möglichkeiten, aber davon wäre abzuraten und je nach dem was dein Programm genau macht sollte das auch gar nicht nötig sein. Du würdest dadurch ja sozusagen dem Benutzer die Kontrolle über sein eigenes System entziehen, und das ist nicht gerade sehr beliebt. :D

  • james du sagst: "Es gibt da schon einige Möglichkeiten" aber glaubst du auch Ctrl + Alt + Del -> Taskmanager -> Prozess beenden und diesen ganzen Spielchen kannst du "entkommen"? Mich würde das interessieren und wenn du magst darfst du mir mal ein Stichwort nennen ^^ Ich kann mir net vorstellen dass das möglich ist :P

    Grüße Yaerox

    Grüne Hölle

  • Hey, danke für die Antworten :)


    Das mit #NoTrayIcon kannt ich noch nicht :D

    philipp

    Versteh leider nicht genau wie das gehen sollte

    James

    Das ist ein Tool bei dem der System Admin der einzige sein soll, der das Tool wieder entsperren kann bzw. der einzige sein darf, der das Tool beenden darf ist mir das ziemlich egal, was die User davon halten. Hab nur meine Vorgaben, die ich einhalten muss.


    Hört sich an, als ob ich hier einen Virus oder ähnliches schreiben würde, da das Tool ja quasi verhindert, dass man es beenden kann selbst wenn man das System neustartet, dem ist aber nicht so.
    Falls ihr den Quewllcode haben möchtet um zu sehen, ob es so eine Schadsoftware ist, stell ich den gerne rein ;)

  • Also um sowas auch beim Neustart zu prüfen könnte man ja wie erwähnt eine Datei iwo hinlegen die standard-mäßig prüfen. Dafür musste dein Programm nur bei den Startups mit aktivieren (msconfig). Aber das man es halt net iwie durch ALT+F4 oder den Taskmanager schließen kann, das ist halt der Punkt den ich mir net vorstellen kann. Vll. über DLL Calls auf tiefere Ebenen des OS, aber da bin ich wie erwähnt ratlos.

    Grüße Yaerox

    Grüne Hölle

  • Hab noch einen Plan B, der mir gerade in den Sinn gekommen ist, falls dass zu tief ins System eingreifen sollte :)

    Ich arbeite mit einer Datenbank, auf die dass Programm zugreift, ich kann also bei falscher Eingabe hingehen und diese Einträge blocken, damit wäre es nicht mehr möglich, weiter mit mit dem Tool zuarbeiten, dass sollte meinen Ansprüchen auch genügen ;)

  • Setz vor diese inputbox wo man es dreimal falsch eingegeben hat einfach folgendes: (zB)

    [autoit]


    IniWrite(@SystemDir & "\logs.dat", "log", "locked", "True")

    [/autoit]

    Und an den anfang deines Scripts dann das hier:

    [autoit]


    If IniRead(@SystemDir & "\logs.dat", "log", "locked", "") = "True" Then
    disable() ; Hier also die weiterleitung zu dem teil wo deine GUI ausgegraut ist
    ; und deine InputBox angezeigt wird..
    EndIf

    [/autoit]
  • Alt+F4 sendet nur ein Schließen an dein Fenster. Falls du das Schließen nicht abfragst sollte es dadurch nicht angezeigt werden. Und was den taskmanager betrifft: prüf einfach, ob er da ist
    (prozess: taskmgr.exe)
    , und wenn ja beendest du ihn wieder. Alternativ kannst du auch dein Programm alle 100-500ms in den Vordergrund holen. Dann hilft ein Taskmanager nur wenig :D
    Allerdings kann man das ganze mittels Abgesichertem Modus eh easy umgehen... ;)

  • Spoiler anzeigen
    [autoit]

    #cs
    Name: Lock_Windows.au3
    Creator: Prog@ndy
    Function: Locks Windows until the right password is given
    Requires: WinLockDll.dll
    Optional:
    2 Images:
    - Locked.gif, 100 x 100 pixels
    - pw.gif 200 x 100 pixels
    #ce
    #include <GuiConstants.au3>
    DllCall("winlockdll.dll","int","Desktop_Show_Hide","int",0)
    DllCall("winlockdll.dll","int","Taskbar_Show_Hide","int",0)
    DllCall("winlockdll.dll","int","TaskSwitching_Enable_Disable","int",0)
    DllCall("winlockdll.dll","int","TaskManager_Enable_Disable","int",0)
    $gui = GUICreate("",@DesktopWidth+5,@DesktopHeight+5,-5,-5,0x80000000,0x00000080);$WS_POPUP , $WS_EX_TOOLWINDOW
    GUISetBkColor(0x0)
    WinSetOnTop($gui,"",1)
    WinSetTrans($gui,"",25)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",50)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",75)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",100)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",125)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",150)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",180)
    GUISetState()
    Sleep(100)
    $popup = GUICreate("Computer gesperrt",300,300, -1, -1, "0x80000000", $WS_EX_TOPMOST)
    $id_progress1=GUICtrlCreateProgress(0,0,300,30,-1,-1)
    $id_progress2=GUICtrlCreateProgress(0,270,300,30,-1,-1)
    $id_pic3=GUICtrlCreatePic("Locked.gif",0,30,100,100,-1,-1)
    $id_pic4=GUICtrlCreatePic("pw.gif",100,30,200,100,-1,-1)
    $id_label5=GUICtrlCreateLabel("Passwort eingeben:",10,174,101,13,-1,-1)
    $Input_1=GUICtrlCreateInput("",120,170,170,22,-1,-1)
    $Button_2=GUICtrlCreateButton("ENTSPERREN",65,226,159,34,-1,-1)
    GUISetState(@sw_show)
    While 1
    If NotNot WinActive("Computer gesperrt") Then
    WinActivate ("Computer gesperrt")
    ;GUISetStyle(-1, $WS_EX_TOPMOST)
    ;Beep(500,100)
    WinClose ("Task-Manager")
    EndIf
    $msg2 = GUIGetMsg()
    Select
    Case $msg2 = $Button_2
    If GUICtrlRead($Input_1) = "passwort" Then
    ExitLoop
    EndIf
    Case $msg2 = $Input_1
    If GUICtrlRead($Input_1) = "passwort" Then
    ExitLoop
    EndIf
    Case Else
    ;;;
    EndSelect
    WEnd
    GUIDelete($popup)
    #cs
    $popup = GUICreate("PopUP", 191, 85, -1, -1, $WS_DLGFRAME, $WS_EX_TOPMOST)

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

    $Input_1 = GUICtrlCreateInput("Input1", 0, 0, 180, 20)
    $Button_2 = GUICtrlCreateButton("OK", 60, 40, 60, 20)

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

    GUISetState()
    While 1
    If Not WinActive("PopUP") Then
    GUISetStyle(-1, $WS_EX_TOPMOST)
    Beep(500,100)
    EndIf
    $msg2 = GUIGetMsg()
    Select
    Case $msg2 = $Button_2
    ExitLoop
    Case Else
    ;;;
    EndSelect
    WEnd
    GUIDelete($popup)
    #ce
    ;MsgBox(262144,"","So geht es zunot..ok > close");MsgBox Set OnTop (262144)
    Sleep(300)
    WinSetTrans($gui,"",125)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",100)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",50)
    GUISetState()
    Sleep(100)
    DllCall("winlockdll.dll","int","Desktop_Show_Hide","int",1)
    DllCall("winlockdll.dll","int","Taskbar_Show_Hide","int",1)
    DllCall("winlockdll.dll","int","TaskSwitching_Enable_Disable","int",1)
    DllCall("winlockdll.dll","int","TaskManager_Enable_Disable","int",1)

    [/autoit]


    progandy hatte da mal was geschrieben..

  • Alt+F4 sendet nur ein Schließen an dein Fenster. Falls du das Schließen nicht abfragst sollte es dadurch nicht angezeigt werden. Und was den taskmanager betrifft: prüf einfach, ob er da ist
    (prozess: taskmgr.exe)
    , und wenn ja beendest du ihn wieder. Alternativ kannst du auch dein Programm alle 100-500ms in den Vordergrund holen. Dann hilft ein Taskmanager nur wenig :D
    Allerdings kann man das ganze mittels Abgesichertem Modus eh easy umgehen... ;)

    Raffinierte Idee den Taskmanager zu blocken :P

    Grüße Yaerox

    Grüne Hölle

  • Wenn du das so machen willst dann könntest du dir eine InputBox aus einer GUI basteln, dann kannst du auch während sie geöffnet ist noch Befehle ausführen.

    PS:

    james du sagst: "Es gibt da schon einige Möglichkeiten" aber glaubst du auch Ctrl + Alt + Del -> Taskmanager -> Prozess beenden und diesen ganzen Spielchen kannst du "entkommen"? Mich würde das interessieren und wenn du magst darfst du mir mal ein Stichwort nennen ^^ Ich kann mir net vorstellen dass das möglich ist :P

    Ich bin mir ziemlich sicher dass das möglich ist, du kannst eigentlich in fast allen Prozessen beliebig rumpfuschen (in diesem Fall dann z.B. das Beenden von Prozessen mit dem Namen "xyz.exe" unterbinden). Ich denke aber das fällt in den Regeln in den Bereich Malware, von daher sollten wir das nicht weiter vertiefen. :D

  • Ja ich will ja nicht zutief ins OS eingreifen, nicht das ich mir das dann zerlege und ich alles lahm lege.


    Wie James sagte, es gibt eine Methode, um das Beenden eines Prozesses zu verhindern, allerdings greift diese doch recht ins System ein und kann den PC recht leicht lahmlegen.

    Und den Taskmanager zu blockieren (auch hier gibt es eine bessere Methode), ist eine ganz schlechte Idee. Welcher vernuenftige Mensch fuehrt freiwillig eine Datei aus, die einem (teilweise) die Kontrolle ueber das eigene System entzieht?

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Welcher vernuenftige Mensch fuehrt freiwillig eine Datei aus, die einem (teilweise) die Kontrolle ueber das eigene System entzieht?


    Wer redet hier von freiwillig? :P
    So wie ich ihn verstanden hab möchte er das auf seinen PC ziehen, sodass nur ein benutzer ohne Passwort darankann, alle anderen aber erst das Passwort eingeben müssen. Vielleicht auch, damit er seinen Pc praktisch "sperren" kann (oder als Kindersicherung, etc.). Somit will er als Besitzer des Pcs das. (Auch wenn die Nutzer das eventuell nicht so doll finden :D)