안녕하세요. 파인더갭의 "shiro"입니다.
이번에는 안드로이드 분석을 하는대 있어 Service란 기능을 분석해야하는대 어느부분을 보실지 모르시는 분들을 위해 안드로이드의 Service란 무엇인가를 간단히 알아보려 합니다.
간단히 Service가 무엇이고 어떤 특징이 있는지부터 설명드리겠습니다. Service 기능은 백그라운드에서 오래 실행되어야 하는 작업을 위한 아이로 사용자 인터페이스(UI)를 제공하지 않는다는 특징이 있습니다. 인터페이스는 직접적으로 제공하지 않지만 하위의 제공되는 메소드로 activity와 통신해서 구현할 수 있지만 저희한테 중요한 내용은 아닙니다. 아닐겁니다.
Service란 큰 덩어리를 알아봤으니 위에서 잠깐 언급한 하위의 메소드들을 알아보도록 하겠습니다.
- onCreate() Service가 시작될 때 필요한 초기 설정을 수행하는데 사용됩니다. 초기설정이라고 하면 감이 안잡히실 수도 있는지만 간단히 서비스에 필요한 스레드 생성, 리소스 할당 메인 기능이 동작하기 위한 사전작업이라고 생각하시면 됩니다.
- onBind() 다른 컴포넌트가 bindService()를 호출하여 서비스에 연결을 요청할 때 호출됩니다. 이 메서드는 클라이언트가 Service와의 통신을 위한 IBinder 인터페이스를 반환합니다. 아까 위에서 언급드린 작업을 수행하고 그 결과를 activity와 공유해야 하는 경우이 메소드를 사용합니다.
- onUnbind() 이름만 봐도 아시겠죠? 서비스 연결을 해제할 때 호출되는 아이입니다.
- onRebind() onUnbind() 후에 새 클라이언트가 서비스에 다시 바인드될 때 호출됩니다.
- onStartCommand() 서비스가 startService()를 통해 시작될 때 호출되며, 주로 장시간 백그라운드 작업이나 무한 루프 작업에 사용됩니다. 중요한 아이죠
간단한 예제 코드로 자세히 더 알아보죠
보잘 것 없는 UI지만 각각 “서비스 시작” 버튼을 누르면 루팅탐지 로직이 동작하게 만든 예제 앱입니다.
사진 설명을 입력하세요.
아래 코드는 mainactivity에 선언된 버튼의 동작을 리슨하고 있는 코드와 해당 버튼의 이벤트가 발생 시 매핑된 서비스가 동작하게 만든 코드입니다.(보안 솔루션 중 특정 버튼을 눌렀을 때 동작하게 만드는 솔루션도 있어서 알아두면 유용!)
버튼 로직을 보았으니 별로 중요하지 않지만 루팅탐지 로직이 들어있는 서비스 클래스가 포함된 코드 입니다. 로그를 살알짝 주목해주시고 넘어가겠습니다.
해당 로그를 보시면 “서비스 시작”버튼을 누르면 onStartCommand 부분이 “서비스 중지” 버튼을 누르면 OnDestroy 부분이 동작하는 것을 확인할 수 있습니다.
service에 대해 파악하셨다면 분석해야 하는 앱의 기능이 service로 구현되어있을 수도 있겠다란 예상이 가실 겁니다. 추가적으로 Manifest파일을 확인하시면 해당 앱에서 동작하는 서비스의 목록들을 확인하실 수 있습니다.
분석 혹은 버그바운티하시는대 글의 내용이 조금이라도 도움이되셨으면 좋겠습니다.
그럼 다음글에서 뵙겠습니다~
