Self-Improvement
QEMU, 펌웨어을 통한 공유기 구현 1 본문
기본적인 qemu 사용법 예시는 아래의 방법과 같다.
(예시는 arm으로 하였지만 2탄에서는 mips로 실제 공유기를 구현해보겠다.)
* gemu 설치
apt-get -y install qemu (qemu-system-arm 설치가 안될시 추가 명령어로 설치)
mkdir qemu (다운받을 파일들을 모아놓을 곳)
* armel 설치
https://people.debian.org/~aurel32/qemu/(원하는 형식으로 다운받기 본인은 armel의 wheezy_armel_standard 다운받음)
* 커널, 부트? 이미지 다운
wget https://people.debian.org/~aurel32/qemu/armel/vmlinuz-3.2.0-4-versatile
wget https://people.debian.org/~aurel32/qemu/armel/initrd.img-3.2.0-4-versatile
* qemu 네트워크 브릿지 설정 (네트워크 브릿지 설정안할시 qemu-system-arm 명령어 할 시에 -redir tcp:9000:80 의 옵션를 사용해야함)
brctl addbr br0
ip addr flush dev eth0
brctl addif br0 eth0
tunctl -t tap0 -u `whoami`
brctl addif br0 tap0
ifconfig eth0 up
ifconfig tap0 up
ifconfig br0 up
brctl show
dhclient -v br0
출처 : https://gist.github.com/extremecoders-re/e8fd8a67a515fee0c873dcafc81d811c
* qemu 실행
qemu-system-arm -M versatilepb -kernel vmlinuz-3.2.0-4-versatile -initrd initrd.img-3.2.0-4-versatile -hda debian_wheezy_armel_standard.qcow2 -append "root=/dev/sda1" -net tap,ifname=tap0 -net nic
(네트워크 브릿지를 안할시에 ---> qemu-system-arm -M versatilepb -kernel vmlinuz-3.2.0-4-versatile -initrd initrd.img-3.2.0-4-versatile -hda debian_wheezy_armel_standard.qcow2 -append "root=/dev/sda1" -redir tcp:9000::80 -redir tcp:9022::22)
※ -redir tcp:9022::22는 가상os에 파일을 전송하기위해 설정, -redir tcp:9000::80은 웹 접속을 위해 설정 ex) HostIP:9000
qemu 가상화가 실행되고 로그인 화면이 나오게 된다.
암호는 root/root, user/user로 되어있으며 root로 시작한다.
* scp 명령어를 통해 펌웨어 파일시스템을 qemu 가상화에 전송해준다.
scp cpio-root.tar root@IP:저장할 장소 (scp할시 root에 대한 퍼미션을 풀어줘야함 vi /etc/ssh/sshd_config, 네트워크 브릿지 설정은 안하면 -P 9022 추가)
* qemu에서 tar xvf로 풀어주고 파일시스템 내부로 들어간다.
tar xvf cpio-root.tar
cd cpio-root
* chroot을 해준다
chroot . ./bin/sh
* 웹을 시작해준다
/sbin/httpd
※chdir to "/var":aborting 오류가 나면 default 폴더에있는 것을 tmp파일로 옮겨준다.
* 기존 리눅스에서 가상OS IP로 접속 (네트워크 브리지를 안하였다면 HostIP:9000으로 접속한다)
※네트워크 브리짓 설정안하고 진행하게되면 404 Not Found가 뜨게된다. 아래의 명령어를 qemu안에서 실행한다.
cd /
mkdir /home/httpd/192.168.0.1/sess-bin
cp -r cgibin/* /home/httpd/192.168.0.1/sess-bin/
cp -r cgibin/* /bin/login-cgi
다시 localhost:9080으로 접속하면 성공.
'Firmware' 카테고리의 다른 글
XM25QH64 와 동일한 칩 (flashrom 가능) (0) | 2021.05.14 |
---|---|
라즈베리파이4 flashrom 최신버전 v1.2 사용하기 (MX25L25645G) (0) | 2021.03.30 |
iot 플래시 메모리 덤프 (0) | 2021.02.02 |
QEMU, 펌웨어을 통한 공유기 구현 2(MIPS) (8) | 2019.01.03 |
JFFS2 filesystem 추출 (0) | 2018.11.16 |