JDATATRANS 기반 배열 난독화 기법

JDATATRANS는 Java 소스 코드에서 배열 구조를 변형하고 상수를 은닉함으로써 난독화를 수행하는 도구이다. 배열 분할·접기·평탄화와 y‑factor 기반 상수 숨김을 결합해 코드 가독성을 크게 낮추고, 실행 시간·크기 오버헤드는 최소화한다. 실험 결과, 변형된 코드는 디컴파일러가 생성한 소스에서도 의미 파악이 어려워지고, 기존 바이트코드 난독화와 병행해 높은 복원 저항성을 제공한다.

저자: ** - Praveen Sivadasan – School of Computer Sciences, Mahatma G, hi University

JDATATRANS 기반 배열 난독화 기법
본 논문은 Java 프로그램이 바이트코드 형태로 배포되는 특성 때문에 디컴파일러를 이용한 역공학이 비교적 쉬운 문제점을 제시한다. 기존의 난독화 도구들은 주로 클래스·메서드·필드 이름을 무의미하게 바꾸는 lexical 변환에 머물러 있어, 소스 레벨에서의 구조적 난독화는 거의 다루지 못한다. 이에 저자들은 배열을 중심으로 한 데이터 변환과 상수 은닉을 결합한 새로운 소스 난독화 프레임워크인 JDATATRANS를 설계·구현하였다. JDATATRANS는 두 개의 주요 컴포넌트로 구성된다. 첫 번째는 CoBS(Classes for oBfuscating Source codes) 라는 이름의 라이브러리이며, 여기에는 배열 분할(SplitArray), 배열 접기(FoldedArray), 배열 평탄화(FlattenedArray) 세 가지 구현이 포함된다. 각 구현은 제네릭 클래스로 제공되며, setArray, getArray, lengthArray와 같은 기본 인터페이스를 갖는다. 내부 구현은 난독화 수준에 따라 여러 버전이 존재하고, 프로그램 컴파일 시점에 무작위로 선택된다. 예를 들어 SplitArray는 원본 1차원 배열을 두 개의 부분 배열로 나누어 인덱스를 (i%2)와 i/2 연산으로 매핑한다. FoldedArray는 1차원 배열을 2차원 배열로 변환해 (i‑(i%5))/5와 i%5를 인덱스로 사용하고, FlattenedArray는 다차원 배열을 1차원으로 평탄화한다. 이러한 변환은 배열 접근 로직을 복잡하게 만들어 역공학자가 원본 데이터 구조를 추론하기 어렵게 만든다. 두 번째 컴포넌트는 JDATATRANS‑Obfuscator이다. 이 모듈은 입력된 Java 소스 코드를 토큰화하고, CoBS 객체가 선언·사용되는 문장을 후보 문장(candidate statement)으로 식별한다. 후보 문장 내에 등장하는 모든 정수 리터럴과 배열 인덱스를 ConstHide 모듈을 통해 y‑factor 기반 F(A,k) 식으로 교체한다. ConstHide는 소수 쌍(Pi,Qi)의 합을 이용해 다단계 모듈러 연산을 수행하는 함수 F를 정의하고, 임의의 상수를 동일한 값으로 평가되는 복잡한 식으로 변환한다. 예를 들어 상수 2는 F(41%23,2)와 같은 형태가 된다. 상수가 전혀 없는 경우에도 인덱스에 1을 곱하고, 그 1을 F‑식으로 숨김 처리한다. 변환은 반복 적용 가능하며, 각 반복마다 F‑식이 중첩돼 난이도가 급격히 상승한다. 실험에서는 샘플 프로그램 ‘myprog.java’를 대상으로 SplitArray, FoldedArray, FlattenedArray 각각에 대해 난독화 전후의 실행 시간과 코드 크기를 측정하였다. 결과는 배열 크기 10⁴~10⁵ 범위에서 실행 시간 증가율이 5~12%에 불과했으며, 코드 라인 수는 평균 8~15% 정도 늘어났다. 이는 변환된 소스가 런타임에 추가적인 모듈러 연산을 수행하지만, 현대 CPU 성능에 비해 큰 부담이 되지 않음을 의미한다. 또한, 디컴파일러가 생성한 바이트코드에서 원본 배열 구조와 상수를 복원하는 것이 현저히 어려워졌으며, 기존 바이트코드 난독화 도구와 결합하면 이중 난독화 효과를 얻을 수 있다. 논문은 JDATATRANS가 난독화의 세 핵심 지표인 potency(혼란도), resilience(복원 저항성), cost(성능 비용)를 균형 있게 만족한다는 점을 강조한다. 구조적 변환은 데이터 흐름을 파악하기 어렵게 만들고, 상수 은닉은 정적 분석 도구가 상수 풀을 추출하는 것을 방해한다. 특히, CoBS 라이브러리와 Obfuscator가 독립적으로 동작하면서도 서로 보완적인 난독화 레이어를 제공한다는 점이 차별화된 강점이다. 향후 연구에서는 배열 외의 다른 데이터 구조(예: 컬렉션, 트리)에도 동일한 변환 원리를 적용하고, 자동화된 난독화 수준 조절 메커니즘을 도입해 개발자에게 최적의 보안·성능 트레이드오프를 제공하는 방향을 제시한다.

원본 논문

고화질 논문을 불러오는 중입니다...

댓글 및 학술 토론

Loading comments...

의견 남기기