상세 컨텐츠

본문 제목

구형 스마트폰 활용 - 스마트폰 전원연결 시 자동 부팅

IT 이야기/보안 이야기

by 리치윈드 - windFlex 2020. 3. 10. 10:05

본문

반응형

[영진닷컴]하루 만에 배우는 안드로이드 앱 만들기, 영진닷컴 안드로이드 프로그래밍 정복. 1, 한빛미디어 모두의 안드로이드:안드로이드 스튜디오로 나만의 앱을 만들 수 있다!, 길벗 베이직스틴 양면 USB LED 고속 충전케이블 안드로이드 C타입, 혼합 색상, 1개

 

 

점점 증가하는 구형 핸드폰. 어디에 사용할 수 있을까?

최근 오래된 스마트폰을 재활용하는 주제에 관심을 가지는 분들이 많은 것 같아요.

오래된 스마트폰을 그냥 방치하기에는 아깝기도 하거니와, 최근 오래된 스마트폰을 활용한 네비게이션,. 블랙박스,. 운전지원 카메라 등으로 활용하는 애플리케이션 들이 다수 등장하고 있기 때문이다. 

 

이러한 동기로 스마트폰을 재활용하는 주제에 관심을 갖게 되었다.

 

여기서 한가지 해결해야한 사항이 있습니다만,

오래된 스마트폰에 다음과 같은 수정이 필요한데, 이게 기술적 레벨이 좀 있습니다. 

 

  1. 커스텀 펌웨어 업데이트, 플래싱

  2. 루팅 (SuperSU)

  3. mount 변경

  4. lpm파일 내용 변경

  5. 펌웨어 verification check bypass


 

1. 커스텀 펌웨어 플래싱 (Flashing Custom Firmware )

 

스마트폰의 롬메모리에 기록되어 있어, 스마트폰이 부팅되는 시점에 자동으로 실행 시켜주는 내장형 SW를 펌웨어라고 합니다. 

정식 펌웨어는 스마트폰을 마음대로 수정하지 못하고, 보안상 안전하도록, 권한을 제한해 두었습니다. 

따라서, 권한을 해제하기 위해서 정식 펌웨어 대신 커스텀 펌웨어로 갈아 줘야 합니다 .

 

펌웨어는 스마트폰의 플래쉬 메모리에 들어 있기 때문에, 펌웨어를 플래쉬 메모리에 넣어주는 과정을 플래싱 이라고 합니다. 

 

플래싱을 하는 방법을 제조사에서 사용하는 여러가지 방법 (JTAG, 디버그 포트, ART 등)이 있지만, 가장 쉬운 방법으로 삼성전자 서비스 센터에서 사용하고 있는 오딘(Odin)이라는 프로그램을 사용해 봅시다. 


우선, 오딘 파일을 다운로드 합니다.

ㅡ 스마트폰 모델에 맞추어서 커스텀 펌웨어를 다운로드 해야 합니다. 

  • ODin.exe 를 열어서 AP항목에 다운로드 받은 펌웨어 파일을 설정한다.

  • 설정이 완료되면 Start를 눌러서 Flashing을 시작한다. 

※ 단, 스마트폰에서 개발자 옵션 > USB Debug Mode 설정이 되어 있어야 한다. 

   또한 S6 시리즈의 경우, 개발자 옵션 > OEM 해제 설정을 필수적으로 확인 해야 된다. 

 

펌웨어 Flashing이 완료 되면, 왼쪽 위에 Cache , or Reset 으로 표기과 된다. 

또한 스마트폰에서는 안드로이드가 빨강색 애꾸 모드로 표기된다 ^^

 

 

 

 

 

2. 루팅 (Rooting)

 

두번째 과정은 루팅(Rooting ) 입니다. 

