루팅한 안드로이드 스마트폰에 대한 이야기다 


안드로이드 어플중에 루팅 여부를 체크해서 사용에 제한을 거는 어플들이 있다.
내 기기를 내가 관리자 모드로 사용하겠다는데 왜 태클을 거는지 이해할수가 없다.
보안상의 이유가 있다고 하더라도,
루팅은 개인이 선택해야할 선택사항이지 강제적으로 막는 건 개인의 자유를 침해하는 거라고 본다.
개인 소유의 PC를 관리자 모드로 쓰겠다는데 아무도 간섭하지 않는 것 처럼 말이다.
보안과 관련되 이유도 실은 동의하기 어렵다.
해킹을 당한하면 어차피 주요 정보들은 루팅여부와는 관계 없이 억세스 가능한 데이터들이다.
예를 들면 주소록, 메일, 문서들 같은거...
이런 건 보잘것 없는 게임에서조차도 이미 권한을 요구하고 있고 많은 사람들은 이를 허용하고 있다.


아무튼,
이런 제한을 회피하기 위해 SuperSU의 루트 모드를 껐다 켰다 하면서 어플을 사용하는데,
이것도 참 귀찮은 일이다.
클릭 몇번 더 하는 것조차 귀찮다.
단 한번의 터치로 루트 모드를 감췄다가 어플 실행하고 다시 루트 모드로 원복하고 싶다.


역시나 이런 생각을 가진 유저들은 이미 존재했고,
Tasker 라는 어플을 이미 잘 사용하고 있다는 정보를 얻었다. 
특정 이벤트시에 트리거를 발생시키는 어플인데 그 응용범위가 상당히 광범위한듯 하다.
이런 어플이 있는지도 몰랐다니...


하지만, 막강한 기능에도 썩 내키지 않았다.
유료 어플인지라 이거 하나 때문에 구매하긴 좀 그렇고....
프로세스가 상주하는 것도 개인적으로 별로 좋아하지 않는다. (배터리 소모, 성능 저하, 그냥 싫음)
거기다 또한가지.... 이것만으로 루트 모드를 껐다 켰다하는 건 불가능 하다.
애초에 SuperSU가 그런 부가 기능을 가지고 있지 않아서(오직 UI로만 On/Off 가능) SuperSU를 개조(?)한 어플을 사용해야 한단다.
SuperSU 개발 페이지를나 도움말을 봐도 역시나 커맨드로 입력 가능한 옵션이나 파라메터 같은 건 없었다.
사실 가장 내키지 않았던 건 관련 내용이 검색 결과 네이버 카페에 있어서 로그인해서 가입 보기가 귀찮았기 때문이다.


결국 shell script를 이용해서 직접 루트 모드를 감추고 해당 어플을 실행한 후 다시 루트 모드로 원복하는 매우매우 간단한 스크립트를 작성하기로 했다.
이렇게 만든 스크립트는 홈 화면에 ShortCut을 만들지 못한다는 문제가 있다.
이런걸 해주는 어플도 몇 있지만 업데이트 상태라든가 안정성면에서 썩 좋아 보이질 않아서 포기...
그냥 script들이 있는 폴더를 Root Browser 에서 제공하는 Folder ShortCut 위젯으로 홈화면에 넣는 방식과
Wigetsoid를 쓰는 방식 두가지로 사용하기로 했다.
Wigetsoid는 Notification bar나 웨젯에 커맨드 입력이 가능 하다. (현재로선 이 보다 더 깔끔한 방법은 없는 듯)








구체적인 내용은 아래와 같다.
이런 류의 고민을 하는 분들은 참고하시길 바라며,
정확한 정보는 BusyBoxAndroid Debug Bridge를 살펴 보길 바란다.



루트 모드를 감추기 위해 가장 간단무식한 방법인 su 파일의 이름을 변경하는 방식으로 했다.
이를 위해선 시스템 폴더를 쓰기 가능 모드로 바꾸어야 하는데 따로 스크립트를 만들었다.
따로 만들면....
리마운트 하기 전엔 자연스럽게 동작이 안되니까...
모르는 사람이 만져도 어플 실행이 안되는 부가 효과(?)가 있다.
Wigetsoid를 쓴다면 위젯이나 Notification bar에 커맨드를 넣어도 될거다... 아마도...

mount -o rw,remount 디바이스 /system


디바이스를 확인하기위해 터미널에서 mount 명령을 넣어본다.
(터미널 애뮬레이터 어플를 설치하거나 PC 에 연결해서 adb shell을 쓰자)
목록을 잘 들여다 보면 /system 폴더의 디바이스명을 찾을수 있다.



파일 이름 바꾸는건 mv 명령을 쓰면 되고
어플 실행은 Activity Manager 를 쓴다

mv /system/xbin/su /system/xbin/su1234567
am start -W -a android.intent.action.MAIN -n 패키지명/.클래스명
mv /system/xbin/su1234567 /system/xbin/su


Root Browser로 /data/app 폴더를 들어가면 apk 파일들이 쭉~ 나오는데,
어플의 아이콘이 보이므로 해당 패키지명을 짐작할수 있다. (-숫자.apk 제외한 이름)
클래스명은 apk를 열어 보면 AndroidManifest.xml 파일이 있고 거기에 activity class로 명시되어 있다.

AndroidManifest.xml이 바이너리 형태로 인코딩 되어 있다면 그냥 텍스트로 열어선확인이 불가능한데
how-to-view-androidmanifest-xml-from-apk-file에 여러가지 방법이 있으니 맘에 드는 방법을 써서 알아내자.
(stackoverflow는 google 검색에 버금가는 참으로 고마운 사이트다)








위 스크립트를 응용하면 게임의 멀티 계정 운용이나 백업에 특정 어플을 쓸 필요가 없다.
해당 파일 찾아서 cp 명령 같은걸로 덮어씌우거나 데이터를 옮기는 스크립트를 짜면 되니까...


당연히 루팅 여부를 감지하는 방식에 따라 위의 방법으로 회피가 안될 수도 있다.
하지만... 기껏 해야 몇몇 파일의 존재 여부를 검색하는 정도일 것이므로
해당 검색 파일을 찾아 마찬가지로 바꾸면 문제 없을 것으로 예상한다.
그래도 안된다면 구글신에게 물어보면 그만이다.