안드로이드 apk 디컴파일과 실제 http요청원리
Rest Api 토이 프로젝트를 진행해보면서 Postman(http request test tool)으로 http 요청을 많이했었다.
문득, 모바일(특히 안드로이드)에서는 어떻게 요청(헤더가 뭔지, 응답은 어떻게 오는 지와 같은 정보)하는 것인지 궁금해졌다. 웹 브라우저는 개발자도구에서 실제 http 헤더와 body 모두 볼 수 있었는데, 모바일 네이티브앱에서는 감이 안왔다.
검색해보니, apk내부에서 okhttp라는 내부 라이브러리를 사용하는 것인데, 직접적으로 확인하고 싶은데, 사용자가 실제로 알기는 힘들어보였다. 그래서 실제 apk를 까봐서 내부동작이 어떻게 돌아가는 지 알고싶어졌다.
다운받은 .apk파일은 어디에 있지?
상용앱들은 play스토어에 있다. 검색해보니, 내부 디렉토리의 data에 위치한다고 한다. 실제로 다운받아 보니 존재하지 않았다.
상용 apk를 pc에서 다운받는 법
apk를 다운로드 해주는 서비스 웹들이 많았다. 되는 것도 있고 ,안되는 것도 있었다. 그렇게 실제로 다운받았다.
그 다음 - 역공학
이 apk의 타겟 확장자에 따라 2가지 방식이 있다.
.smali는 apktool.jar로
smali라는 파일로 디컴파일 하는 방식은 apktool이 있다.
apktool.jar와 apktool.bat를 다운받고 명렁어를 치면 되는 방식이다. 그러면 smali라는 파일들이 포함된 폴더로 변환되는데, 본인은 이 언어를 잘 알지 못하므로 크게 도움이 되지는 않는다. 하지만 앱에서 일부 수정하고 다시 빌드하고 싶을 때는 유효한 방법이다.
.java는 jadx-gui로
jd-gui와 비슷한 방식이다. 코드검색도 되고, 익숙한 언어이다 보니, 실제 어떻게 돌아가는 지 알 수 있다. 다만 실제 앱을 다운받아 보니 난독화가 진행되어 있어, 필드명이나 클래스명이 a,b 이런식으로 되어 있어, 효율적으로 소스를 분석할 수는 없었다.
결론
간접적으로 안드로이드의 역공학 절차를 진행해보면서, 안드로이드랑 친해졌다. 나중에 기회가 될때 프로젝트 진행해보면 안드로이드 업무와 협업할 일이 있을 때 편해질 것 같다.