본문 바로가기

NHN AppGuard 네이티브 코드 난독화 - 빌드 단계에서 앱을 보호하다

NHN AppGuard 네이티브 코드 난독화


리버스 엔지니어링을 완전히 막는 도구는 없습니다. 하지만 공격자가 포기할 만큼 분석 비용을 키우는 도구는 있습니다.

NHN AppGuard 네이티브 코드 난독화는 소스 코드를 직접 바꾸지 않고 컴파일 단계에서 iOS·Android 앱의 네이티브 코드를 보호합니다.

NHN Cloud와 함께 안전한 앱 보안 방법을 알아보세요.


1. NHN AppGuard 네이티브 코드 난독화 (Native Code Obfuscator)

앱의 핵심 알고리즘과 비즈니스 로직은 공격자가 가장 먼저 분석하려는 대상입니다.

NHN AppGuard의 네이티브 코드 난독화는 난독화 기능을 포함하도록 커스텀한 LLVM 기반 컴파일러 툴체인입니다.

소스 코드를 직접 바꾸지 않고 컴파일 과정의 LLVM IR(Intermediate Representation) 단계에서 네이티브 코드 구조를 변형해, 릴리스 바이너리의 리버스 엔지니어링 난이도를 높입니다.

iOS Xcode Toolchain과 Android NDK Toolchain 환경에 맞춰 제공되며, 개발팀은 기존 프로젝트 구조를 유지한 채 NHN AppGuard가 제공하는 커스텀 툴체인으로 릴리스 빌드를 수행할 수 있습니다.

  • 소스 코드 수정 부담 없이 빌드 단계에서 난독화 적용
  • C/C++, Swift, Objective-C 기반 네이티브 코드 보호
  • iOS Xcode Toolchain 및 Android NDK Toolchain 환경 대상으로 제공
  • 제어 흐름 평탄화, 산술 명령어 치환, 문자열 인코딩 제공

2. 왜 네이티브 코드 난독화가 필요한가?

모바일 앱에는 인증, 암호화, 결제, 게임 로직, 라이선스 검증, 핵심 알고리즘처럼 외부에 노출되면 안 되는 코드가 포함됩니다.

특히 네이티브 코드는 성능과 보안이 중요한 영역에 사용되는 경우가 많아, 분석 대상이 되면 서비스 로직과 자산이 직접적으로

위협받을 수 있습니다.

일반적인 바이너리 분석 도구는 함수 구조, 분기 흐름, 문자열, 산술 패턴을 단서로 삼아 내부 동작을 추적합니다.

난독화는 이러한 단서를 흐리게 만들어 분석자가 동일한 로직을 이해하는 데 더 많은 시간과 비용을 쓰도록 만듭니다.

NHN AppGuard의 네이티브 코드 난독화는 네이티브 코드가 바이너리로 만들어지는 과정에 개입합니다.
앱 실행 결과는 유지하면서 내부 구조를 분석하기 어렵게 변형해, 배포 산출물에 보안 방어 레이어를 추가합니다.


3. 툴체인 방식의 차별점

소스 코드가 아니라 빌드 파이프라인에서 보호합니다

기존 방식처럼 개발자가 직접 소스에 보호 코드를 삽입하거나, 난독화를 위해 코드 스타일을 바꿀 필요가 없습니다.

NHN AppGuard는 난독화 패스가 포함된 커스텀 LLVM 기반 툴체인을 제공하며, 해당 툴체인으로 빌드할 때 LLVM IR 단계에서 난독화를 수행합니다. 개발자는 기존 소스 구조를 유지한 채 보안 강화를 적용할 수 있습니다.

 

언어와 플랫폼 경계를 낮춥니다

LLVM 기반 컴파일 흐름을 활용하기 때문에 Android NDK의 C/C++ 코드와 iOS Xcode Toolchain의 C/C++, Swift, Objective-C 네이티브 코드에 난독화를 적용할 수 있습니다. 여러 플랫폼을 운영하는 팀도 iOS용 커스텀 툴체인과 Android NDK용 커스텀 툴체인을 통해 동일한 보안 개념을 각 빌드 환경에 맞춰 적용할 수 있습니다.

 

