본문 바로가기

Hardware(IoT)

Iptime Firmware 분석

반응형

Iptime Firmware 분석

 

ipTIME G204 펌웨어 버전 7.60 펌웨어 다운로드

http://iptime.com/iptime/?pageid=4&page_id=126&keyword=7.60&uid=9565&mod=document

 

EFM, ipTIME 아이피타임

이지메시, 이지메쉬, 메시와이파이, 기가 와이파이, 유무선 및 무선 인터넷 공유기, 와이파이 증폭기 및 확장기, 기업 및 가정용 나스, NAS STORAGE 등 제품소개와 펌웨어 다운로드 고객지원 제공

iptime.com

g204_kr_7_60.bin
1.84MB

 


 

 

1) binwalk g204_kr_7_60.bin

binwalk로 확인했을 때, 파일이 두개가 보인다. 0~65592까지 i.tmp이고, 65592~720896까지가 Squashfs 파일시스템이다.

i.tmp는 앞부분이기에 부트로더가 포함되어 있을것이라고 생각한다. 

 

 

 

bootloader만 dd명령어로 잘라보자.

 

2) dd if=./g204_kr_7_60.bin of=bootloader count=65592 bs=1

 

나머지 커널도 잘라보자

 

3) dd skip=65592 if=./g204_kr_7_60.bin of=i.tmp.gz bs=1

 

 

i.tmp.gz으로 만든건 해당 파일을 xxd로 확인했을 때, gz파일의 시그니처인 if8b로 시작하기 때문이다.

 

4) gzip -d i.tmp.gz

gzip 압축을 해제했고, i.tmp가 보인다.

 

xxd로 i.tmp를 확인했을 때, 커널 시그니처가 보인다.

 

binwalk로 i.tmp를 확인했을 때, 리눅스 커널인 zImage와 두 개의 gzip 파일이 보인다.

 

5) binwalk -e i.tmp

i.tmp를 추출했더니 2EA0, initrd, initrd.gz이 나왔다.

 

initrd(initial ramdisk)는 Linux 커널 부팅 과정에서 사용되는 초기 RAM 디스크이다. 커널과 통신하거나 루트파일 준비하는 기능들을 한다. initrd 파일을 확인했을 때, Linux EXT filesystem이라고 한다. 마운트해서 더 자세히 확인하자.

 

6) sudo mount initrd ./FILE_SYSTEM/

6번 명령어를 하기 전에 FILE_SYSTEM 디렉터리를 하나 만들어야 한다. 마운트가 되면 루트 디렉터리가 노출된다.

 

처음에 확인했던 파일 중에 파일시스템이 하나가 더 있었다. dd명령어로 잘라보자.

 

7) dd skip=720896 if=./g204_kr_7_60.bin of=./RFS.bin bs=1

RFS.bin 파일을 잘라서 확인한 결과, Squashfs filesystem으로 나온다. 

 

binwalk -e 옵션으로 추출했을 때, 결과가 없다. 

 

에러 메시지에 나오듯 sasquatch를 다운로드 받으라고 한다. 

 


sasquatch 다운로드

https://github.com/devttys0/sasquatch

 

GitHub - devttys0/sasquatch

Contribute to devttys0/sasquatch development by creating an account on GitHub.

github.com

 

위 깃헙 페이지에서 git clone에서 설치해보면 make할 때 에러가 발생하기 때문에 아래 명령어로 다운로드 받아야 한다.

 

sudo apt-get install build-essential liblzma-dev liblzo2-dev zlib1g-dev
git clone --quiet --depth 1 --branch "master" https://github.com/devttys0/sasquatch
cd sasquatch
wget https://github.com/devttys0/sasquatch/pull/51.patch && patch -p1 <51.patch
sudo ./build.sh

sasquatch

 

 

설치가 완료된 후 실행해보면 아래와 같은 화면이 나온다.


8) binwalk -e RFS.bin

다시 RFS.bin을 추출해보면 파일시스템이 정상적으로 만들어진게 보인다.

 

이젠 파일시스템을 합쳐보자.

9) mkdir ALL_FILE_SYSTEM

cd ALL_FILE_SYSTEM

sudo cp ../_i.tmp.extracted/FILE_SYSTEM/* . -Rfpd

sudo cp ../_RFS.bin.extracted/squashfs-room/* ./cramfs/ -Rfpd

 

10) sudo find . | cpio -o --format=newc > ../rootfs.img

현재 디렉토리의 모든 파일을 찾아서 cpio 형식으로 새 파일 시스템 이미지를 생성하고, 이를 rootfs.img라는 파일로 저장한다.

 

11) cd ..

gzip -c rootfs.img > rootfs.img.gz

생성된 rootfs.img 파일을 gzip으로 압축하여 rootfs.img.gz라는 파일로 저장한다.

 

12) dd if=i.tmp of=zImage bs=1 skip=16 count=11920

zImage 카빙을 해준다.

 

qemu-system-arm -M versatilepb -m 128M -kernel zImage -initrd rootfs.img.gz -append "root=/dev/ram rdinit=/bin/sh console=ttyAMA0,115200" -nographic

 

 

참고

https://key-boom.tistory.com/49

 

728x90