본문 바로가기

Android (안드로이드)

[Mac] 안드로이드 APK 파일 Decompile 하기

 

저는 주로 쇼핑몰 앱 개발 및 운영을 하는 아이폰/안드로이드 앱 개발자입니다.

요즘 보안에 민감해서 그런지 ISMS 인증 등 앱 취약점 점검들을 많이 하고있습니다.

 

취약점 점검을 하면 주로 앱 위 변조(무결성) 검사, 소스코드 난독화 여부, 디바이스 루팅(탈옥) 여부 체크 3가지를 중점적으로 점검합니다.

 

소스코드 난독화 (ProGuard) 적용 후 개발자는 제대로 소스코드가 난독화가 되었는지 확인이 필요하기 때문에 

이번 포스팅에서는 Mac OS에서서 안드로이드 APK파일을 Decompile 하는 방법을 적어보겠습니다.

 

아래의 링크들은 디컴파일에 필요한 파일입니다.

 

dex2jar-2.0

 - APK파일을 디컴파일 하기위해 필요합니다.

 - 다운로드 : https://sourceforge.net/projects/dex2jar/

 

 jd-gui-1.4.0.jar

 - 디컴파일된 jar 파일을 보기 위해 필요합니다

 - 다운로드 주소 (OS에 맞는 버전을 설치) : http://jd.benow.ca/

 

다운받은 dex2jar-2.0.zip을 적당한 경로에 옴겨놓고 압축을 풀어줍니다.

그리고 디컴파일할 APK파일을 하위 경로로 옴겨주세요

 

 

 

 

이제 터미널을 열어 dex2jar-2.0 경로로 이동합니다.

터미널 명령어가 익숙하지 않으신분들은 dex2jar-2.0 폴더를 우클릭 -> 정보가져오기를 눌러 위치를 드래그해서 복사 후 터미널에 붙여넣어주세요.

 

 

 

터미널에서 명령어를 쉽게 사용하기 위해 해당 경로로( dex2jar-2.0 압축 해제한 경로) 이동합니다.

 

 

디컴파일 명령어를 실행합니다.

 sh d2j-dex2jar.sh "디컴파일 할 APK파일명"

 sh d2j-dex2.jar.sh app-relases.apk

 

 d2j-dex2jar.sh: line 36: ./d2j_invoke.sh: Permission denied

 

디컴파일 명령어를 실행 했을 때, Permission denied가 발생 할 수도있습니다.

Permission denied가 발생하면 d2j_invoke.sh 파일의 권한을 수정합니다.

chmod 744 d2j_invoke.sh

 

다시 한번 명령어를 실행합니다.

sh d2j-dex2jar.sh app-release.apk 

 

정상적으로 디컴파일이 실행되면 아래와 같은 메세지가 출력됩니다.

dex2jar app-release.apk -> ./app-release-dex2jar.jar

 

 

이제 jd-gui-1.4.0.jar 파일을 실행 시켜주고 열린 창에 jar파일을 드래그해서 열어주면 디컴파일된 소스코드를 볼 수 있습니다.