• ist das Absicht, daß sich der Locker mit nem Alt-F4 ausgehebeln lässt?

  • Arg, das is der einzige Punkt an den ich nicht gedacht habe oO
    An WinTaste, Taskmanager etc denk ich ja...
    aber aufs einfachste achte ich wieder net x'D

    Jemand ne Lösung?

    Edit:
    Script aktualisiert, ist wieder auf der Webseite.
    Alt+F4 geht jetzt auch nicht mehr.

    2 Mal editiert, zuletzt von Sen (27. November 2009 um 04:50)

  • Ich war mal so frei:

    Spoiler anzeigen
    [autoit]

    ;==============================================================
    ; DeskLock
    ;==============================================================
    ; Author: Sen
    ; Version: 1.0 Beta
    ;==============================================================
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #include <EditConstants.au3>

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

    HotKeySet("!{F4}", "_Dummy")
    #Region File Install
    DirCreate(@TempDir & "/DeskLock/")
    FileInstall("Images\TopBar.bmp", @TempDir & "/DeskLock/TopBar.bmp", 1)
    FileInstall("Images\BottomBar.bmp", @TempDir & "/DeskLock/BottomBar.bmp", 1)
    FileInstall("Images\LogIn.bmp", @TempDir & "/DeskLock/LogIn.bmp", 1)
    FileInstall("Images\Settings.bmp", @TempDir & "/DeskLock/Settings.bmp", 1)
    FileInstall("System\System.ini", @TempDir & "/DeskLock/System.ini", 0)
    FileInstall("System\WinLock.dll", @TempDir & "/DeskLock/WinLock.dll", 0)
    #EndRegion File Install

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

    #Region GUI
    ;Main Window
    $Main = GUICreate("DeskLock", @DesktopWidth + 5, @DesktopHeight + 5, -5, -5, 0x80000000, 0x00000080)
    ;Design
    $Design_TopBar = GUICtrlCreatePic(@TempDir & "/DeskLock/TopBar.bmp", 0, 5, @DesktopWidth + 10, 22)
    $Design_BottomBar = GUICtrlCreatePic(@TempDir & "/DeskLock/BottomBar.bmp", 0, @DesktopHeight - 15, @DesktopWidth + 10, 22)
    $Design_LogIn = GUICtrlCreatePic(@TempDir & "/DeskLock/LogIn.bmp", (@DesktopWidth / 2) - 108, (@DesktopHeight / 2) - 65, 217, 131)
    ;Log-In
    $Input_Pw = GUICtrlCreateInput("", (@DesktopWidth / 2) - 95, (@DesktopHeight / 2) + 35, 190, 20, $ES_PASSWORD)
    $Label_Pw = GUICtrlCreateLabel("Enter Password:", (@DesktopWidth / 2) - 95, (@DesktopHeight / 2) + 15, 170, 20, $SS_CENTER)
    GUICtrlSetBkColor(-1, 16382457)
    $Settings_Pw = GUICtrlCreatePic(@TempDir & "/DeskLock/Settings.bmp", (@DesktopWidth / 2) + 75, (@DesktopHeight / 2) + 15, 20, 20)

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

    $GUI_SP = GUICreate("DeskLock - Change Password", @DesktopWidth / 3, @DesktopHeight / 6, -1, -1, 0x80000000 + 0x00800000)
    $SP_Dim = WinGetPos($GUI_SP)
    $SP_Design_TopBar = GUICtrlCreatePic(@TempDir & "/DeskLock/TopBar.bmp", 0, -10, @DesktopWidth + 10, 22)
    $SP_Design_BottomBar = GUICtrlCreatePic(@TempDir & "/DeskLock/BottomBar.bmp", 0, @DesktopHeight / 6 - 10, @DesktopWidth + 10, 22)

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

    GUICtrlCreateLabel("Old Password:", ($SP_Dim[2] / 10) * 0.75, ($SP_Dim[3] / 10) * 1.75 + 4)
    $SP_OldPW = GUICtrlCreateInput("", ($SP_Dim[2] / 10) * 3, ($SP_Dim[3] / 10) * 1.75, ($SP_Dim[2] / 10) * 6, -1, 0x20)

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

    GUICtrlCreateLabel("New Password:", ($SP_Dim[2] / 10) * 0.75, ($SP_Dim[3] / 10) * 3.75 + 4)
    $SP_NewPW = GUICtrlCreateInput("", ($SP_Dim[2] / 10) * 3, ($SP_Dim[3] / 10) * 3.75, ($SP_Dim[2] / 10) * 6, -1, 0x20)

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

    GUICtrlCreateLabel("Confirm Password:", ($SP_Dim[2] / 10) * 0.75, ($SP_Dim[3] / 10) * 5.75 + 4)
    $SP_NewPW_confirm = GUICtrlCreateInput("", ($SP_Dim[2] / 10) * 3, ($SP_Dim[3] / 10) * 5.75, ($SP_Dim[2] / 10) * 6, -1, 0x20)

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

    $SP_SaveB = GUICtrlCreateButton("Save", ($SP_Dim[2] / 10) * 6, ($SP_Dim[3] / 10) * 7.25 + 4, ($SP_Dim[2] / 10) * 3, -1, 0x01)
    $SP_ErrorLable = GUICtrlCreateLabel("", ($SP_Dim[2] / 10) * 0.75, ($SP_Dim[3] / 10) * 7.25 + 4, ($SP_Dim[2] / 10) * 4.5, 25)
    GUISetBkColor(0xFFFFFF, $GUI_SP)

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

    ;Settings
    GUISetBkColor(0xFFFFFF, $Main)
    WinRunTrans($Main, "Show")
    GUICtrlSetState($Design_LogIn, $GUI_DISABLE)
    $ActiveWin = $Main
    #EndRegion GUI

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

    #Region StartUp
    $Pw = IniRead(@TempDir & "/DeskLock/System.ini", "DeskLock", "Pw", "0000")
    DllCall(@TempDir & "/DeskLock/WinLock.dll", "int", "Desktop_Show_Hide", "int", 0)
    DllCall(@TempDir & "/DeskLock/WinLock.dll", "int", "Taskbar_Show_Hide", "int", 0)
    DllCall(@TempDir & "/DeskLock/WinLock.dll", "int", "TaskSwitching_Enable_Disable", "int", 0)
    DllCall(@TempDir & "/DeskLock/WinLock.dll", "int", "TaskManager_Enable_Disable", "int", 0)
    #EndRegion StartUp
    AdlibEnable("_Secure", 200)
    #Region Schleife
    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[1]
    Case $Main
    Switch $nMsg[0]
    Case $Input_Pw
    If GUICtrlRead($Input_Pw) == $Pw Then
    WinRunTrans($Main, "Hide")
    Exit
    Else
    GUICtrlSetData($Input_Pw, "")
    EndIf
    Case $Settings_Pw
    $ActiveWin = $GUI_SP
    ;~ WinSetOnTop($Main, "", 0)
    GUISetState(@SW_DISABLE, $Main)
    WinRunTrans($GUI_SP, "Show")
    HotKeySet("{ESC}","_HideSP")
    EndSwitch
    Case $GUI_SP
    Switch $nMsg[0]
    Case $SP_SaveB
    If GUICtrlRead($SP_OldPW) == $Pw Then
    If GUICtrlRead($SP_NewPW) == GUICtrlRead($SP_NewPW_confirm) Then
    GUICtrlSetColor($SP_ErrorLable, 32768)
    GUICtrlSetData($SP_ErrorLable, "Password changed!")
    IniWrite(@TempDir & "/DeskLock/System.ini", "DeskLock", "Pw", GUICtrlRead($SP_NewPW))
    $Pw = GUICtrlRead($SP_NewPW)
    Sleep(1000)
    _HideSP()
    Else
    _SP_ErrorMessage("New passwords did not match!",$SP_NewPW_confirm)
    EndIf
    Else
    _SP_ErrorMessage("Old password did not match!",$SP_OldPW)
    EndIf
    EndSwitch
    EndSwitch

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

    ;~ ;Security

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

    WEnd
    #EndRegion Schleife

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

    #Region Func's
    Func OnAutoItExit()
    DllCall(@TempDir & "/DeskLock/WinLock.dll", "int", "Desktop_Show_Hide", "int", 1)
    DllCall(@TempDir & "/DeskLock/WinLock.dll", "int", "Taskbar_Show_Hide", "int", 1)
    DllCall(@TempDir & "/DeskLock/WinLock.dll", "int", "TaskSwitching_Enable_Disable", "int", 1)
    DllCall(@TempDir & "/DeskLock/WinLock.dll", "int", "TaskManager_Enable_Disable", "int", 1)
    EndFunc ;==>OnAutoItExit
    Func _Secure()
    If Not WinActive($ActiveWin) Then WinActivate($ActiveWin)
    WinKill("Windows Task-Manager")
    WinKill("Task-Manager")
    ;~ WinSetOnTop($ActiveWin, "", 1)
    EndFunc ;==>_Secure
    Func _HideSP()
    WinRunTrans($GUI_SP, "Hide")
    GUISetState(@SW_HIDE, $GUI_SP)
    ;~ WinSetOnTop($GUI_SP, "", 0)
    If Not WinActive($Main) Then WinActivate($Main)
    $ActiveWin = $Main
    GUICtrlSetData($SP_OldPW, "")
    GUICtrlSetData($SP_NewPW, "")
    GUICtrlSetData($SP_NewPW_confirm, "")
    GUICtrlSetData($SP_ErrorLable, "")
    GUISetState(@SW_ENABLE, $Main)
    HotKeySet("{ESC}")
    EndFunc
    Func _SP_ErrorMessage($sErrorMessage,$hAlarmControl)
    GUICtrlSetColor($SP_ErrorLable, 14425700)
    GUICtrlSetData($SP_ErrorLable, $sErrorMessage)
    For $i = 0 To 2
    GUICtrlSetBkColor($hAlarmControl, 14425700)
    Sleep(500)
    GUICtrlSetBkColor($hAlarmControl, 0xFFFFFF)
    Sleep(500)
    Next
    GUICtrlSetData($hAlarmControl, "")
    EndFunc
    Func _Taskbar($Art)
    Local $value = Opt("WinTitleMatchMode", 4)
    Local $Pos = WinGetPos("classname=Shell_TrayWnd")
    Opt("WinTitleMatchMode", $value)
    If $Art = "Hoch" Then
    Return $Pos[3]
    ElseIf $Art = "Breit" Then
    Return $Pos[2]
    ElseIf $Art = "Pos" Then
    If $Pos[0] = "0" And $Pos[1] <> "0" Then
    Return "Unten"
    ElseIf $Pos[0] = "0" And $Pos[1] = "0" And $Pos[2] < $Pos[3] Then
    Return "Links"
    ElseIf $Pos[0] = "0" And $Pos[1] = "0" Then
    Return "Oben"
    Else
    Return "Rechts"
    EndIf
    EndIf
    EndFunc ;==>_Taskbar
    Func _Dummy()
    Sleep(10)
    EndFunc ;==>_Dummy
    Func WinRunTrans($Window, $Mod)
    If $Mod = "Show" Then
    GUISetState(@SW_SHOW, $Window)
    For $i = 0 To 255 Step 5
    WinSetTrans($Window, "", $i)
    Sleep(10)
    Next

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

    ElseIf $Mod = "Hide" Then

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

    For $i = 255 To 0 Step -5
    WinSetTrans($Window, "", $i)
    Sleep(10)
    Next
    GUISetState(@SW_HIDE, $Window)
    EndIf

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

    EndFunc ;==>WinRunTrans
    #EndRegion Func's

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

    - Flüssigere Transparenz
    - hübscheres Passwort-ändern
    - ALT+F4 ausgeschaltet
    - ESC ausgeschaltet
    - Secure Funktionen aus der Hauptschleife in AdlibEnable verlagert.
    - Semicase für passwort eingebaut (für passwort UbaMMrSb würde sonst auch ubamMRsB gehen)

  • 1. Dich beim Script mit als Author eingetragen, da die Änderung
    nicht gerade klein war.

    2. Dich auch auf der Webseite mit den Änderungen und allem
    erwähnt.

    3. Großes Danke :P

  • Zitat

    Und so wirds geknackt:

    Lösung: 2 Prozesse die sich gegenseitig überwachen und wieder neustarten.

  • Dann halt so:

    [autoit]

    Do
    ProcessClose("Desklock.exe")
    ProcessClose("Desklock2.exe")
    Until not Processexists("Desklock.exe") And not ProcessExists("Desklock2.exe")

    [/autoit]


    Das ist vmtl. stärker weil schneller.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

    • Offizieller Beitrag
    Zitat

    Das mit dem Random wird nix bringen,da man ja auch durch die Pid schließen kann die immer gleich ist...

    Bin mal gespannt woher du dieses Wissen hast. Zu oft in die Glaskugel geschaut?
    Nee, Scherz beiseite. Die PID ist bestimmt nicht immer gleich.

  • Ich fand die Idee mit dem Randomnamen auch nicht schlecht. Der erste Prozess startet einen zweiten mit einem Randomnamen. Beide überwachen sich gegenseitig. Externe Programme werden zwar den "DeskLock"-Prozess finden und schliessen können, aber mit Sicherheit aber nicht den Randomnamen.
    GGf gibts auch eine Möglichkeit, neu hinzugekommene Medien (USB-Sticks,CD/DVD,Diskette) abzufragen und die davon per Autostart angeworfenen Prozesse abzuschiessen. D.h. alle Prozesse (ausser beim Start des Lockers vorhandene) werden von einem der beiden Scripte abgeschossen. So kann man den Autostart lassen, Programme können aber trotzdem nicht gestartet werden.

    Nachteil, evtl automatisch startende Prozesse des Systems (Backup usw.) müsste/könnte man ausnehmen.

  • Ich glaub auch nicht, das die PID immer gleich ist :) Und man müsste das Script ja nichtmal kompilieren, es reicht ja, ein FileInstall mit zufälligem Bestimmungsort und Namen zu machen. Aber dann hinterher auch die Datei wieder löschen, sonst fangen die Fragen an, was das für ne Datei ist, und warum sie sooft vorhanden ist ;)

    Edit: Aber über "Prozessstruktur beenden" beim Taskmanager würde doch dann trotzdem alles beendet werden, oder? Gibt es dafür eine Autoit-Funktion?

    Einmal editiert, zuletzt von Arkaneus (27. November 2009 um 16:43)

  • Prozess Name ändern wird nichts bringen,
    man kann mit ProzessClose und co immer noch das
    "OnTop" Window abfragen und ausschalten.

    Eine Lösung wäre eventuell:
    http://windowssecrets.com/comp/071108

    Gibt es eine Möglichkeit AutoRun Dateien ohne Reg
    Änderungen ausschalten?

    Edit:

    [autoit]

    ;Anfang des Scripts:
    $Autorun_User = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoDriveTypeAutoRun")
    RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoDriveTypeAutoRun", "REG_DWORD", "255")

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

    ;Ende Des Scripts:
    RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoDriveTypeAutoRun", "REG_DWORD", $Autorun_User)

    [/autoit]

    Sollte gehen oder?

    Einmal editiert, zuletzt von Sen (27. November 2009 um 20:07)

    • Offizieller Beitrag

    Hallo

    Doch das mit dem Randomname könnte funktionieren. Da müsst ihr aber nur aufpassen, dass ihr die überwachungsexe Datei wirklich nur zur Überwachung nutzt. Auch wichtig ist, dass ihr nicht die exe Datei direkt von der Hauptexe (DeskLocl.exe) startet. Wenn ihr die direkt startet kann man die "Child-Prozesse" ziemlich leicht rausfinden (gibt genug UDFs). Also schön ne bat Datei zwischenschalten ;)

    Gruß
    Spider

  • Falsch.
    Eine zweite Exe zum "verstecken" bringt wenig.
    Warum?

    [autoit]

    $Prozess = WinGetProcess("[active]")
    ProcessClose($Prozess)

    [/autoit]

    Deswegen z.b.
    Funktioniert klasse über AutoRun. :rofl:

    Deswegen gehe ich gleich auf die Möglichkeit
    AutoRun zu blocken :rolleyes: