카테고리 없음

optee (QEMU를 이용하여)

crypsec 2024. 11. 30. 14:11
반응형

QEMU란?

QEMU (Quick Emulator)는 다양한 기능을 제공하는 오픈소스 가상화 소프트웨어로, 여러 운영 체제나 아키텍처에서 실행할 수 있다. 즉, QEMU는 x86, ARM, PowerPC, MIPS, SPARC 등 다양한 CPU 아키텍처를 에뮬레이션할 수 있어, 다른 아키텍처의 가상 머신을 실행할 수있다.

 

예를 들면, 거의 20년전에 나는 PC로 별의 커비 거울속의 대미궁이라는 게임을 즐겨했었다. 이뿐만 아니라 친구에 의해 포켓몬스터 골드버전 등 정말 많은 게임을 플레이 해봤다.

 

별의 커비 거울속의 대미궁

 

그런데 이 게임은 PC용으로 만들어진게 아니다. 원래는 아래와 같은 게임보이 기기에서 할 수 있는 게임이다. 

 

그렇다면 의문이 생긴다. 게임보이도 아닌데 PC 환경에서 어떻게 저런 게임들이 실행이 되었을까?? 바로 아래와 같이 PC에 게임보이 에뮬레이터를 설치하여 가상의 환경을 만들고, 게임 파일을 에뮬레이터로 Open하여 게임을 실행하는 것이다.

장점이라면 여러 설정들을 수정할 수 있고, 특히나 치트키를 사용해서 전설의 포켓몬은 모두 잡아봤다.

 

현재 나는 주로 QEMU를 ARM CPU를 타겟으로 컴파일된 실행파일을 돌려보는데 주로 사용하고 있다.

 

[네이버클라우드 기술&경험] 가상화 개념 이해하기#1, QEMU vs KVM

Part.1에서는 QEMU와 KVM을 비교함으로써 가상화에 대한 기본 개념을 이해하고, I/O 가상화 작동 원리를 간략히 알아보고, Part. 2에서는 I/O 가상화의 성능을 높이기 위한 솔루션인 SPDK에 대해 알아보

medium.com

 

따라서 QEMU를 이용하면 OPTEE를 실행할 수 없는 환경에서도 이를 실행해볼 수 있다. OPTEE는 QEMU로 실행할 수 있도록 친절하게 그 방법을 알려주고 있다. 

 

OPTEE

https://optee.readthedocs.io/en/latest/index.html

OPTEE를 사용하는 방법은 공식 사이트에서 잘 나와있다. 하지만 처음 접한다면 많은 삽질과정을 겪을 것이다.

QEMU v7을 이용한 방법을 소개하고자 한다.

 

https://optee.readthedocs.io/en/latest/building/prerequisites.html 에서 docker 파일을 제공해주며, docker를 설치하여 사용하는게 사실 제일 쉬울 것이다.

하지만 이 글에서는 docker를 쓰지않고 WSL2의 Kali linux에서 직접 설치 및 진행한다. 다만 OPTEE에서 지원하는 Linux 베포판인지 확인하고 지원하더라도 버전이나 베포판에 따라 설치해야하는 패키지등이 다를 수 있기 때문에 이런 부분은 고려해야한다.

 

$ sudo apt update && sudo apt upgrade -y

 

이제 필요한 패키지를 설치해야한다. 설치 패키지는 docker 스크립트를 참고하여 설치하였다.

$ sudo apt install -y adb acpica-tools autoconf automake bc bison build-essential ccache cpio cscope curl device-tree-compiler e2tools expect fastboot flex ftp-upload gdisk git libattr1-dev libcap-ng-dev libfdt-dev libftdi-dev libglib2.0-dev libgmp3-dev libhidapi-dev libmpc-dev libncurses-dev libpixman-1-dev libslirp-dev libssl-dev libtool libusb-1.0-0-dev make mtools ninja-build python3-cryptography python3-pip python3-pyelftools python3-serial python-is-python3 rsync swig unzip uuid-dev wget xalan xdg-utils xterm xz-utils zlib1g-dev

 

참고로 나는 docker 스크립트에서의 libncurses5-dev 대신 libncurses-dev를 설치했다. 이유는 libncurses5 라는 패키지가 없다는 단순한 이유다. netcat은 기본적으로 설치되어있고 패키지 설치 버전이 두 가지가 있어 충돌이 나길래 깔끔하게 install에서 제외했다. 이 글을 보는 누군가도 본인 상황에 맞게 (오류를 피해)패키지를 설치하는 것이 중요하다.

 

다음 과정은 https://optee.readthedocs.io/en/latest/building/devices/qemu.html 부분을 참고해서 진행하면 된다.

$ mkdir optee
$ cd optee
$ repo init -u https://github.com/OP-TEE/manifest.git
$ repo sync
$ cd build
$ make toolchains

 

 

 

$ sudo make -j32 run

빌드 진짜 오래걸리니까 꼭 -j 옵션 붙이자!, 참고로 공식 홈에서는 sudo 권한 없이도 될 것 같고 실제 sudo 권한 안주고도 뭔가 동작한걸로 보이는데 원래 make run을 때리면 노멀월드, 시큐어 월드 창이 두개가 떠야한다. 이게 qemu.

(아 돌리고 나서 생각해보니까 로그나 찍어볼 걸.. make -j32 run > build.log)

 

QEUM로 띄운 Nomal World

Nomal World - 흰색 창
좌 - Secure World, 우 - Nomal World

 

c입력

뒤에 (qemu) 옆에 c입력

root 로그인

 

 

https://github.com/ForgeRock/optee-build/blob/master/docs/qemu.md

https://kickstartembedded.com/2022/11/07/op-tee-part-3-setting-up-op-tee-on-qemu-raspberry-pi-3/

 

xtest

 

 

https://youtu.be/CWG2WuOJtIc?feature=shared

https://youtu.be/m8WlSanGDwI?feature=shared

https://optee.readthedocs.io/en/latest/building/devices/qemu.html

https://kickstartembedded.com/2022/11/07/op-tee-part-3-setting-up-op-tee-on-qemu-raspberry-pi-3/

https://mahadevrahul.blogspot.com/2016/02/how-to-set-up-and-run-optee-on-qemu.html

반응형