HarmonyOS 코드 난독화 실전 가이드

코드 난독화 개요

소스 코드 난독화는 리버스 엔지니어링 공격 위험을 낮추고, 클래스와 멤버 식별자 길이를 단축하여 최종 산출물 크기를 최적화하는 핵심 보안 기술입니다. DevEco Studio는 SDK 레벨에서 난독화를 내장하고 있으며, API 10 이상의 Stage 모드 프로젝트에서 release 빌드 시 자동으로 활성화됩니다.

적용 조건

  • Stage 모드 프로젝트만 지원
  • 빌드 타입이 release인 경우
  • 모듈 및 의존 HAR 모두 -disable-obfuscation 비활성화 규칙 미설정

처리 대상 파일

난독화는 아래 확장자를 대상으로 처리되며, 결과 캐시는 모듈 경로 내 build/[...]/release 디렉터리에 저장됩니다.

  • .ets (ArkTS)
  • .ts
  • .js

난독화 기능 활성화

현재 SDK는 식별자 난독화만 제공합니다. 성능 저하 우려로 인해 다른 난독화 기법은 제공되지 않습니다. 다음 세 가지 범주의 식별자를 난독화할 수 있습니다.

대상기본값설명
매개변수 및 지역 변수활성화함수 내부 변수명 변환
최상위 스코프 식별자비활성화모듈 수준 선언(클래스, 함수, 변수 등)
속성명비활성화객체 속성 접근자 이름

최상위 스코프와 속성명 난독화는 기본적으로 꺼져 있는데, 이는 런타임 오류 발생 가능성을 방지하기 위함입니다. 필요 시 설정 파일에서 명시적으로 켜야 합니다.

앱 프로젝트 설정 예시

신규 프로젝트 생성 시 build-profile.json5에 다음과 같이 자동 생성됩니다.

{
  "arkOptions": {
    "obfuscation": {
      "ruleOptions": {
        "enable": true,
        "files": ["./obfuscation-rules.txt"]
      }
    }
  }
}

라이브러리 프로젝트 설정 예시

HAR/HSP 생성 시 consumerFiles 속성이 추가됩니다.

{
  "arkOptions": {
    "obfuscation": {
      "ruleOptions": {
        "enable": true,
        "files": ["./obfuscation-rules.txt"]
      },
      "consumerFiles": ["./consumer-rules.txt"]
    }
  }
}

설정 속성 상세

ruleOptions.enable
난독화 마스터 스위치. false로 설정 시 전체 비활성화됩니다.
ruleOptions.files
현재 모듈 빌드 시 적용할 규칙 파일 목록입니다. HAP/HSP/HAR 패키징 시 해석됩니다.
consumerFiles
이 라이브러리를 의존하는 상위 모듈 빌드 시 병합될 규칙 파일 목록입니다. 해당 내용은 HAR 패키지 내 obfuscation.txt로 통합됩니다.

최종 규칙 병합 로직

HAP/HSP/HAR 빌드 시 최종 난독화 규칙은 다음 순서로 병합됩니다.

  1. 현재 모듈의 ruleOptions.files
  2. 직접/간접 의존 라이브러리의 consumerFiles
  3. 의존 HAR 내부 obfuscation.txt

HAR 자체를 빌드할 경우에는 consumerFiles → 의존 라이브러리 consumerFiles → 의존 HAR의 obfuscation.txt 순으로 합되어 obfuscation.txt로 출력됩니다. HAP/HSP는 해당 파일을 생성하지 않습니다.

사용자 정의 규칙 파일 구성

프로젝트 또는 라이브러리 생성 시 DevEco Studio는 obfuscation-rules.txtconsumer-rules.txt를 자동 생성하지만, 기본적으로 빈 파일입니다. 필요한 규칙을 직접 작성하거나 별도 파일을 생성하여 경로를 등록할 수 있습니다.

{
  "arkOptions": {
    "obfuscation": {
      "ruleOptions": {
        "enable": true,
        "files": [
          "./obfuscation-rules.txt",
          "./custom-rules.txt"
        ]
      },
      "consumerFiles": [
        "./consumer-rules.txt",
        "./custom-consumer.txt"
      ]
    }
  }
}

규칙 유형 분류

난독화 규칙은 크게 두 범주로 구분됩니다.

  • 변환 옵션(Transformation Options): 최상위 식별자, 속성명 등의 난독화 대상 및 범위를 지정
  • 보존 옵션(Preservation Options): 난독화에서 제외할 식별자를 명시하여 런타임 오류 방지

실무에서는 JSON-RPC 인터페이스, 동적 속성 접근, 리플렉션 대상 등은 반드시 보존 규칙으로 예외 처리해야 합니다.

태그: HarmonyOS ArkTS DevEco Studio build-profile.json5

6월 14일 17:07에 게시됨