是否可以在Java应用程序中禁用检测库,或检查当前是否正在运行?
出于安全原因,我的目标是阻止用户在我的应用程序上运行检测实现.
经过一些实验后,我自己想出了一个理论解决方案,其中我发现java.class.path系统属性以路径分隔符后面的-javaagent VM参数jar文件的路径结束.从这个属性,我可以检查其中一个类路径属性是否是我的程序本身未指定的外部jar,然后如果检测到异类jar则终止我的应用程序.
但是,上面的方法对我来说似乎有些讨厌,但是我还没有找到直接阻止-javaagent参数的方法,也没有找到检测检测代理库(ies)的简单方法.这些更清洁的替代品是否可能?
解决方法:
Java代理也可以在运行时加载:
vm = com.sun.tools.attach.VirtualMachine.attach(pid);
agent = new File("agent.jar");
vm.loadAgent(agent.toString());
vm.detach();
我不认为你的代码在这种情况下会起作用.
可以检查是否允许附加如下:
SecurityManager sm = System.getSecurityManager();
if (sm != null)
sm.checkPermission(new AttachPermission("attachVirtualMachine"));
标签:java,instrumentation
来源: https://codeday.me/bug/20190826/1728940.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。