java - 如何避免在java中调试代码?

标签 java debugging

我需要阻止调试器应用程序调试我的代码。 为此,我在类的构造函数中使用了以下代码:

        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 等调试器编写了这段代码。

最佳答案

您为防止调试而添加的任何代码都可能被准备修改您的 JAR 文件的人禁用。您能做的最好的事情就是使逆向工程变得艰苦。您无法通过任何可用的技术手段阻止它,包括混淆、加密的 JAR 文件甚至基于硬件的方法(如 TPM)。

防止人们对您的软件进行逆向工程的唯一方法是永远在物理上安全且能够抵御基于网络的入侵的机器上存储或运行它。

关于java - 如何避免在java中调试代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2371104/

相关文章:

java - 单独的 httpsession 监听器实例是否与创建的每个 session 绑定(bind)?

debugging - 如何在 Visual Studio 2015 asp.net 5 中调试 Typescript?

c - 在 MonoDevelop 中调试 C 应用程序失败

java - 为什么 JTable 总是触发 ListSelectionListener 两次?

java - 使用核心 api 消费后 HornetQ 消息仍保留在队列中

java - java中JIT效果的一个具体例子

java - Volatile HashMap 与 ConcurrentHashMap

debugging - grails产生 war 错误java.lang.ArrayIndexOutOfBoundsException:1

c - 什么是 Linux 中的核心转储文件?它提供什么信息?

swift - 如何在Xcode中调试 “precondition failure”?