이 프로젝트는 컴파일러의 코드 변환 기술을 활용하여 Java 프로그램을 IR (Intermediate Representation, 중간 표현)로 변환하고, IR을 조작하는 방식으로 코드를 난독화하는 도구를 개발하는 것을 목표로 한다.
코드 난독화는 주로 역공학 방지, 보안 강화, 기술 보호를 위해 사용된다. 코드가 난독화되면 분석 및 변경이 어려워지며, 보안성이 향상된다. 그러나 성능 저하 및 복잡성 증가 등의 문제도 발생할 수 있다.
IR은 컴파일러가 프로그램을 변환하고 최적화할 때 사용하는 중간 단계의 코드 표현 방식이다.
LLVM은 IR을 기반으로 최적화하고, 다양한 플랫폼으로 변환할 수 있는 컴파일러 프레임워크이다.
brew install llvmexport PATH="/opt/homebrew/opt/llvm/bin:$PATH"llvm-config --version설치가 정상적으로 완료되었다면, 간단한 코드를 실행하여 테스트해보자.
Pretty Printer는 코드를 예쁘게 출력하여 가독성을 높여주는 도구이다.
int a = 10; → [int], [a], [=], [10], ;AST는 소스 코드를 트리 구조로 변환한 데이터로, 각 노드는 코드의 구성 요소를 나타낸다.
int sum = a + b * 10;
위 코드의 AST는 다음과 같이 표현된다.
=
/ \
sum +
/ \
a *
/ \
b 10
AST를 기반으로 코드를 분석하고 변환할 수 있다.
이번 프로젝트에서는 Java 프로그램을 IR로 변환하고, 이를 조작하여 난독화하는 도구를 개발한다. 이를 위해 LLVM을 활용하여 IR을 생성하고, 파싱과 AST를 이해하여 프리티 프린터도 직접 구현해볼 예정이다.
저기 이거 진짜로 할 생각이면 Bytecode 를 기반으로 하는게 훨씬 좋습니다.
Java bytecode -> LLVM IR 관련 프로젝트는 찾으면 많이 나올겁니다. 참고한번 해보세요