As windows doesn’t provide password protection for individual folder, there are many third party software like ‘Folder Lock’ that does the job. I wanted to know the logic behind these kind of applications and found one code like this: ‘lock-a-folder’. This is an AutoIt script which I am not familiar with. However, I just want to know the logic used here.
These are the main functions of the script I am interested in:
Func Lock($slected)
Local $Temp,$TempFile
If @error or $slected = "" Then Return("Empty selection/Cancel Pressed")
If Not FileExists($slected) Then
MsgBox(0, $AppName, $slected & " " & Lang('doesntexist'), 0, $WIN1)
Return('doesntexist')
EndIf
Local $l0ckd = RegRead("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders")
_DebugOut('RegRead("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders") = ' & $l0ckd)
If Not StringInStr($l0ckd, $slected & ".{90F8C996-7C70-4331-9D70-FB357D559FD5}|") = 0 Then
MsgBox(0, $AppName, $slected & " " & Lang('alreadyinlist'), 0, $WIN1)
Return('alreadyinlist')
EndIf
If $CmdLine[0] = 0 Then
GUICtrlSetData($List1, "")
GUICtrlSetData($List1, Lang('plzwait') & "....")
GUISetState(@SW_DISABLE)
EndIf
_DebugOut($slected)
If $CmdLine[0] = 0 Then GUISetState(@SW_ENABLE)
If DirMove($slected, $slected & ".{90F8C996-7C70-4331-9D70-FB357D559FD5}") = 0 Then
FileSetAttrib($slected, "-RSH")
MsgBox(0, $AppName, $slected & " " & Lang('unable2lock'), 0, $WIN1)
If $CmdLine[0] = 0 Then Readfolders()
Return('unable2lock')
EndIf
$slected = $slected & ".{90F8C996-7C70-4331-9D70-FB357D559FD5}"
FileSetAttrib($slected, "+RSH")
$l0ckd &= $slected & "|"
_DebugOut("$l0ckd &= $slected| = " & $l0ckd)
$debug = RegWrite("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders", "REG_SZ", $l0ckd)
_DebugOut('RegWrite("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders", "REG_SZ", $l0ckd) = ' & $debug)
If $CmdLine[0] = 0 Then Readfolders()
Return("Done")
EndFunc ;==>Lock
Func UnLock($slected)
_DebugOut($slected)
If $slected = "" Or @error Then
MsgBox(0, $AppName, Lang('selectfirst'), 0, $WIN1)
Return("Empty selection/Cancel Pressed")
EndIf
If $CmdLine[0] = 0 Then
GUICtrlSetData($List1, "")
GUICtrlSetData($List1, Lang('plzwait') & "....")
GUISetState(@SW_DISABLE)
EndIf
Local $Temp = StringReplace($slected, ".{90F8C996-7C70-4331-9D70-FB357D559FD5}", "", 0, 2)
_DebugOut("$Temp = " & $Temp)
FileSetAttrib($slected, "-RSH")
Local $Temp1
$Temp1 = DirMove($slected, $Temp)
If $CmdLine[0] = 0 Then GUISetState(@SW_ENABLE)
If $Temp1 = 0 Then
$Temp1 = DirMove($slected, $Temp & ".recovered")
EndIf
If $Temp1 = 0 Then
MsgBox(0, $AppName, $slected & " " & Lang('unable2unlock'), 0, $WIN1)
If $CmdLine[0] = 0 Then Readfolders()
Return('unable2unlock')
EndIf
Local $l0ckd = RegRead("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders")
_DebugOut('RegRead("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders") = ' & $l0ckd)
$Temp = StringReplace($l0ckd, $slected & "|", "")
_DebugOut('StringReplace($l0ckd, $slected & "|", "")' & " = " & $Temp)
$debug = RegWrite("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders", "REG_SZ", $Temp)
_DebugOut('RegWrite("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders", "REG_SZ", $l0ckd) = ' & $debug)
If $CmdLine[0] = 0 Then Readfolders()
Return("Done")
EndFunc ;==>UnLock
Can anybody please tell me the logic?
The script creates registry entries like :
and
When locking a folder, it is renamed like
FolderName.{90F8C996-7C70-4331-9D70-FB357D559FD5}and this name gets appended to the value ofHKCU\SOFTWARE\$AppName\lockedfoldersfor future reference.When unlocking it just changes the folder back to its original name, removing the entry from the registry value.
So it seems not secure at all.