Java 클래스 파일 암호화 관련 문제
난독화 외에도 클래스 파일 암호화는 쉽게 떠올릴 수 있는 코드 보호 방법입니다. 많은 방식에서 에이전트를 사용하여 클래스 파일을 암호화하고 클래스 로딩 중에 복호화합니다. 그러나 이러한 방식들은 JVM에 내장된 첨부 메커니즘이라는 중요한 점을 간과하고 있습니다.
JVM 연결 메커니즘
프로그램 동작 분석 및 모니터링을 용이하게 하기 위해 일반적인 JVM에는 첨부 파일이 함께 제공됩니다. 사용자는 jhsdb와 같은 도구를 사용하여 JVM 프로세스에 연결하고 메모리 데이터를 보고 분석할 수 있습니다. 더욱이 이러한 메모리 데이터는 소스 파일의 데이터 구조에 따라 체계적으로 정리되어 있는데, 이는 JVM에 내장된 백도어 메커니즘으로도 해석될 수 있습니다.
다음 글에서는 JVM 연결 메커니즘을 사용하여 클래스 파일 정보를 메모리에서 읽고 저장하는 방법을 소개합니다.
https://protector4j.com/articles/cracking-encrypted-java-applications-jhsdb/
JDK에서 제공하는 jhsdb 도구 외에도 Alibaba의 Arthas를 사용하여 실행 중인 Java 프로세스를 분석할 수 있습니다.
HOOK 관련 함수는 동적으로 로드된 클래스 정보를 가져옵니다.
일부 보호 방법은 리플렉션을 통해 클래스 정보를 동적으로 로드하며, 이러한 접근 방식을 통해 DLL 주입을 통해 실시간으로 로드된 클래스 정보를 얻을 수도 있습니다. 자세한 내용은 다음 두 프로젝트를 참조하십시오.
https://github.com/ViRb3/jvm-dump-proxy
https://github.com/zorftw/JVM-Native-Classdumping
결론
JVM 어태치먼트 메커니즘이나 바이너리 HOOK 메커니즘의 존재로 인해, 일반적인 JVM 동작에서 분리되지 않은 모든 소위 암호화된 코드는 어태치먼트 도구를 사용하거나 DLL 인젝션을 통해 쉽게 읽을 수 있습니다. 따라서 이는 가장 비효과적인 보호 방법입니다.