React Native 앱의 jsbundle 역공학: Hermes 바이트코드에서 .env 키 추출하기
분야
프로그래밍/소프트웨어 개발
대상자
React Native 개발자, Hermes 엔진 사용자, 앱 보안 분석자
난이도: 중급~고급 (Hermes 바이트코드 분석 기술 필요)
핵심 요약
- *React Native 앱에서
.env
파일의 민감 정보는 Hermes 바이트코드로 번들링되어 역공학 분석에 노출될 수 있습니다.** - Hermes 엔진은 빌드 시점에 자바스크립트를 바이트코드로 변환하여
.jsbundle
파일에 포함합니다. main.jsbundle
파일은Hermes JavaScript bytecode
형식으로 저장되며,hbctool
또는hbc-disassembler
로 역공학 분석이 가능합니다.- 민감 정보 보호를 위해
.env
파일은 서버 측에서 관리하고, 앱은 백엔드 API를 통해 간접 호출해야 합니다.
섹션별 세부 요약
- Hermes 엔진과 JSC의 차이
- Hermes는 빌드 시점에 자바스크립트를 바이트코드로 컴파일하여
.jsbundle
파일 생성 (성능 최적화) - JSC는 런타임에 자바스크립트 원본 코드 해석 실행 (메모리 사용량 높음)
- Expo SDK 46 이상부터 Hermes가 기본 포함되며, 버전별 바이트코드 포맷 차이 존재
.ipa
파일 구조 및main.jsbundle
분석
.ipa
파일은 압축된 앱 리소스로Payload
폴더의main.jsbundle
파일이 핵심file main.jsbundle
명령어로 Hermes 바이트코드 버전 확인 (예: version 96)hbctool disasm
또는hbc-disassembler
로 바이트코드 해석하여.env
키 추출 가능
.env
키 추출 과정
string.json
파일에서EXPO_PUBLIC_TEST_API_KEY
값 확인 (예:test-8c1c-a42491d-599da677-e072e1aa72de
)instruction.hasm
및metadata.json
파일을 통해 코드 구조 분석hbctool
은 version 96까지 지원,hbc-disassembler
는 일부 버전만 지원
- 보안 취약점 및 대응 방안
.env
파일에 포함된 API Key 등 민감 정보는 앱 번들에 노출될 수 있음- 앱은 백엔드 서버에서 관리하는
Secret Key
를 사용해 API 호출 (OAuth, JWT 등 활용) .env
파일은 서버 환경 변수 또는 환경 관리 도구(예: AWS Secrets Manager)로 대체 권장
결론
- *React Native 앱의
main.jsbundle
파일은 Hermes 바이트코드로 구성되어.env
키가 노출될 수 있음.** - 보안 강화를 위해 민감 정보는 앱 번들에 포함하지 말고, 서버 측에서 관리해야 합니다.
hbctool
및hbc-disassembler
도구를 사용해 역공학 분석 시 주의해야 하며, 앱 개발 시ENV
변수를 백엔드 API 호출로 대체하는 것이 권장됩니다.- Hermes 엔진 사용 시 버전별 바이트코드 포맷 차이를 고려해 분석 도구 호환성 확인 필요.