[논문 리뷰] JConstHide: A Framework for Java Source Code Constant Hiding
JConstHide는 자바 소스 코드 내의 정수 상수를 숨겨 복원 분석을 방지하기 위한 새로운 프레임워크이다. 이 프레임워크는 소스 수준에서 상수를 변형하여 오브스컬피케이션 표현식으로 전환함으로써 소스 및 바이트코드 수준의 이중 오브스컬피케이션을 실현하며, 분석에 대한 저항력을 크게 향상시킨다. 기존 도구들이 바이트코드 수준의 오브스컬피케이션만을 지원하는 데 비해 이는 소스 수준의 오브스컬피케이션을 보완하는 데 기여한다.
Software obfuscation or obscuring a software is an approach to defeat the practice of reverse engineering a software for using its functionality illegally in the development of another software. Java applications are more amenable to reverse engineering and re-engineering attacks through methods such as decompilation because Java class files store the program in a semi complied form called byte codes. The existing obfuscation systems obfuscate the Java class files. Obfuscated source code produce obfuscated byte codes and hence two level obfuscation (source code and byte code level) of the program makes it more resilient to reverse engineering attacks . But source code obfuscation is much more difficult due to richer set of programming constructs and the scope of the different variables used in the program and only very little progress has been made on this front. We in this paper are proposing a framework named JConstHide for hiding constants, especially integers in the java source codes, to defeat reverse engineering through decompilation. To the best of our knowledge, no data hiding software are available for java source code constant hiding.
연구 동기 및 목표
- 자바를 위한 소스 코드 수준의 오브스컬피케이션 도구, 특히 상수 숨기기 기능의 부족을 보완하기 위해.
- 디컴파일된 코드에서 민감한 값(예: 마법의 숫자)을 추출하는 것을 어렵게 하여 역공학에 대한 취약성을 줄이기 위해.
- 소스 및 바이트코드 수준의 이중 오브스컬피케이션을 실현할 수 있는 실용적인 프레임워크를 제공하기 위해.
- 기능적으로 핵심적인 역할을 하는 정수 상수는 디컴파일된 자바 코드에서 자주 노출되므로, 이에 집중하기 위해.
- 프로그램 의미를 유지하면서도 소스 수준에서 상수 값의 의미를 은폐하는 방법을 도입하기 위해.
제안 방법
- 프레임워크는 오브스컬피케이션 대상이 될 수 있는 자바 소스 코드 내의 정수 상수를 식별한다.
- 선택된 각 상수는 산술 및 논리 연산을 사용한 복잡한 의미적으로 동일한 표현식으로 대체된다.
- 오브스컬피케이션된 표현식은 런타임에 원래 상수 값으로 평가되지만 소스 형태에서는 원래 값이 은폐된다.
- 변환은 컴파일 이전의 소스 코드 사전 처리 단계에서 수행되어 표준 자바 컴파일러와의 호환성을 보장한다.
- 프레임워크는 설정 가능한 오브스컬피케이션 강도를 지원하며 특정 상수의 숨김을 선택적으로 허용한다.
- 최종 소스 코드는 오브스컬피케이션된 바이트코드로 컴파일되어 이중 보호 계층을 달성한다.
실험 결과
연구 질문
- RQ1자바 소스 코드 내의 정수 상수는 디컴파일 과정에서 노출되지 않도록 효과적으로 숨길 수 있는가?
- RQ2프로그램 동작을 변경하지 않으면서 상수를 오브스컬피케이션된 표현식으로 변환할 수 있는 기법은 무엇인가?
- RQ3역공학에 대한 저항성 측면에서 소스 수준의 오브스컬피케이션은 바이트코드 수준의 오브스컬피케이션보다 어떻게 다를까?
- RQ4소스 코드 오브스컬피케이션은 프로그램 유지보수성과 성능에 어떤 영향을 미치는가?
- RQ5실용적인 프레임워크로서 자바 애플리케이션의 소스 및 바이트코드 수준의 이중 오브스컬피케이션을 가능하게 할 수 있는가?
주요 결과
- JConstHide는 의미적으로 동일하지만 원래 값이 소스 코드에서 은폐된 오브스컬피케이션 표현식으로 정수 상수를 성공적으로 변환한다.
- 프레임워크는 소스 및 바이트코드 수준의 보호를 결합한 이중 오브스컬피케이션을 실현하여 역공학에 대한 저항력을 향상시킨다.
- 이 방법은 자바 컴파일러에 대해 투명하므로 오브스컬피케이션된 코드가 정상적으로 컴파일되고 실행됨을 보장한다.
- 프로그램 기능은 그대로 유지되지만, 디컴파일을 통한 민감한 상수 추출이 상당히 어려워진다.
- 저자들의 지식으로는 이는 자바에서 소스 수준의 상수 숨김을 전용으로 설계한 첫 번째 프레임워크이다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.