So, dank der Hilfe von Raupi und den anderen aus der Shoutbox
habe ich mein DeskLock fertig.
Download, Source & Screen:
http://sensidethink.byethost4.com/?page_id=2
Kommentare, Ideen für Erweiterungen &
Feedback obs sinnvoll ist sind gerne gesehen
So, dank der Hilfe von Raupi und den anderen aus der Shoutbox
habe ich mein DeskLock fertig.
Download, Source & Screen:
http://sensidethink.byethost4.com/?page_id=2
Kommentare, Ideen für Erweiterungen &
Feedback obs sinnvoll ist sind gerne gesehen
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.
Ich war mal so frei:
;==============================================================
; DeskLock
;==============================================================
; Author: Sen
; Version: 1.0 Beta
;==============================================================
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>
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
#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)
$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)
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)
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)
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)
$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)
;Settings
GUISetBkColor(0xFFFFFF, $Main)
WinRunTrans($Main, "Show")
GUICtrlSetState($Design_LogIn, $GUI_DISABLE)
$ActiveWin = $Main
#EndRegion GUI
#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
;~ ;Security
[/autoit] [autoit][/autoit] [autoit]WEnd
#EndRegion Schleife
#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
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
EndFunc ;==>WinRunTrans
#EndRegion Func's
- 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
Und so wirds geknackt:
[autoit]
ProcessClose("Desklock.exe")
Das ganze als AutoRun.exe + zugehörige autorun.inf auf ne CD brennen, einlegen und fertig
ZitatUnd 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")
Das ist vmtl. stärker weil schneller.
Wie wäre es wenn man das Überwachungsscript zur Laufzeit mit einem Random-Namen compiliert?
Irgendwie muss doch ein sicherer Desktoplock möglich sein.
Einfache Lösung: Autorun ausschalten (Registry)
Allerdings: Sicher ist etwas anderes, das kommt aber schon ziemlich nah dran.
Aber will man das? Also immer den Autorun abschalten?
Nur zu beginng des Skripts die Reg. zu ändern funktioniert auch nur als Admin.
Ich fand die Idee mit dem Random Name eigentlich ganz gut
Das mit dem Random wird nix bringen,da man ja auch durch die Pid schließen kann die immer gleich ist...
ZitatDas 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.
Stimmt das? :wacko:
Hm sonst noch Vorschläge?
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?
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")
;Ende Des Scripts:
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoDriveTypeAutoRun", "REG_DWORD", $Autorun_User)
Sollte gehen oder?
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?
$Prozess = WinGetProcess("[active]")
ProcessClose($Prozess)
Deswegen z.b.
Funktioniert klasse über AutoRun.
Deswegen gehe ich gleich auf die Möglichkeit
AutoRun zu blocken