출시 프로세스에 가까운 지점에서 적용됩니다

소스 단계가 아니라 컴파일러 툴체인 단계에서 난독화를 적용하면, 릴리스 대상 바이너리에 직접 보호 효과를 반영할 수 있습니다. 개발 브랜치의 가독성과 유지보수성을 해치지 않으면서, 배포 산출물에는 분석 방어 레이어를 추가하는 방식입니다.

네이티브 코드 난독화 툴체인 플로우


4. 제공 기능

제어 흐름 평탄화

조건문과 분기 구조를 원래 형태로 추적하기 어렵게 변형합니다. 평탄화된 함수에서는 모든 분기가 하나의 큰 분기 테이블로 합쳐지고, 실행 순서는 "1번 동작 → 7번 동작 → 3번 동작 → 12번 동작 …"처럼 흩어진 형태가 됩니다.

각 단계 번호는 무작위로 섞여 있어 번호만으로는 의미를 추측하기 어렵습니다.

분석자는 함수를 직관적인 블록 구조로 파악하기 어려워지고, 실제 실행 경로를 이해하기 위해 분기 테이블을 일일이 따라가야 합니다.

 

산술 명령어 치환

단순한 산술 연산을 동일한 결과를 내는 다른 명령어 조합으로 바꿉니다.

원본변환 예시
a + b a − (−b)
a + b (a + 임의값) + b − 임의값
a − b a + (b의 반대수)
비트 연산 임의값을 끼운 다단계 식으로 분해

빌드할 때마다 다른 패턴이 무작위로 선택되며, 치환을 1~3회 반복할 수 있습니다. 코드 패턴 기반의 자동 분석을 어렵게 만들고, 핵심 로직의 의미를 한눈에 파악하기 어렵게 합니다.

 

문자열 인코딩

바이너리에 노출되는 주요 문자열을 인코딩하여 정적 분석 단계에서 민감한 단서가 쉽게 드러나지 않도록 합니다.

일반 앱은 strings 같은 명령어만으로도 API 주소, 정책 키워드, 내부 상태명 등이 평문으로 드러나며, 이는 분석의 출발점이 됩니다.

인코딩된 문자열은 빌드 시점에 암호화되어 저장되고 실행 시점에 복호화됩니다. (XOR 기반, 빌드마다 새 키 자동 생성)

 

난독화 적용 전후 바이너리에서 추출된 문자열 비교


5. 개발 Flow는 어떻게 달라지는가

기존 개발 Flow

  1. 개발자가 소스 코드를 작성합니다.
  2. 플랫폼 기본 컴파일러와 빌드 설정으로 앱을 빌드합니다.
  3. 생성된 바이너리를 테스트하고 배포합니다.
  4. 공격자는 배포된 바이너리의 함수 구조, 문자열, 분기 흐름을 분석합니다.

이 흐름에서는 개발 생산성은 높지만, 릴리스 바이너리에 포함된 핵심 로직이 비교적 직접적인 형태로 남을 수 있습니다.

민감한 로직을 보호하려면 개발자가 수동으로 코드를 변형하거나 별도 보호 로직을 추가해야 하는 부담이 생깁니다.

 

NHN AppGuard 난독화 툴체인 적용 Flow

  1. 개발자는 기존 방식대로 C/C++, Swift, Objective-C 코드를 작성합니다.
  2. 빌드 환경에 NHN AppGuard가 제공하는 커스텀 LLVM 기반 툴체인을 설치하고 선택합니다.
  3. iOS Xcode Toolchain 또는 Android NDK Toolchain 흐름에서 NHN AppGuard 툴체인으로 릴리스 빌드를 수행합니다.
  4. 컴파일 과정의 LLVM IR 단계에서 난독화 패스가 실행됩니다.
  5. 난독화된 네이티브 바이너리를 테스트합니다.
  6. 기존 배포 프로세스에 따라 서명, 패키징, 스토어 배포를 진행합니다.

개발자는 읽기 쉬운 소스 코드를 유지하고, 보안 처리는 커스텀 툴체인을 사용하는 빌드 파이프라인에서 자동화할 수 있습니다.

