티스토리 뷰

adb를 이용한 안드로이드 화면 추출 및 분석

 

준비 도구 : Android-SDK

 

휴대폰 화면의 데이터를 이용하여 프로그램을 만들기 등에 사용할 수 있습니다.

우선 android-SDK 를 설치하면 platform-tools 폴더 안에 adb.exe 가 있습니다.

adb 는 원격기기(ex. 컴퓨터)에서 휴대폰에 접속을 할 수 있게 해주는 프로그램입니다.

그냥 프로그램을 눌려 실행을 하면 안되고 cmd를 이용하여 옵션을 넣어 주어야 합니다.


cmd 를 실행시켜 adb.exe 가 존재하는 디렉터리로 이동한 후 "adb shell" 명령어를 치시면 그림과 같이 휴대폰에 접속하는 것을 보실 수 있습니다.

 

아시다싶히 리눅스 계열은 파일, 디바이스 등 모든 것을 파일로 관리합니다.

그러므로 화면도 /dev/graphics/fb0 에 하나의 파일로 관리하고 있습니다.


exit로 빠져나오신 후 "adb pull /dev/graphics/fb0 복사할 위치" 명령어를 치시면 화면 파일을 복사합니다.

바이너리 파일이기 때문에 HxD 라는 프로그램을 이용하여 한번 열어보겠습니다.


그림과 같이 바이너리 파일임을 확인할 수 있습니다.

이게 정말 화면 파일인지 bmp 파일의 헤더를 붙여 bmp 파일로 변경시켜 보겠습니다.


일반 bmp 사진을 읽어오면 분혹색 형광칠이 되어있는 0x35 까지가 bmp 파일의 헤더입니다.

이까지만 잘라내어 화면파일 앞에 붙여넣으면 bmp 파일로 변경할 수 있습니다.

단, 해상도와 bit 수를 알맞게 수정해줘야 합니다.

 

안드로이드는 32bit 운영체제 이기때문에 초록색 표시에 16진법이기 때문에 20으로 수정을 해줘야합니다.

빨간색 부분은 화면의 가로 픽셀, 파란색 부분은 화면의 세로 픽셀입니다.

인터넷에 해당 휴대폰의 해상도를 검색 후 알맞게 수정해주시면 됩니다.

빅엔디안으로 표시하기 때문에 자리수가 뒤바꿔 적어야함을 유의해주세요.

저는 베가R3로 해상도가 736*1280 입니다.

16진법으로 바꾸면 02E0*0500 인데 자리수를 바꿔적어 그림처럼 E0 02 , 00 05 로 입력하였습니다.


헤더파일을 수정하여 .bmp 확장자를 넣어 이름을 저장하면 그림처럼 상하가 뒤바뀌어서 나옵니다.

바이너리 데이터들이 좌하단에서 시작하기 때문에 그냥 상하반전하여 보시면 됩니다.

색깔이 이상한 이유는 색상이 bgr 순으로 출력되는데 화면데이터는 rgb 순이기 때문입니다.

폰에 따라서 bgr , rgb 순서가 다를 수 있습니다.

간단한 파이썬을 이용하여 r,b 의 순서를 바꿔주면 제대로 된 색상을 보실 수 있습니다.

저는 이와 같이 bmp 파일로 변경하고 색상을 제대로 출력한 이유는 픽셀 분석용도로 사용하였습니다.

프로그래밍을 이용한 분석시에는 필요없습니다.

이제 fb0 파일이 화면파일임을 알았으므로 간단한 파싱을 해보겠습니다.


제가 만든 코드의 일부분입니다.

이런식으로 색상을 뽑고자하는 곳으로 포인터를 이동 후 fgetc 함수로 r,g,b,a 값을 뽑아내 색상을 분류할 수 있습니다.

이런식으로 폰 화면을 분석하여 어떠한 작업을 하고싶을때 어떤 식으로 하면되는지를 살펴보았습니다.

유익한 정보가 되셨기를 빌며


댓글