mprotect는 메모리 영역에 대한 권한을 수정할 수 있다.
페이지에 실행 권한(PROT_EXEC)을 주면 메모리 상에서 코드를 실행할 수 있다.
간단한 C 코드로 메모리 상에서 Hello World를 실행해보자.
payload는 stdout(fd=1)으로 “Hello World” 을 출력하고 종료(exit)한다.
컴파일과 실행은 다음과 같다.
$ gcc mprotect-hello-world.c -o mprotect-hello-world
$ ./mprotect-hello-world
Hello World
ARM 바이너리를 실행하려면 Ubuntu 기준으로 qemu-user와 컴파일러를 설치하면 된다.
$ sudo apt install qemu-user gcc-aarch64-linux-gnu
ARM64 바이너리의 실행은 다음 명령으로 실행할 수 있다.
$ aarch64-linux-gnu-gcc -static test.c -o test
$ qemu-aarch64 ./test
Hello World