유니티 안드로이드 게임 개발에서 ProGuard/R8(코드 난독화 도구)

유니티 안드로이드 게임 개발에서 ProGuard/R8(코드 난독화 도구)

코드 난독화 (Obfuscation)의 목적은 앱의 소스 코드를 보호하는것입니다.  소스 코드의 가독성을 떨어뜨려 악의적인 사용자가 코드를 분석하거나 역공학하는 것을 방지합니다. 결과적으로 프로그램의 취약점을 찾기 어렵게 만들고 알고리즘과 로직을 보호하여 복제 또는 도용을 방지합니다(보안강화, 지적 재산 보호, 역공학 방지)

코드 난독화는 이름 변경(클래스, 메소드, 변수의 이름을 이해하기 어려운 형태로 변경), 제어 흐름 변환(제어흐름 예를들어 조건문, 반복문 등을 이해하기 어렵게 변형), 코드 인라인화, 데이터 변환, 잘못된 코드 삽입(실행되지않는 코드를 삽입하여 분석 방해)등의 기법을 사용합니다. ProGuard/R8, DexGuard, ConfuserEx, Obfuscator-LLVM등의 난독화 도구가있습니다.

난독화된 코드도 결국 디컴파일될 수 있으며 충분한 시간과 자원이 주어진다면 분석이 가능합니다. 디지털 서명, 중요한 데이터 암호화, 런타임 보호기술(Anti-Debugging, Anti-Tampering)등의 대안과 추가 방법들을 참고합니다.


ProGuard/R8
안드로이드 앱에 사용할수있는 오픈 소스 난독화 도구로 코드 난독화, 압축, 최적화 기능을 제공합니다. 난독화 과정에서 클래스, 메소드, 변수 등의 이름을 이해하기 어려운 이름으로 변경하여 악의적인 사용자가 앱의 코드를 역컴파일하고 분석하는것을 방지합니다.
코드 압축(Compression)은 사용되지 않는 클래스나 메소드를 제거하여 APK 크기를 줄이는 작업을 수행합니다.  
코드 최적화(Optimization)는 불필요한 코드를 제거하고 코드를 최적화하여 앱의 실행 성능을 개선합니다.

참고
코드가 난독화되면 디버깅이 어려워질 수 있습니다. 예를 들어  에러 로그에서 난독화된 클래스나 메소드 이름은  문제를 파악하기 어려울 수 있습니다. 
ProGuard/R8 규칙 파일(proguard-rules.pro)을 구성해야 합니다(예를들어 중요한 코드가 난독화되지 않도록 예외 설정)
난독화와 최적화 과정이 추가되기 때문에 빌드 시간이 늘어날 수 있습니다.

댓글

Designed by JB FACTORY