목록으로

Programming Notes

APK 디컴파일, 난독화 확인 여정을 떠나다

최근 개발한 Android 앱의 난독화가 제대로 적용되었는지 확인하기 위해 APK 디컴파일을 진행했습니다. 앱을 배포하기 전에 난독화가 제대로 작동하는지 확인하는 것은 매우 중요한 과정입니다. 혹시라도 난독화가 제대로 적용되지 않았다면, 코드가 그대로 노출되어 보안상 심각한...

최근 개발한 Android 앱의 난독화가 제대로 적용되었는지 확인하기 위해 APK 디컴파일을 진행했습니다. 앱을 배포하기 전에 난독화가 제대로 작동하는지 확인하는 것은 매우 중요한 과정입니다. 혹시라도 난독화가 제대로 적용되지 않았다면, 코드가 그대로 노출되어 보안상 심각한 문제가 발생할 수 있기 때문입니다. 이번 글에서는 제가 APK 파일을 디컴파일하고, 난독화 적용 여부를 확인하는 과정을 공유하고자 합니다.

APK 파일, 그 속을 들여다보는 방법

먼저 APK 파일에서 classes.dex 파일을 추출해야 합니다. classes.dex 파일은 Android 앱의 실행 코드를 담고 있는 핵심 파일입니다. 이 파일을 분석하기 위해 dex 파일을 Jar 파일로 변환해야 합니다. 이를 위해 dex2jar라는 유용한 도구를 활용했습니다.

dex2jar는 GitHub에서 다운로드할 수 있으며, 압축을 해제한 후 명령 프롬프트를 사용하여 간단하게 dex 파일을 jar 파일로 변환할 수 있습니다. d2j-dex2jar.bat classes.dex와 같은 명령어를 사용하면, classes-dex2jar.jar 파일이 생성됩니다. 이 jar 파일은 이제 Java 디컴파일러를 사용하여 내용을 확인할 수 있게 됩니다.

난독화, 숨겨진 코드를 찾아라!

변환된 jar 파일의 내용을 확인하기 위해 jd-gui라는 Java 디컴파일러를 사용했습니다. jd-gui는 GUI 환경에서 Java 코드를 쉽게 확인할 수 있도록 도와주는 훌륭한 도구입니다. jd-gui를 실행하고 classes-dex2jar.jar 파일을 열어 코드를 살펴보았습니다.

만약 난독화가 제대로 적용되지 않았다면, 클래스 이름, 메서드 이름, 변수 이름 등이 원래의 의미를 가진 이름으로 표시될 것입니다. 이는 누구나 쉽게 코드를 이해하고 분석할 수 있다는 의미가 됩니다.

하지만 난독화가 성공적으로 적용되었다면, 클래스 이름, 메서드 이름, 변수 이름 등이 알아보기 힘든 무작위 문자열로 변경되어 있을 것입니다. 예를 들어, calculateArea()라는 메서드 이름이 a()와 같이 의미 없는 이름으로 변경되어 있다면, 난독화가 제대로 작동하고 있다고 판단할 수 있습니다.

결론: 안전한 앱 배포를 위한 필수 점검

이번 APK 디컴파일 과정을 통해 앱의 난독화가 정상적으로 동작하는 것을 확인할 수 있었습니다. 난독화는 앱의 보안을 강화하는 중요한 방법 중 하나이며, 배포 전에 반드시 확인해야 할 필수 점검 사항입니다.

만약 디컴파일 결과 난독화가 제대로 적용되지 않았다면, ProGuard 설정이나 R8 설정을 다시 한번 꼼꼼하게 확인하고, 빌드 설정을 조정하여 난독화를 다시 적용해야 합니다. 안전한 앱 배포를 위해 난독화는 선택이 아닌 필수라는 점을 잊지 말아야 합니다.