본문 바로가기

오늘의 하루

ADB와 안드로이드의 구조에 대한 이해도가 증가하였습니다.

※ 이 글은 정보 제공이 목적이 아님을 알려드립니다.



아침 9시부터 시작해서, 방금 오후 2시반까지 약 5시간 반에 걸쳐 


패널이 고장난 상태로 암호가 걸린 갤럭시s 로 부터 contacts2.db를 빼오는데 성공 했다.


테그라크 커널이 깔려있고 ext4로 변환되있는 상태에서, 방법은 여러가지 떠올랐다.

다행인건 USB디버깅 모드가 켜져 있었던것. (아마도, 확인할 방법이 없다.)


1. google계정으로 푼다. (폰이 인터넷에 연결이 안돼있으므로 불가.)

2. kies로 주소록을 빼온다. (암호잠금이므로 불가.)

3. adb로 접근하여 잠금을 무효화한다. ( 보류 , 이후 불안정성으로 불가.)

4. adb로 접근하여 루트권한을 얻고 연락처db를 빼온다. ( adb에서 루트권한을 얻는데 자꾸 실패함. 또 루트권한을 요청해도 슈퍼유저 앱에서 허가 버튼을 눌러줘야 하는데 폰은 터치가 불가능.)


이후 해결책으로 adb에서 자동으로 루트권한을 주는 커널을 설치했으나, 테그라크 커널이 아니기 때문에 무한 부팅이 일어나서 다시 테그라크 커널로 돌아옴.


테그라크 커널 과거 모델중, 루트권한이 있는경우 자동으로 #을 얻는 커널을 발견하고 플래싱함.

그리고 리커버리에서도 루트권한을 얻어준다고 하니, 리커버리모드로 일단 도전.


adb reboot recovery


정말로 리커버리 모드에서는 #권한을 갖고 있지만 /system만 mount 되있고, 정작 contacts2.db가 있는 /dbdata는 언마운트 되어 있다.


adb 명령어를 뒤져서 마운트 명령을 찾는다.


mount -t rfs /dev/block/mmcblk0p2 /data


를 찾아서 입력했더니 실패, 곧 rfs 가 아니라 ext4 인걸 생각하고


mount -t ext4 /dev/block/mmcblk0p2 /data


로 입력했더니 성공, 신나서 바로


mount -t ext4 /dev/block/mmcblk0p2 /dbdata


했더니 성공하는데 내용물이 data 내용물이랑 동일함. 이때 눈치를 채고 원래 폴더를 찾아 나섬. 그리고 찾음. 그런데


mount -t ext4 /dev/block/stl10 /dbdata


입력했더니 Device or resource busy 라면서 오류를 뿜내면서 깔쌈하게 실패. 


이것저것 시도해봤는데 결국 실패.



원점으로 돌아옴. 리커버리에서 마운트시켜서 db를 빼오자는 방법은 포기하고, 정상 부팅에서 adb 루트권한을 찾는 방법으로 돌아옴.


각종 삽질 끝에, su 바이너리만 있으면 su명령이 듣지 않는가 하는 생각이 떠오름. 리눅스 독학할때 이런 명령코드는 어딘가 파일로 저장되어 있다 는 게 도움이 됨.


su바이너리를 찾아 다녔으나, 티스토리-다음에서 모조리 다운로드를 막아 놓았음.


결국 내 갤스4에서 system/xbin 에 있던 su를 뽑아다가 


system의 루트권한을 갖는 리커버리 adb로 들어가서 push 해줌. 아주 잘들어감.


이후 정상리붓을 하고 adb shell 을 쳤더니 감격스럽게도 


#


이 뜸. 울먹임.


조심스럽게, cd data 해봄. ls 치니 정상적으로 목록이 나옴.

핵심인 cd dbdata를 해보았더니, 드디어 권한거부가 아닌 목록을 보여줌. 거의 울뻔함.


adb를 빠져나와서, 


adb pull /dbdata/databases/com.android.providers.contacts/contacts2.db


몇십번을 쳐도 매번 '그런파일 없음', '권한거부' 를 띄우던 프롬프트가


다른 결과를 보여줌.




한동안 감격에 겨워서 키보드를 못움직임.






다 끝난줄 알았는데, contacts2.db를 어떻게 처리해야할지 생각을 안해봄.


미라크A에게 집어넣었더니 못읽고, 재부팅하니 구태여 새걸로 교체해버림.


결국 컴퓨터상에서 열어보기로함. 다행히 예전에 카톡 내용 분해할때 db파일 리더기를 쓴게 기억이남.


SQlite로 열어봄. 잘보임. data 카테고리를 추출해서 엑셀로 옮기고 대충 정리해서 작업 끝남.



adb pull /dbdata/databases/com.android.providers.contacts/contacts2.db


 # mount -t ext4 /dev/block/stl10 /dbdata


[출처] 리커버리(recovery) 모드에서 루트권한(su) 사용하기|작성자 자양


mount -t ext4 /dev/block/stl10 /dbdata





mount -t ext4 /dev/block/mmcblk0p2 /data

[출처] 리커버리(recovery) 모드에서 루트권한(su) 사용하기|작성자 자양


mount: Device or resource busy







알게된점.


1. SU 바이너리의 위치와 적용방법.

2. ADB 명령어 중 push, pull, mount, umount, root, chmod 644

3. 리커버리 모드에선 언마운트되있는 데이터가 있으며, 특정 데이터를 특정 폴더에 마운트 시키는 방식으로 진행된다.

4. zimage에는 커널 설정이 들어가며, 커널의 구동과정중에 3의 마운트 명령이 들어가는듯 하다.

5.