2010-03-03 2 views
1

디버거 응용 프로그램이 내 코드를 디버깅하지 못하게해야합니다. 이를 위해 , 난 내 클래스의 생성자에 다음 코드를 사용하고 있습니다 :이 코드는 충분 또는 정지 똑똑한 방법이있을 필요합니다 경우Java에서 코드 디버깅을 피하는 방법은 무엇입니까?

 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

정확히 달성하려는 것은 무엇입니까? 런타임시 코드 또는 데이터를 보호 하시겠습니까? –

답변

1

아니요, 코드가 충분하지 않습니다.

적어도 내가 그 코드를 한 단계 씩 수 있으며, getInputArguments() 호출 이상 단계 Collections.emptyList()arguments을 다시는-설정합니다.

모든 자바 코드가 디버거 내부에서 영향을받을 수 있으므로 순수 자바 코드로는이 작업을 수행 할 수 없습니다.

0

사용자의 VM에 응용 프로그램을 배포하는 경우 원격 디버깅을 사용하지 않도록 설정할 수 있습니다. 그렇지 않으면 디버깅이 완전히 비활성화 될 수 있다고 생각하지 않습니다.

병을 난독 화하는 것으로 생각 해 봤습니까?

3

디버깅을 방지하기 위해 추가하는 코드는 JAR 파일을 수정할 준비가 된 사람이 사용할 수 없도록 설정할 수 있습니다. 최선의 방법은 리버스 엔지니어링을 어렵게 만드는 것입니다. 은 난독 화, 암호화 된 JAR 파일 또는 TPM과 같은 하드웨어 기반 접근법을 포함하여 사용 가능한 기술적 인 방법으로을 방지 할 수 없습니다.

사람들이 소프트웨어를 리버스 엔지니어링하지 못하게하는 유일한 방법은 인 경우에만에 물리적으로 안전하고 네트워크 기반 침입으로부터 안전하지 않은 시스템에 저장하거나 실행하는 것입니다.

관련 문제