Magisk - 시스템 수준 "매직 마스크"
Magisk(Magic Mask)는 topjohnwu가 개발한 오픈소스 안드로이드 프레임워크입니다. 2016년 출시 이후 가장 인기 있는 안드로이드 시스템 수정 도구 중 하나로 자리매김했습니다. Magisk의 핵심 혁신은 "시스템리스(systemless)" 기술을 통해 시스템 파티션을 수정하지 않고도 루트 권한 획득 및 모듈식 기능 확장을 달성하는 것입니다.

핵심 기능 및 장점
1. 시스템 없는 루트
시스템 파티션을 가상으로 마운트하고 덮어쓰면 /system 파티션을 수정하지 않고도 루트 권한을 얻을 수 있으며, OTA 업데이트 실패나 보안 메커니즘(예: Google SafetyNet) 감지가 발생하지 않습니다.
2. Magisk 모듈 저장소
- 시스템 수준 기능 향상 및 사용자 정의: 인터페이스 미화(사용자 정의 상태 표시줄, 글꼴 교체), 성능 최적화("BlackHog" 모듈을 통한 메모리 사용량의 지능적 관리 등) 등이 있습니다.
- 개인정보 보호 및 보안 보호: 광고 필터링(전역적인 광고 차단을 달성하기 위해 "AdAway" 모듈을 설치함), 권한 관리("AppOpsX" 모듈을 통해 애플리케이션 권한을 정밀하게 제어하거나, 애플리케이션 위험 제어 감지를 우회하기 위해 장치 지문을 위조함), 루트 숨김("Shamiko" 모듈과 결합하여 시스템 보안 감지를 우회함) 등이 있습니다.
- 개발자 디버깅 및 원격 관리: 동적 분석(애플리케이션 리버싱 및 동적 후킹을 위한 "Frida-server" 모듈 통합), 원격 액세스 모듈(SSH 프로토콜을 통해 장치를 원격으로 제어하기 위한 "MagiskSSH" 모듈 배포), 호환성 테스트(다양한 환경에서 애플리케이션의 성능을 확인하기 위해 장치 모델 및 Android 버전 번호 위조) 등이 있습니다.
- 사용자 정의 가능한 모듈: 예를 들어, 애플리케이션을 일괄적으로 설치하고, 네트워크 정책을 구성하거나 예약된 작업을 실행하는 모듈을 개발합니다.
3. Zygisk 동적 주입
v24 버전에서 도입된 Zygisk 기술은 Android 시스템 핵심 프로세스인 Zygote를 주입하여 보다 효율적인 모듈 작동과 숨겨진 루트 감지 기능을 제공합니다.
4. 숨기기 모드
특정 애플리케이션(예: 뱅킹 앱 및 게임 부정행위 방지 시스템)의 루트 상태를 숨길 수 있으며, "Shamiko"와 같은 플러그인과 함께 사용하면 루트 감지 메커니즘의 90% 이상을 우회할 수 있습니다.
마기스크 배치
이번에는 Firefly RK 하드웨어 플랫폼을 기반으로 Magisk Delta(fdac22ba 버전)를 부트 파티션을 패치하거나 시스템 이미지를 수정하지 않고 Docker 환경에서 Android에 손실 없이 배포했습니다.
- 장치: ROC-RK3588S-PC
- 펌웨어: ROC-RK3588S-PC_Ubuntu20.04-Minimal-r2407_240929
- 기기 시스템 환경 : " 기술 사례 - Docker에서의 Android " 환경 구축 완료
설치 단계
(1) magisk.tar, magisk_setup.rc, setup.sh를 호스트 머신으로 가져옵니다.
//If the host machine is connected to the Internet, you can use the SCP
command to import the host machine
scp ./magisk_delta_fdac22ba/magisk.tar root@xxx.xx.xx.xx:/root/
scp ./magisk_delta_fdac22ba/remove.rc root@xxx.xx.xx.xx:/root/
scp ./magisk_delta_fdac22ba/setup.sh root@xxx.xx.xx.xx:/root/
//Or push to the host machine via adb
adb push ./magisk_delta_fdac22ba/magisk.tar /root/
adb push ./magisk_delta_fdac22ba/magisk_setup.rc /root/
adb push ./magisk_delta_fdac22ba/setup.sh /root/
(2) magisk_setup.rc 권한을 설정합니다.
root@firefly:~# chmod 644 /root/magisk_setup.rc
root@firefly:~# ls -l /root/magisk_setup.rc
-rw-r--r-- 1 root root 979 May 13 07:23 /root/magisk_setup.rc
(3) 호스트의 컨테이너/aic.sh 시작 스크립트를 수정합니다.
run_cmd "docker run -itd --restart=always --privileged $CONTAINER_NAME $HOST_NAME $DATA_BIND \
$CONFIG_COMMON $CONFIG_PRIVATE \
$CONTAINER_NETWORK $CONTAINER_MAC $CONTAINER_IP $PORT_BIND \
+ -v ~/magisk_setup.rc:/vendor/etc/init/magisk_setup.rc \
+ -v ~/setup.sh:/setup.sh \
+ -v ~/magisk.tar:/magisk.tar \
$ANDROID_IMAGE"
(4) 최초 시작 시 실행
./aic.sh -i # Initialization for the first time
./aic.sh -r <android image.tgz> <number of containers>
Magisk 기능 검증 및 사용
설치 검증
1. 호스트 머신이 네트워크에 연결되어야 합니다.
2. 컨테이너 상태 보기
root@firefly:/userdata/container# docker ps -a --format "테이블 {{.ID}} \t {{.Ports}} "
CONTAINER ID PORTS
725921edb3a2 0.0.0.0:1100->5555/tcp, :::1100->5555/tcp
3. 호스트 IP 확인
root@firefly:/userdata/container# ifconfig eth0
eth0: flags=4163 mtu 1500
inet 172.16.10.211 netmask 255.255.0.0 broadcast 172.16.255.255
inet6 fe80::fa62:d724:f565:ffed prefixlen 64 scopeid 0x20
ether 6a:01:8e:a5:3f:2c txqueuelen 1000 (Ethernet)
RX packets 384418 bytes 118264726 (118.2 MB)
RX errors 0 dropped 38243 overruns 0 frame 0
TX packets 127586 bytes 29265180 (29.2 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 92
4. PC는 ADB를 사용하여 컨테이너에 연결하고 화면을 캐스팅합니다.
lwy@DESKTOP-KGTB0I2: adb connect 172.16.10.211:1100
lwy@DESKTOP-KGTB0I2: scrcpy.exe -s 172.16.10.211:1100
- 최초 시작 시에는 APP에 접속하여 초기화 재시작을 완료해야 합니다.
- 검증 버전 번호: fdac22ba-delta(25210(D))
Magisk 핵심 기능 데모
슈퍼유저 권한 부여
lwy@DESKTOP-KGTB0I2: adb -s 172.16.10.211:1100 shell
13|rk3588_docker:/ $ su
rk3588_docker:/ #
터미널에 "su"를 입력하면 Magisk에서 프롬프트 상자가 나타나고, 권한 부여를 클릭하여 권한을 완료합니다.
Zygisk 활성화
Magisk 설정 인터페이스 -> Zygisk 활성화 -> 다시 시작. 다시 시작한 후 인터페이스의 Zygisk 표시줄에 "예"가 표시됩니다.
애플리케이션 숨기기
Magisk 설정 -> Magisk 숨기기 -> 위장된 앱을 선택하고, 완료될 때까지 기다리면 아이콘이 "설정"으로 변경됩니다.
Magisk 모듈 응용 프로그램 데모
lsposed
//PC directly import LSPosed-v1.9.1-6990-zygisk.zip
adb -s 172.16.10.211:1100 push LSPosed-v1.9.1-6990-zygisk.zip /sdcard/
Magisk 모듈 인터페이스에서 LSPosed-v1.9.1-6990-zygisk.zip을 로드하고 다시 시작하여 적용합니다.
마기스크SSH
마찬가지로 SSH_for_Magisk-v0.22_22.zip을 컨테이너로 가져온 다음 Magisk 모듈 인터페이스가 로드된 후 다시 시작합니다.
PC directly import SSH_for_Magisk-v0.22_22.zip
adb -s 172.16.10.211:1100 push SSH_for_Magisk-v0.22_22.zip /sdcard/
터미널이나 Termux를 사용하여 `ssh user@192.xxx.x.xxx` 명령어와 로그인 비밀번호를 입력하여 로그인하세요. 비밀번호 없는 로그인 등 더 많은 사용 방법은 SSH_for_Magisk-v0.22_22.zip의 Readme 문서를 참조하세요.
기술 정보 수집
Magisk는 Systemless 아키텍처를 통해 안드로이드 시스템을 위한 확장 가능한 기술 기반을 구축합니다. 개발자는 모듈형 인터페이스를 기반으로 맞춤형 기능 구성 요소를 유연하게 개발할 수 있습니다. 이 플랫폼은 표준화된 개발 프레임워크를 제공하고 권한 관리부터 하드웨어 튜닝까지 모든 차원의 맞춤 설정 기능을 지원합니다.
본 사례에서는 Firefly 하드웨어 플랫폼 기반의 Lsposed와 MagiskSSH 두 가지 모듈을 보여줍니다. 개발자는 이 플랫폼을 기반으로 더욱 다양한 게임플레이 및 시스템 맞춤 설정 개발을 경험할 수 있습니다. Docker 환경에서 Android용 Magisk의 전체 배포 정보는 Firefly 오픈 소스 팀( global@t-firefly.com )으로 문의해 주세요.