React Native jsbundle 역공학: Hermes 바이트코드에서 .env 키 추출

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를 통해 간접 호출해야 합니다.

섹션별 세부 요약

  1. Hermes 엔진과 JSC의 차이
  • Hermes는 빌드 시점에 자바스크립트를 바이트코드로 컴파일하여 .jsbundle 파일 생성 (성능 최적화)
  • JSC는 런타임에 자바스크립트 원본 코드 해석 실행 (메모리 사용량 높음)
  • Expo SDK 46 이상부터 Hermes가 기본 포함되며, 버전별 바이트코드 포맷 차이 존재
  1. .ipa 파일 구조 및 main.jsbundle 분석
  • .ipa 파일은 압축된 앱 리소스로 Payload 폴더의 main.jsbundle 파일이 핵심
  • file main.jsbundle 명령어로 Hermes 바이트코드 버전 확인 (예: version 96)
  • hbctool disasm 또는 hbc-disassembler로 바이트코드 해석하여 .env 키 추출 가능
  1. .env 키 추출 과정
  • string.json 파일에서 EXPO_PUBLIC_TEST_API_KEY 값 확인 (예: test-8c1c-a42491d-599da677-e072e1aa72de)
  • instruction.hasmmetadata.json 파일을 통해 코드 구조 분석
  • hbctool은 version 96까지 지원, hbc-disassembler는 일부 버전만 지원
  1. 보안 취약점 및 대응 방안
  • .env 파일에 포함된 API Key 등 민감 정보는 앱 번들에 노출될 수 있음
  • 앱은 백엔드 서버에서 관리하는 Secret Key를 사용해 API 호출 (OAuth, JWT 등 활용)
  • .env 파일은 서버 환경 변수 또는 환경 관리 도구(예: AWS Secrets Manager)로 대체 권장

결론

  • *React Native 앱의 main.jsbundle 파일은 Hermes 바이트코드로 구성되어 .env 키가 노출될 수 있음.**
  • 보안 강화를 위해 민감 정보는 앱 번들에 포함하지 말고, 서버 측에서 관리해야 합니다.
  • hbctoolhbc-disassembler 도구를 사용해 역공학 분석 시 주의해야 하며, 앱 개발 시 ENV 변수를 백엔드 API 호출로 대체하는 것이 권장됩니다.
  • Hermes 엔진 사용 시 버전별 바이트코드 포맷 차이를 고려해 분석 도구 호환성 확인 필요.