보안 담당자는 보호 정책을 빌드 설정과 툴체인 설정으로 관리하고, 릴리스 산출물 기준으로 난독화 적용 여부를 검증할 수 있습니다.

NHN AppGuard 난독화 툴체인을 적용한 릴리스 빌드 파이프라인


6. 개발팀이 얻는 장점

소스 코드 유지보수성 보존

난독화를 위해 원본 소스의 구조를 인위적으로 복잡하게 만들 필요가 없습니다. 개발자는 평소처럼 읽기 쉽고 테스트하기 쉬운 코드를 유지하고, 난독화는 빌드 단계에서 처리할 수 있습니다.

 

CI/CD 적용에 유리

커스텀 컴파일러 툴체인 방식은 수동 작업보다 자동화에 적합합니다. 릴리스 빌드, 보안 빌드, 고객사별 빌드처럼 목적에 따라 난독화 설정을 분리하고, CI/CD 파이프라인 안에서 일관되게 적용할 수 있습니다.

 

플랫폼별 네이티브 자산 보호

iOS와 Android 모두 네이티브 코드 영역을 활용하는 앱이라면, 플랫폼별 빌드 환경에 맞춰 보호 전략을 적용할 수 있습니다. 하나의 제품 안에서 여러 언어와 모듈을 쓰더라도 핵심 보호 목표를 일관되게 유지할 수 있습니다.

 

리버스 엔지니어링 비용 증가

난독화는 공격자의 분석을 불가능하게 만든다고 약속하는 기술이 아니라, 분석 비용을 높이는 기술입니다.NHN AppGuard 네이티브 코드 난독화는 분기, 연산, 문자열 단서를 변형해 분석자가 핵심 로직을 이해하는 데 더 많은 시간과 노력을 쓰도록 만듭니다.


7. 적용 대상

보호하면 좋은 코드

  • 인증 및 라이선스 검증 로직
  • 암호화, 복호화, 키 처리 로직
  • 결제, 포인트, 쿠폰, 재화 처리 로직
  • 게임 클라이언트 핵심 로직
  • 부정 사용 탐지 및 보안 정책 로직
  • 외부 노출 시 서비스 위험이 커지는 알고리즘

8. 지원 환경

타깃 플랫폼 빌드 환경 플랫폼 빌드 환경 아키텍처 제공 방식
iOS macOS aarch64(M1 이상 Apple silicon) Xcode Toolchain
Android macOS aarch64(M1 이상 Apple silicon) NDK LLVM Toolchain

빌드 환경(호스트 OS)은 macOS를 지원합니다.

9. 한눈에 보는 도입 효과

관점 기존 방식 NHN AppGuard 난독화 툴체인 적용
개발 코드 개발자가 직접 보호 코드를 고려해야 함 원본 소스 구조 유지
적용 위치 소스 수정 또는 후처리 중심 커스텀 LLVM 툴체인의 컴파일 과정에서 적용
자동화 수동 관리 부담 발생 가능 빌드 파이프라인 연동에 적합
분석 대응 바이너리 구조와 문자열 단서가 노출될 수 있음 분기, 연산, 문자열 단서를 변형
운영 방식 플랫폼별 보호 방식이 분산될 수 있음 iOS, Android NDK용 커스텀 툴체인으로 일관 적용

10. 마무리

개발 속도는 유지하고, 배포 바이너리는 더 어렵게

NHN AppGuard 네이티브 코드 난독화는 개발팀이 소스 코드 품질과 생산성을 유지하면서도,

릴리스 바이너리에 보안 방어 레이어를 더할 수 있도록 설계된 커스텀 LLVM 기반 네이티브 코드 난독화 툴체인입니다.

핵심 로직이 앱 안에 포함되어야 한다면, 그 로직은 분석에 더 많은 비용이 드는 형태로 배포되어야 합니다.
NHN AppGuard 난독화 툴체인은 바로 그 지점을 빌드 과정 안에서 해결합니다.

NHN AppGuard 네이티브  코드 난독화로 iOS와 Android 앱의 핵심 네이티브 로직을 더 어렵게 분석되는 형태로 보호하세요.

▶ 상세 기능: NHN AppGuard 상세 기능

▶ 요금 확인: NHN AppGuard 요금 안내