본문 바로가기

이 포트폴리오의 원본은 https://ai.iruyo.com (심재빈) 입니다 · 출처 식별자 jbx-7f3a2e9b

← 경력기술서

코어 운영 단독

AppSuit Premium — Swift 바이너리 보호 3종

Swift 앱에서 문자열·클래스 이름·시스템 API 호출이 그대로 노출되던 문제를, 문자열 암호화·클래스명 난독화(2023 상반기)와 동적 API 숨김(2023 하반기)으로 막아 AppSuit Premium에 적용했습니다.

기간
2023.03 – 2023.10 · 8개월
소속
스틸리언
수행 인원
본인 1인 단독
본인 역할
Swift 앱의 문자열 암호화, 클래스 이름 난독화, 동적 API 숨김 세 보호 기능을 보안 코어 모듈(정적 라이브러리)과 빌드 후처리 단계를 묶어 설계하고 구현했습니다. 문자열 암호화와 클래스명 난독화는 2023년 상반기에, 동적 API 숨김은 그 뒤 2023년 하반기 v23.3.0에 올렸습니다. iOS 바이너리(Mach-O ARM64)를 직접 뜯어보는 분석 도구를 Python으로 만들어 결과를 검증했고, QA 자동화와 후속 인력 지도에도 같은 도구를 썼습니다.
정량 임팩트
Swift 보호 3종을 구현했습니다. 문자열 암호화와 클래스 이름 난독화는 2023 상반기에, 동적 API 숨김은 2023 하반기 v23.3.0에 적용했습니다. 이 기능들은 iOS 팀 제품 명세서와 고객 가이드에 정식 포함되고 검증 절차가 iOS 팀 회의에 공식 반영되었으며, AppSuit Premium 도입 고객에 배포되었습니다.
버전·릴리즈
AppSuit Premium iOS 기능 명세서에 정식 기능으로 들어갔고 고객사에도 적용됐다. 2023년에 기본 기능을 완성했고, 2026년 크로스 플랫폼 앱 문자열 암호화 연구로 이어졌다.

언어

  • Swift
  • Objective-C
  • Python3

기술

  • Mach-O
  • LIEF
  • Binary Instrumentation
  • LC_SYMTAB

환경

  • Xcode
  • Hopper
  • Mach-O Viewer
  • PyCharm

Objective-C 앱에서 막아주던 보호가 Swift 영역에는 적용되지 않아 문자열·클래스 이름·시스템 기능 호출이 분석 도구에 그대로 드러났습니다. 이 공백을 문자열 암호화·클래스 이름 난독화(2023 상반기)와 동적 API 숨김(2023 하반기)으로 채워 AppSuit Premium에 적용했습니다.

Swift 문자열·클래스·API 보호 — 빌드 후처리 + 런타임 복원Swift 영역 보호 공백을 3종으로 — 빌드 단계에 바이너리로 내재화, 런타임에만 복원Swift 문자열·클래스·API 보호 — 빌드 후처리 + 런타임 복원Swift 영역 보호 공백을 3종으로 — 빌드 단계에 바이너리로 내재화, 런타임에만 복원빌드 후처리 — 코어 + 패치 2모듈보안 코어 정적 라이브러리에 후처리 패치를 조합소스빌드 산출검증·QA보호 대상 (Swift 소스)문자열클래스 이름시스템 API 이름보안 코어 모듈정적 라이브러리 — 보호 로직 본체패치 ① 문자열 암호화암호문으로 임베드 · 참조 경로 치환패치 ② 클래스 이름 난독화분석 도구에 의미 없는 이름Exclude Rule — NSCoding·Reflection 예외암호화된 바이너리문자열·이름·API 은닉런타임 복원 · 동적 해석문자열은 실행 시점 일괄 복원API는 dlsym·objc_msgSend 해석자체 Mach-O ARM64 분석도구Python 자체 제작 · 바이너리 수준 검증QA 자동화 · 후속 인력 지도·제품 검증2023.03~05 iOS 1인 단독 · 3종 보호 신규 구현 · AppSuit Premium 정식 명세 · 2026 크로스플랫폼 연구로 확장

배경·과제

  • 2022년 말부터 2023년 봄 사이 Swift 앱 보호를 요구하는 고객사가 빠르게 늘었습니다. 하지만 기존 Objective-C 보호 수준이 Swift에는 그대로 돌아가지 않았습니다.

  • 분석 도구로 보면 문자열과 클래스 이름, 호출하는 시스템 기능 이름이 그대로 노출됐습니다. 이 약점을 제품 차원에서 메워야 했습니다.

수행·기여

  • 문자열 암호화(Swift String Encryption)는 소스의 문자열을 암호화된 상태로 앱에 넣고, 실행 시점에만 복원하게 했습니다.

  • 클래스 이름 난독화(Swift Class Name Obfuscation)는 분석 도구에 의미 없는 형태로 보이게 했습니다. NSCoding·NSKeyedArchiver·Reflection 경로에는 이름을 유지하는 예외 규칙(Exclude Rule) 옵션을 직접 설계했습니다.

  • 동적 API 숨김(Dynamic API Hiding)은 시스템 기능 이름을 실행 중에만 찾아 연결하게 해(dlsym·objc_msgSend 기반 런타임 동적 해석), 분석 도구에서 보이지 않게 했습니다.

  • 앱 기동 속도를 유지하려고 무거운 암호 방식 대신 복원 비용이 낮은 경량 변환 구조를 썼습니다.

  • iOS 앱 바이너리(Mach-O ARM64)를 직접 분석하는 Python 도구를 만들어 결과를 바이너리 수준에서 검증했습니다. 이 도구는 QA 자동화, 후속 인력 지도, 이후 제품 검증에도 재사용했습니다.

성과

  • AppSuit Premium iOS 기능 명세서에 정식 메뉴로 들어갔고 고객 가이드에도 포함됐습니다.

  • iOS 팀 회의 안건에 검증 절차가 공식 수록됐습니다.

  • 2026년엔 크로스 플랫폼 앱(React Native·Flutter) 문자열 암호화 연구 트랙으로 이어졌습니다.