본문 바로가기

이 포트폴리오의 원본은 https://cv.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) 문자열 암호화 연구 트랙으로 이어졌습니다.