2022년 11월 13일 일요일

누가 나의 알람을 껐을까? (안드로이드 실전 디버깅) 삼성 휴대폰, android debugging

당신은 가끔 당신 휴대폰의 알람 소리를 못들을 때가 있지 않은가?

내가 잠결에 껐겠지 생각하거나 귀신이 끈건 아닐까라고 생각했던건 아닌지? 

실제로 그런 일이 나에게 일어났습니다.

여기에서는 휴대폰 오류로 알람이 안울린 것인지 누군가에 의해서 꺼진것인지 로그를 바탕으로 분석하는 방법을 다룰 것입니다. (삼성 휴대폰 기준, 가지고 있는 단말이 삼성 휴대폰 밖에 없어서...)


1. 안드로이드 단말 로그 획득 방법

일반적인 안드로이드 단말은 adb 연결된 상태에서 dumpstate 로 로그를 생성 시킵니다. 

하지만 이것은 PC를 연결해야지만 로그 생성이 가능하기 때문에 굉장히 불편합니다.

삼성 단말에서는 다이얼에서 *#9900# 을 누르면 이러한 dumpstate를 파일을 단말에 저장하는 기능을 제공합니다.

sysdump라는 위 메뉴에 진입 하게 되는데 Run dumpstate/logcat 메뉴를 이용하면 됩니다.
그리고 Copy to sdcard 라는 메뉴는 생성된 로그를 log 폴더로 복사하는 역할을 합니다. (로그 생성시 수분 정도 대기해야 합니다.)

해야 할 일은 이 부분을 숙지하고 있다가 문제가 발생하면 해당 메뉴를 실행시켜 주면 됩니다.


2. 디버깅의 기본

안드로이드 뿐만 아니라 모든 SW의 디버깅을 할때 해당 Domain의 지식이 없는 경우 맨땅에 헤딩(?) 하게 됩니다.

이 글을 읽는 분도 입력 또는 알람이나 소리 관련해서는 전혀 아는게 없다고 판단하고 정상적인 상황에서 로그가 어떻게 나오는지 미리 확인해야 합니다.

이때 단말을 PC에 연결해서 정상적인 상황에서 로그가 어떤 Text로 나오는지 익혀 둡니다.

기본적으로 실시간 디버깅을 위해서는 adb tool을 단말에 설치해야 하는데 이것은 android sdk(Android Studio)를 설치하거나 adb 실행 파일만 따로 구해야 합니다.

Android Studio > Tools > SDK Manager 에서 platform-tools 다운로드 가능합니다.

Sdk 경로는 기본 경로가 아래 경로입니다.

C:\Users\사용자 이름\AppData\Local\Android\Sdk\platform-tools


SDK를 설치하지 않고 사용할 수 있는 adb link를 공유합니다. 

Android Debug Bridge version 1.0.41

Version 33.0.3-8952118

https://drive.google.com/file/d/1ezVHiS0Cd-c2y8bPgxRobhk7T-FmXGmr/view?usp=sharing


2.1 로그 파일 쉽게 보기

adb logcat으로 실시간 로그를 볼 수 있긴 하지만 많은 로그들이 한꺼번에 지나가므로 좀 더 편한 툴이 필요합니다.

가장 많이 사용하는 툴이 logfilter라는 어플이 있는데 LogFilter_1.8.jar / LogFilterCmd.ini 파일을 구했습니다.

cmd line에서 java -jar LogFilter_1.8.jar 와 같이 실행 시킵니다.

Java가 설치 안되어 있다면 java 설치해야 합니다.

저의 경우 Android Studio 설치시 jre 가 같이 설치되어 C:\Program Files\Android\Android Studio\jre 여기 경로에서 java를 이용 가능합니다. (java 또는 jre를 직접 설치하면 됩니다.)

아래와 같이 실행 하였습니다.

C:\Users\계정이름\AppData\Local\Android\Sdk\platform-tools>"C:\Program Files\Android\Android Studio\jre\bin\java" -jar LogFilter_1.8.jar

단말은 개발자 모드에서 USB디버깅을 활성화 해줍니다.


2.1 일반 상태에서 키를 누를때 발생하는 로그

Tag에 Input 을 넣어서 필터를 해주면 터치 할때 마다 아래와 같은 형태의 로그가 발생됩니다.

2.1.1 Volume Up 키

input event(3value=1) 버튼 누를때
input event(3value=0) 버튼 해제 될때
Delivering key to (숫자VU action: 0x0)
Delivering key to (숫자VU action: 0x1)

2.1.2 Volume Down 키

input event(9value=1) 버튼 누를때
input event(9value=0) 버튼 해제 될때
Delivering key to (숫자VD action: 0x0)
Delivering key to (숫자VD action: 0x1)

2.1.3 Power 키


input event(9value=1) 버튼 누를때

input event(9value=0) 버튼 해제 될때

!@notifyKey(116), action=0

!@notifyKey(116), action=1


2.2 일반 상태에서 터치를 할때 발생하는 로그

터치 누를때 Touch events action is 0x0 

터치에서 손을 뗄때 Touch events action is 0x1 


3. 문제 발생한 상황에서의 로그

1번에서 파일을 생성했으면 단말을 PC와 연결 후 log 폴더에서 dumpstate로 시작하는 파일을 검색합니다. 해당 파일에서 앞서 설명한 버튼과 터치에 관한 로그를 검색하도록 합니다.

실제 로그를 찾아보니 "'" 문자를 표시 안하는 경우가 있어서 logfilter의 로그와 조금 다릅니다. (분석시 참고)

5:59분 알림인데 실제 아래와 같은 로그가 발견 되었습니다.

줄   267138: 11-08 21:26:50.175  1000  1244  2072 I InputReader: Touch event's action is 0x1 (id=2, t=0) [pCnt=1, s=] when=418904.535647

줄   316374: 11-09 05:59:15.281  1000  1244  2072 I InputReader: Touch event's action is 0x0 (id=2, t=0) [pCnt=1, s=0.16732 ] when=419384.247445

줄   317546: 11-09 05:59:15.948  1000  1244  2072 I InputReader: Touch event's action is 0x1 (id=2, t=0) [pCnt=1, s=] when=419384.915882

줄   340006: 11-09 06:58:29.906  1000  1244  2072 I InputReader: Touch event's action is 0x0 (id=2, t=0) [pCnt=1, s=0.16733 ] when=419443.865649


5:59분 15초에 0.6초 가량 터치했다가 손을 뗀 기록이 남아 있습니다.


4. 결론

알림이 어떤 휴대폰 오류로 안울린 것이 아니라 무의식 중에 터치하여 알람을 끈것으로 확인되었습니다.


5. 주의점

로그는 내부적으로 크기가 정해져 있기 때문에 가능하면 문제 발생 즉시 로그 확보가 되어야 분석이 가능합니다.


댓글 없음:

댓글 쓰기