앞서 말씀 드렸듯이, 제조사의 정식 펌웨어는 권한을 제한해 두었는데, 좀 더 상세하게는 시스템의 관리자( root 계정) 계정을 막아 둔 것입니다. 그래서, Root 계정, 즉 관리자 권한을 확보하는 것을 루팅(rooting) 이라고 합니다.

iOS의 경우는 탈옥 (JailBreak)라고 하지요.

 

이 전단계의 컴스텀 펌웨어로의 플래싱 과정은 바로 이 루팅을 하기 위함 입니다. 


ㅡ SuperSU를 다운 받아 설치한다.

   . 리눅스 계열에서 su 라는 명령어는 root 권한을 얻는 명령어 인데, 이 때문에 SuperSU 라는 루팅 프로그램으로 이름이 붙었습니다. 

 

Google App Store 에서 Pro 버전은 유료로 판매되고 있다. 

밑으로 내리다 보면 Free 버전이 있으니, 이것을 설치하면 될것 같네요. (Free는 5각형이 빨강색이다.)

 

ㅡ 루트권한앱으로 등록한다.

  EX. Adb 사용 시, su명령을 실행하면, supersu에서 허용여부를 묻습니다.

아래와 같이 최초 adb 연결 가능한 장치를 확인한다. 

최초 adb 확인시 아래와 같이 인증되지 않음 (unauthorized)로 표기 되는데, 이는 스마트폰 측에서 접속하용을 하지 않았기 때문이다. 

PS C:\adb> adb devices

List of devices attached

af9a9be2        unauthorized
더보기


스마트폰 화면을 보면 확인 버튼이 뜨는데, Ok를 눌러준다.
 ADB 는 Android Device Bridge의 약자로써, 스마트폰에 연결하여 디버깅 하는 용도의 연결 프로그램이라고 보시면 됩니다. 


[lpm파일 백업]

 

자 이제 작업 시작 전에, 관련 파일을 백업하여 둔다. 

스마트폰 외부에서 백업을 하기위하여, adb pull 명령어를 사용하여, 스마트폰 내부의 파일을 외부의 PC로 가져 온다. 

PS C:\adb> adb pull /system/bin/lpm

/system/bin/lpm: 1 file pulled. 10.5 MB/s (181028 bytes in 0.016s)

 

[실제 lpm 파일 변경]

 

PS C:\adb> adb shell

on7nlteskt:/ $ cd /system/bin

on7nlteskt:/system/bin $ ls -al lpm

-rwxr-xr-x 1 root shell 181028 2015-11-10 09:56 lpm

on7nlteskt:/system/bin $ su -

위 Cmdline의 결과 처럼 super user 권한을 요청 (su - 명령)을 실행하면,

스마트폰의 SuperSU가 권한 승인 화면이 뜨게 되며, OK를 누를 경우, root로 user가 변경됩니다.

 

자. 이제 lpm 파일 내용만 변경하면 되는데, 파일 시스템의 마운트가 마직막으로 문제입니다.

 

이 시점에서 권한 테스트를 한번 해 보지요.

아래 실행 결과처럼 파일 Read 권한이 없는것을 확인 할 수 있습니다.

on7nlteskt:/system/bin # cp lpm lpm2

cp: lpm2: Read-only file system

 

 

3. 마운트 모드를 read write로 변경

 

1|on7nlteskt:/system/bin # mount

rootfs on / type rootfs (ro,seclabel,relatime)

tmpfs on /dev type tmpfs (rw,seclabel,nosuid,relatime,size=957516k,nr_inodes=157480,mode=755)

devpts on /dev/pts type devpts (rw,seclabel,relatime,mode=600)

none on /dev/cpuctl type cgroup (rw,relatime,cpu)

adb on /dev/usb-ffs/adb type functionfs (rw,relatime)

proc on /proc type proc (rw,relatime,gid=3009,hidepid=2)

sysfs on /sys type sysfs (rw,seclabel,relatime)

selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)

debugfs on /sys/kernel/debug type debugfs (rw,seclabel,relatime)

