如何使用Java(例如Locker应用程序)锁定Windows文件或文件夹



储物范围应用程序是一个文件夹锁定应用程序,如何使用Java在Windows上锁定文件或文件夹?

这是我尝试的:

File file = new File(file path);
file.setExecutable(false); 
file.setWritable(false); 
file.setReadable(false);

但是只有file.setwritable(false);起作用 - 我无法重写文件。其他方法对文件没有任何作用。

这些方法只是设置文件的文件系统访问权限。为了理解它们,您需要了解OS/文件系统访问控制规则。

例如,Linux file.setWriteable(false)等于运行chmod u-w file,以清除"所有者写"访问位:

注意:

  1. chmod如果您是文件的所有者,或者如果您以root的运行,则只能更改文件上的任何权限。

  2. 所有者写入权限意味着所有者(或root(可以执行文件。如果您都不是,那么权限不会影响您。

因此,至少有两个可能的原因是setWriteable可能无法"工作"。

  • 您没有作为文件所有者或root执行Java程序。在这种情况下,setWriteable将返回false。但是请注意,您不检查结果!

  • 您没有试图将文件写为文件的所有者。在这种情况下,访问但您刚刚删除(在Java(不影响您


解决方案:

有一个较新/更好的API用于在java.nio.file.Files类中的Java中设置文件权限:

public static Path setPosixFilePermissions(
         Path path,
         Set<PosixFilePermission> perms)
     throws IOException

这允许您在一个呼叫中设置/清除所有可用的POSIX文件权限,并且如果不能出于任何原因,则可以进行例外。

许多文件系统也支持更复杂的ACL机制....

但是

这些都不等同于文件储物应用程序提供的功能。为什么?因为任何试图通过文件权限或ACL阻止文件访问的任何尝试都可以由具有root访问权限的人毫无用处地逆转。只要您知道它在技术层面上在做什么。

Windows"文件夹锁定"应用程序显然可以加密文件或隐藏什么。可以通过设置" dos:hidend"属性在Java 7中标记为隐藏的文件;请参阅https://stackoverflow.com/a/42816082/139985。它也可能使用权限和ACL来限制访问,这也可以在Java上进行。它也可能正在做其他事情。文档说(无需无聊!(:

文件锁定后,它将以各种可能的方式受到保护,并且只能通过文件夹锁定安全应用程序访问。

听起来像是营销而不是真理,几乎肯定是不真实的。但是,弄清楚该应用程序实际上在做什么,需要我获取Windows机器,下载并安装软件,然后尝试通过反向工程来违反许可证。

,请注意,上述"隐藏"的方法是特定于Windows的。在Linux/Mac OS上,您通过使文件名的第一个字符为dot("。"(字符"隐藏"某些命令中的文件。

最新更新