안드로이드어플은 기본적으로 dalvik byte code로 이루어진 자바 코드와 c/c++ 코드로 이루어진 JNI를 함께 사용합니다. 그렇기 때문에 JNI는 흔히 알고있는 bof 공격이 가능하며 경우에 따라서는 완벽한 RCE의 경로가 될 수도있습니다.

이번포스트는 Android Application Exploit을 하기위한 분석방법 및 디버깅방법을 설명합니다.

--1
압축해제 프로그램으로 apk파일을 열어보면 이런 구조로 되어있습니다. 여기서 우리가 봐야할건 lib폴더안에 있는 파일들입니다.

--2
안드로이드는 여러 cpu 아키텍쳐를 지원하기 때문에 아키텍쳐마다 라이브러리를 컴파일하여 apk파일에 저장합니다. 일반적으로는 스마트폰 환경에서 많이 이용하기 때문에 armeabi-v7a폴더에 있는 파일을 보겠습니다.

--3
so파일이 들어있으며 apk파일에 따라 갯수가 달라질 수 있습니다. ida pro를 이용하여 so파일을 디버깅 해보겠습니다.

--4
ida 폴더에 dbgsrv 폴더안에 있는 디버깅서버파일 입니다. 여기서 android_XX파일이 여러개 있는데 아키텍쳐에 맞는 파일을 아래의 명령어를 이용하여 안드로이드 기기에 넣어줍니다.
adb push android_server /data/local/tmp/
그리고 디버깅서버 포트포워딩을 위한 명령어도 쳐줍니다.
adb forward tcp:23946 tcp:23946
ida를 켠뒤 Debugger->Attach->Remote ARMLinux/Android debugger을 선택해줍니다.

--5
위와같이 설정해주고 OK를 누릅니다.

--6
위와같이 프로세스리스트가 보이게됩니다.

--7
디버깅할 프로세스 so파일에 브레이크포인트를 걸고 run을 했을때 제대로 동작하는 모습입니다.