我需要停止调试器应用程序来调试我的代码。 为此,我在我的类的构造函数中使用以下代码:
RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
java.util.List<String> arguments = RuntimemxBean.getInputArguments();
//System.setErr(null);
for ( String str : arguments)
{
System.out.println("\n"+str);
if ( str.contains("jdwp") || str.contains("debug"));
System.exit(1);
}
请确认我这段代码是否足够,或者仍然需要更聪明的方式(认为应该有!)来做... 我已经用JDB,Eclipse IDE,Netbeans等调试器编写了这段代码。
答案 0 :(得分:3)
准备修改JAR文件的人可以禁用您为防止调试而添加的任何代码。你能做的最好的事情就是让逆向工程更加努力。您无法通过任何可用的技术手段阻止它,包括混淆,加密的JAR文件甚至是基于硬件的方法,如TPM。
阻止人们对软件进行逆向工程的唯一方法是只能在物理上安全且安全的机器上存储或运行它,以防止基于网络的入侵。
答案 1 :(得分:1)
不,那段代码还不够。
至少我可以进入该代码,跳过getInputArguments()
来电,并将arguments
重新设置为Collections.emptyList()
。
我很确定你无法从纯Java代码中做到这一点(因为所有Java代码都可以在调试器中受到影响)。
答案 2 :(得分:0)
如果要在自己的VM上部署应用程序,则可以禁用远程调试。否则我不认为调试可以完全禁用。
您是否考虑过混淆罐子。