배열 재구성을 통한 자바 소스 난독화 기법
초록
본 논문은 자바 소스 코드에서 배열을 재구성하고, 재구성된 배열을 캡슐화한 클래스를 자동 생성함으로써 난독화를 구현하는 JDATATRANS 도구를 제안한다. 배열 분할·병합·접기·평탄화와 인덱스 변환, 상수 은닉 기법을 결합해 코드 가독성을 크게 낮추고, 실행 오버헤드와 파일 크기 증가를 정량적으로 평가한다.
상세 분석
이 연구는 기존 바이트코드 수준 난독화가 소스 레벨에서 충분히 적용되지 못한다는 점에 착안한다. 배열은 프로그램에서 데이터 흐름을 담당하는 핵심 구조이지만, 그 자체가 비교적 단순한 인덱스와 차원만을 사용하기 때문에 역공학자가 쉽게 이해한다. 저자는 배열을 ‘분할(split)’, ‘병합(merge)’, ‘접기(fold)’, ‘평탄화(flatten)’ 네 가지 변환으로 재구성하고, 각각을 전용 클래스로 캡슐화한다. 예를 들어 SplitArray_Integer 클래스는 원본 1차원 정수 배열을 짝·홀 인덱스별로 두 개의 내부 배열(iObj1, iObj2)로 나누고, setArray·getArray 메서드에서 인덱스 홀짝에 따라 적절한 내부 배열에 접근하도록 구현한다. 이러한 메서드 구현 자체도 인덱스 변환(i → 2*i+3 등)과 상수 은닉 함수 F(y,count)를 이용해 원래 상수를 감추어 난독화 수준을 높인다.
JDATATRANS 도구는 사용자가 정의한 배열 선언 파일(InFile.txt)을 파싱해 필요한 클래스들을 자동 생성한다. 초기 단계에서는 메서드 본문이 비어 있거나 기본 반환값만 있는 ‘프레임워크’ 클래스를 만들고, 이후 실제 소스 파일을 분석해 해당 클래스에 상세 구현을 삽입한다. 이렇게 생성된 클래스는 기존 코드와 동일한 인터페이스를 제공하므로, 개발자는 기존 로직을 그대로 유지하면서도 내부 구현은 난독화된 형태가 된다.
성능 및 비용 평가에서는 원본 코드와 난독화된 코드의 실행 시간, 파일 크기, 추가된 LOC(코드 라인 수)를 측정한다. Potency(은폐 정도)는 원본 대비 LOC 증가 비율로 계산하고, Cost는 파일 크기 증가와 실행 시간 증가를 가중치(y²=0.15, z²=0.45)로 합산한다. 결과적으로 SplitArray 기반 변환이 가장 높은 S_quality(0.4·S_pot‑S_cst) 점수를 얻었으며, 다른 변환(병합, 접기, 평탄화)은 상대적으로 낮은 비용 대비 은폐 효과를 보였다.
이 논문의 핵심 기여는 (1) 배열 재구성을 통한 구조적 난독화 모델 제시, (2) 클래스 자동 생성 도구 JDATATRANS 구현, (3) 정량적 평가 지표를 적용한 품질 분석이다. 다만, 제안된 기법은 제어 흐름 변형이나 변수 이름 난독화를 포함하지 않으므로, 고급 역공학 도구에 대한 저항력은 제한적일 수 있다. 향후 작업으로는 메서드 호출 인덱스 자체를 변형하고, 상수 은닉 함수를 다층화하는 등 강도 강화 방안을 제시하고 있다.
댓글 및 학술 토론
Loading comments...
의견 남기기