첫번째로 APK 와 ZIP의 압축 방식은 동일하다. 확장자만 다를 뿐이다. 그렇기 때문에 확장자 .apk를 .zip으로 바꾸어압축 해제를 해도 파일이 깨지거나 안보이는 경우는 없다.
두번째로 안드로이드는 자바와 개발환경이 굉장히 유사하다. 거의 똑같다 그렇기 때문에 자바에서 사용하는 문법 또는 컴파일 환경이 동일하다. 자바에서는 .java파일을 .class파일로 컴파일하고 .class파일을 JVM위에 올려서 여러 플랫폼에서 해당하는 JVM만 깔려 있다면 하나의 .java파일로 여러 플랫폼에서 사용할 수 있다는 것이다.
안드로이드도 똑같다. 안드로이드도 JVM을 써도 되지만, 라이선스의 문제 때문에 JVM의 역할을 하는 Dalvik VM이라는 가상머신을 따로 만들어 환경을 구현했다. JVM == Dalvik 이라고 생각해도 좋다. 몇년 전부터 ART라는 것으로 대체되기 시작했는데 궁금하면 더 찾아보도록 하고
위 2개와 같은 개념 때문에 자바나 안드로이드를 디컴파일하는건 굉장히 쉽다. 컴파일된 .class파일을 디컴파일 해주면 된다. C는 cpu마다 어셈블리가 다 달라서 디컴파일 내용이 조금씩 다르지만, class파일은 JVM위에서 돌아가기만 하면 되기에 하나의 유형으로 컴파일되게 된다.
옛날에는 APK -> ZIP으로 바꾸고 압축을 해제해서 dex파일을 jar파일로 변환(dex2jar)하고 jar파일을 자바 코드로 변환(jd-gui)해주는 프로그램으로 분석 했었지만 이 2개의 기능이 하나로 합쳐진 프로그램이 개발되었다.
바로 JADX-GUI이다.
https://github.com/skylot/jadx
GitHub - skylot/jadx: Dex to Java decompiler
Dex to Java decompiler. Contribute to skylot/jadx development by creating an account on GitHub.
github.com
여기서 설치할 수 있고, 압축 해제 후 윈도우라면 .bat 리눅스나 맥이라면 .sh를 실행하면 프로그램이 실행된다.
실행하고 원하는 apk를 열게 되면,
이런식으로 자바 코드가 전부 보이게 된다. 맨 처음에도 말했듯이 .apk과 .zip은 확장자만 다를뿐 같은 압축형식이기 때문에 바로 .zip파일을 열어도 JADX가 잘 보여준다.
윈도우나 리눅스 프로그램 분석보다는 크게 어렵지 않은 것 같다.
사실상 안드로이드 앱 분석은 자바코드 리뷰, 분석이다.
'도구' 카테고리의 다른 글
Java와 C#의 공통점과 dotPeek .NET 디컴파일러 (0) | 2022.04.13 |
---|
최근댓글