코드 난독화에 대한 문제점

코드 난독화는 자바 코드 보호에 적용된 최초의 솔루션이자 가장 직접적인 솔루션이기도 하다.

코드 난독화는 일반적으로 다음 네 가지 방법을 포함합니다.

  1. 패키지 이름, 클래스 이름, 변수 이름 변환
  2. 제어 흐름 평면화, 불변 조건자 추가 등과 같은 제어 구조 변경
  3. 문자열 난독화 또는 암호화
  4. 쓸모없는 코드 추가

코드 난독화는 디컴파일된 코드의 가독성을 크게 감소시키고 정적 분석의 난이도를 높일 수 있지만, 코드 난독화가 어떻게 수행되더라도 프로그램의 실행 로직은 변경되지 않습니다.

JVM 바이트코드는 읽기 쉬운 매우 명확하고 명시적인 의미 체계 중간 코드입니다. 난독화된 클래스 파일의 경우 읽을 수 있는 Java 소스 코드로 복원할 수 없더라도 바이트코드 수준에서 분석할 수 있습니다. Java 바이트코드의 높은 의미론적 특성으로 인해 이 프로세스는 실제로 상대적으로 쉽습니다.

우리는 Java 및 Kotlin 언어를 사용하여 JVM 바이트코드 실행 엔진을 개발했습니다. 사용자는 이 프로젝트를 사용하여 IntelliJ IDEA의 바이트코드 수준에서 Java 프로그램을 동적으로 디버깅할 수 있습니다. 자세한 내용은 아래 기사를 참조하시기 바랍니다.

https://protector4j.com/articles/jvm-bytecode-engine-write-with-java-and-kotlin/

그리고 우리는 이 엔진을 사용하여 잘 알려진 난독화된 코드를 해독하려고 시도합니다. 구체적인 과정은 다음 기사를 참조하십시오.

http://protector4j.com/articles/deobfuscate-with-vlx-vmengine/

결론

위의 분석을 통해 JVM 바이트코드의 의미가 높기 때문에 분석하고 읽기가 매우 쉽다는 것을 알 수 있습니다. 실행중인 로직은 동적 디버깅을 통해 쉽게 분석할 수 있습니다. 동적 디버깅 도구를 작성하는 것은 그다지 복잡한 작업이 아니므로 난독화는 안정적인 보호 솔루션이 아닙니다.