pstore on /sys/fs/pstore type pstore (rw,seclabel,relatime)

none on /acct type cgroup (rw,relatime,cpuacct)

tmpfs on /mnt type tmpfs (rw,seclabel,relatime,size=957516k,nr_inodes=157480,mode=755,gid=1000)

tmpfs on /mnt/secure type tmpfs (rw,seclabel,relatime,size=957516k,nr_inodes=157480,mode=700)

tmpfs on /mnt/secure/asec type tmpfs (rw,seclabel,relatime,size=957516k,nr_inodes=157480,mode=700)

/dev/block/vold/public:179,65 on /mnt/secure/asec type sdfat (rw,dirsync,nosuid,nodev,noexec,noatime,nodiratime,fs=vfat:32,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,utf8,shortname=winnt,namecase=0,delay,smart,ausize=8192,adj_hid,adj_req,symlink=0,bps=512,errors=remount-ro)

/data/knox/tmp_sdcard on /mnt/knox type sdcardfs (rw,nosuid,nodev,relatime,mask=0077)

/data/knox/sdcard on /mnt/knox/default/knox-emulated type sdcardfs (rw,nosuid,nodev,relatime,low_uid=1000,low_gid=1000,gid=1015,multi_user,mask=0006)

/data/knox/sdcard on /mnt/knox/read/knox-emulated type sdcardfs (rw,nosuid,nodev,relatime,low_uid=1000,low_gid=1000,gid=9997,multi_user,mask=0027)

…

…

위에서 확인할 수 있듯이 시스템 마운트가 RO (ReadOnly)로 설정되어 있습니다.

이것을 변경해 주어야만 파일변경이 가능합니다. 

mount -o rw,remount /system

주의할점은,

re,remount 사이의 공백이 있으면 안됩니다. 저는 이것 때문에 한참 고생 했네요. 

on7nlteskt:/system/bin # mount -o rw, remount /system

mount: 'remount'->'/system': No such file or directory

1|on7nlteskt:/system/bin # mount -o rw,remount /system

위와 같이 공백이 존재하는 경우, 에러가 발생한다. 

#!/system/bin/sh

/system/bin/reboot

 

 

 

 


 

 

4. lpm파일 백업 및 내용 변경

 

on7nlteskt:/system/bin # history

1       ls

2       cd /system/bin

3       ls

4       ls -al lpm*

6       mount -o rw,remount /system

7       mount

8       cp lpm lpm2

9       ls -al lpm2

10      chmod 755 lpm2

11      cat > lpm

12      cat lpm

13      ls -al lpm

 

 

 

 

 


 

5. 펌웨어 검증 바이패스 (Firmware verification Check Bypass)

 

마지막으로 커스텀 펌웨어를 적용했을 경우, 스마트폰 디바이스에 따라서 펌웨어 체크섬을 체크하는 경우가 있다. 

때때로 커스텀 펌웨어의 버전이 잘 않맞는 경우, 이 체크썸에서 에러가 발생하여 자동으로 fACTORY mode에 진입하는 경우가 발생한다. 

 

   /system/reboot

 

ㅡLpm파일 백업

adb devices

adb pull /system/bin/lpm

adb shell

 

루팅을 했으나, lpm파일을 변경할 수는 없습니다.  Read Only 파일 시스템 이기 때문에 할 수 없다고 하네요.

좀 더 찾아 보니,  시스템 마운트가 ro (readonly)로 마운드 되어 있습니다.

 

mount 명령어를 실행해 보면 마운트 설정내용을 볼수 있습니다. 

$ mount
…
…
$ mount -o remount rw /system

또는

mount -o remount rw /

 

반응형

'IT 이야기 > 보안 이야기' 카테고리의 다른 글

메타스플로잇 (metasploit) 맛보기  (0) 2020.03.10
Single Line Web Shell  (0) 2020.03.10

관련글 더보기

댓글 영역