Java 클래스 파일 암호화에 문제가 있습니다.

난독화 외에도 클래스 파일 암호화는 쉽게 생각할 수 있는 코드 보호 방법입니다. 많은 체계에서는 클래스 파일을 암호화하고 클래스 로딩 중에 해독하기 위해 에이전트를 사용합니다. 그러나 이러한 체계에서는 JVM의 내장 연결 메커니즘이라는 중요한 점을 간과하고 있습니다.

JVM 첨부 메커니즘

프로그램 작동에 대한 분석 및 모니터링을 용이하게 하기 위해 일반 JVM에는 첨부 파일이 함께 제공됩니다. 사용자는 jhsdb와 같은 도구를 사용하여 JVM 프로세스에 연결하고 해당 메모리 데이터를 보고 분석할 수 있습니다. 또한 이러한 메모리 데이터는 소스 파일의 데이터 구조에 따라 적절하게 구성되어 있으며 이는 JVM에 내장된 백도어 메커니즘으로도 이해할 수 있습니다.

다음 기사에서는 JVM 연결 메커니즘을 사용하여 클래스 파일 정보를 메모리에 읽고 저장하는 방법을 소개합니다.

https://protector4j.com/articles/cracking-encrypted-java-applications-jhsdb/

JDK에서 제공하는 jhsdb 도구를 사용하는 것 외에도 Alibaba의 Arthas를 사용하여 실행 중인 Java 프로세스를 분석할 수도 있습니다.

일부 보호 방법은 리플렉션을 통해 클래스 정보를 동적으로 로드하며, 이 접근 방식은 DLL 주입을 통해 실시간으로 로드된 클래스 정보를 얻는 데에도 사용할 수 있습니다. 자세한 내용은 다음 두 프로젝트를 참고하시기 바랍니다.

https://github.com/ViRb3/jvm-dump-proxy

https://github.com/zorftw/JVM-Native-Classdumping

결론

JVM 첨부 메커니즘 또는 바이너리 HOOK 메커니즘의 존재로 인해 정상적인 JVM 작업에서 분리되지 않은 소위 모든 암호화 코드는 첨부 도구를 사용하여 쉽게 읽거나 DLL 주입을 통해 후크될 수 있습니다. 따라서 이는 가장 비효율적인 보호 솔루션입니다.