Swift 문자열 암호화 + 클래스 난독화 + Dynamic API Hiding (2023 완성)
Swift 앱의 문자열·클래스 이름·시스템 API 호출이 분석 도구에 그대로 드러나던 공백을, 문자열 암호화·클래스 이름 난독화·동적 API 숨김 3종 보호 기능으로 처음부터 구현해 AppSuit Premium에 정착
언어
- Swift
- Objective-C
- Python3
기술
- Mach-O
- LIEF
- Binary Instrumentation
- LC_SYMTAB
환경
- Xcode
- Hopper
- Mach-O Viewer
- PyCharm
Objective-C 앱에서 막아주던 보호가 Swift 영역에는 적용되지 않아, 문자열·클래스 이름·시스템 기능 호출이 분석 도구에 그대로 드러났습니다. 이 공백을 문자열 암호화·클래스 이름 난독화·동적 API 숨김 3종 기능으로 처음부터 구현해 AppSuit Premium에 정착시켰습니다.
배경·과제
-
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 기능 명세서에 정식 메뉴로 정착했고, 고객 가이드에도 정식 포함됐습니다.
-
2026년 1월 iOS 팀 회의에 검증 절차가 공식 수록됐습니다.
-
2026년에는 크로스 플랫폼 앱(React Native·Flutter) 문자열 암호화 연구 트랙으로 이어졌습니다.