Magisk

86.48.13.35 (토론)님의 2024년 10월 23일 (수) 20:37 판 (2주전에 신규버젼 나왔는데 왜 업데이트 하라고 안뜨지???)

루팅 방법이 자주 바뀌고, 루팅을 탐지하는 방법도 자주 바뀌므로 지속적인 업데이트 필요.

1 개요

Magisk
매기스크, 마기스크
Magisk 시스템리스 루팅


  • Magic + Mask의 합성어[1]
  • /system을 건드리지 않은 상태에서 루팅할 수 있는 시스템리스 루팅 프레임워크
  • system 파티션을 건드리지 않고 권한을 얻는 시스템리스 방식이므로 루팅 탐지를 피할 수 있음

2 Magisk 설치법

v24.0 [General] Support devices that do not support 32-bit and only runs 64-bit code 패치내역이 있다. https://topjohnwu.github.io/Magisk/changes.html 에서 확인해보자 설치전 본인 단말기가 32bit인지 64bit인지 체크해보자. (플레이스토어에서 64bit checker등을 검색하면 어플이 많이뜬다.) 32bit인 경우는 23.0을 설치하자.

  • magisk 및 관리앱을 23.0을 설치한후 업데이트 하는것을 추천한다. 모듈을 사용할수없기 때문에 수동으로 설치해야하지만 개발자도 비추를 하고있기때문에 잘모르겠으면 구버젼을 먼저 설치하자 대표적으로 ViPER4Android 앱을 사용할수 없다.
  • Magisk Manager 하단의 설치(Download & Install) 버튼을 클릭한다.
  • ZIP이 받아지면, 리커버리 플래싱 프로그램 (삼성의 경우 오딘)을 연결하여 자신의 기기 버전에 맞는 TWRP 리커버리를 플래싱한다.
  • TWRP 진입 후, 먼저 백업을 실행한다. (실패 시 빠른 복원을 위해)
  • 백업 완료 후, 다운받은 Magisk ZIP을 플래싱한다.
  • 플래싱 완료 후 재부팅한다.
  • Magisk Manager에 들어가 성공 여부를 확인한다.
  • 성공하였다면, 성공한 채로 또 TWRP에서 백업을 하는 것을 권장한다.
  • 탐지당하는 것을 막기 위해 Magisk의 패키지 이름을 랜덤하게 바꾸는 옵션(Hide Magisk Manager)을 실행한다.
  • Magisk Hide에서 Show system apps에 체크 후, com.android.vending, com.google.android.gms.* 그리고, 루팅 우회를 원하는 프로그램을 모두 체크.
  • Magisk 매니저의 모듈 다운로드 메뉴에서, SafetyNet을 검색하여 항목이 뜨면 SafetyNet 우회 모듈임. 이것을 설치하면 SafetyNet 우회 성공 확률이 높아짐.
  • (Magisk 매니저에서 모듈 바로 설치가 되지 않는다면, 리커버리에서 설치.)
  • 성공하였다면, 빠른 복원을 위해 리커버리에서 또 백업한다. (용량이 부족할 경우 이전 백업본을 삭제 또는 PC로 이동 후 백업. 스마트폰 스토리지의 TWRP 디렉토리.)
  • 이 방법이 통하지 않는다면, Magisk Core Only Mode 사용 시, 모듈은 모두 비활성화되지만, SafetyNet 우회 성공률이 더 높아짐.
  • 이 방법으로도 SafetyNet 우회가 불가능하거나, SafetyNet을 완벽히 우회한 시스템리스까지 잡아낸다면, 지금은 답이 없다. xda-developers에서 완벽한 우회 수단이 나올 때까지 루팅폰이랑 금융/게임용 노루팅 세컨폰을 들고 다니는 수 밖에 없다.
  • 22.0부터는 매니저앱이 사라졌다. .zip가 .apk가 통합이 되었다. 루팅은 TWRP등 커스텀롬에서 apk를 install 하면 Magisk가 해당버젼으로 설치되며 시스템으로 정상 부팅후 apk를 설치하면 해당 버젼으로 관리앱이 설치된다.

3 Magisk 문제 해결

  • Magisk가 설치 인식을 하지 않음.
    • 현재 정식버젼은 28.0이며 아마 단말기가 32bit인 경우이다. magisk 및 관리앱은 23.0을 사용해보자 24.0~ 64bit만 가능
  • BusyBox가 인식을 하지않음
    • 일부앱에서는 BusyBox가 설치되어있지않다고 앱이 실행되지않으므로 (플레이스토어에서 받은경우도) https://github.com/yashdsaraf/bb-bot/releases 에서 설치하는것을 추천한다. Play Store에서도 다운받아도되나 BusyBox앱이 존재하면 (순정)도 루팅 취급하므로 23.0에서 필요한 묘듈을 다운받고 업그레이드를 하자 24.0부터는 묘듈을 미지원 한다. 대표적으로 Magisk hide가 미지원 되므로 IMEL 제조사 단말기명 등을 수정하고 싶다면 구버젼부터 설치하자
  • 설치 후 벽돌 현상
    • 잘 동작한 백업본을 선택하여 리커버리 백업 복원.
    • (삼성 기기일 경우) 리커버리 백업이 없을 시 오딘으로 순정 롬 덮어씌우기.
  • 리커버리에서는 모듈 설치가 잘 됨. 그러나 Magisk Manager에서 모듈 설치가 되지 않음. (/data/adb/magisk_merge.img mount failed.)
    • F2FS Loopback Bug Workaround 검색 및 다운로드
    • 리커버리에서 설치
    • 설치에 성공하였다면 Magisk Manager에서 원하는 모듈을 받아 설치가 되는 지 테스트.
    • F2FS를 지원하지 않는 기기는 설치 불가. 실험한 갤럭시 노트 4의 경우 F2FS를 지원하지 않음.
  • ViPER4Android 작동하지 않는 증상
    • 키를 잘못 입력했거나 버전이 기기와 호환되지 않는 경우
    • 리커버리에서 설치 시 키 테스트, 프로그램 버전, 드라이버 버전 질문이 나온다.
    • 프로그램 버전과 드라이버 버전을 변경해 가며 재설치 시도
    • 실험한 갤럭시 노트 4 SM-N916S의 경우, 모두 신버전으로 설치하여 성공.
    • 이어폰을 장착하고 음악을 들어가며 바이퍼 설정을 변경하여 테스트한다. 음향이 조금씩 바뀌는 것이 감지되면 성공.
  • Magisk Hide 메뉴에서 강제 종료됨.
    • 다음은 로그캣에서의 에러 로그 중 일부.
// com.uCs1.WGAR.gcUZPm 는 Hide Magisk Manager를 실행했을 때 랜덤하게 생성되는 패키지 이름.
10-06 18:21:18.224 30528-30831/? E/AndroidRuntime: FATAL EXCEPTION: RxCachedThreadScheduler-8
    Process: com.uCs1.WGAR.gcUZPm, PID: 30528
    a.y71: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.OutOfMemoryError: Failed to allocate a 67108876 byte allocation with 16777216 free bytes and 26MB until OOM
    • java.lang.OutOfMemoryError(메모리 부족 문제)로 보아, 설치되어 있는 앱이 너무 많다는 것을 알 수 있음. 필요없는 앱을 삭제후 재시도. 앱 삭제 후에도 실패한다면... 답이 없다. 앱이 갈수록 고사양화가 되니, 폰을 최신형으로 바꾸자.
  • Magisk Hide가 풀려 버림, Magisk Hide 목록에서 앱 체크 후 새로고침 시 풀려 버림(아예 되지 않음), 또는 Magisk Core Only Mode가 항상 체크됨. 모듈삭제 후 재부팅해도 모듈삭제 안됨.

Magisk 로그 전부.

--------- beginning of system
--------- beginning of main
01-01 01:00:16.700   237   237 I Magisk  : Magisk v20.0(20000) daemon started
01-01 01:00:16.700   237   237 I Magisk  : * Device API level: 23
01-01 01:00:16.780   237   238 I Magisk  : ** post-fs-data mode running
01-01 01:00:16.780   237   238 I Magisk  : * Initializing Magisk environment
01-01 01:00:16.780   237   238 I Magisk  : * Mounting mirrors
01-01 01:00:16.780   237   238 I Magisk  : mount: /sbin/.magisk/mirror/system
01-01 01:00:16.780   237   238 I Magisk  : mount: /sbin/.magisk/mirror/data
01-01 01:00:16.780   237   238 I Magisk  : link: /sbin/.magisk/mirror/vendor
01-01 01:00:16.780   237   238 I Magisk  : * Setting up internal busybox
01-01 01:00:16.820   237   238 I Magisk  : * Running post-fs-data.d scripts
03-09 21:43:55.988   237   503 I Magisk  : ** late_start service mode running
03-09 21:43:55.988   237   503 I Magisk  : * Running service.d scripts
03-09 21:56:26.107   237  4453 I Magisk  : ** boot_complete triggered
03-09 21:56:26.177  4467  4467 I Magisk  : apk_install: /data/magisk.apk 
03-09 21:57:20.412  7730  7730 I Magisk  : apk_install: 	pkg: /data/magisk.apk
03-09 21:57:20.412  7730  7730 I Magisk  : Success
    • 18.x 이하 구버전 설치로 해결되지만, 올바른 해결책은 되지 못한다. 구버전은 탐지가 다 되어 버리고 최신 모듈 지원이 되지 않기 때문. 다른 방법 추가바람.

4 루팅 탐지 우회가 성공하였는가?

  • Magisk Manager에서 확인 가능
  • SafetyNet Test에서 확인가능. Magisk Hide에 추가할 것. 모두 success가 나와야 우회 성공.
  • RootBeer Fresh 앱을 설치하여 Magisk Hide로 해당 앱 선택 후, 루팅 탐지 확인을 할 것.

5 루팅 탐지 우회 성공

  • 우리은행 원터치알림
  • 신한은행 S알리미 (javax.*** 오류 발생은 일시적인 것임. 다시 실행하여 해결.)

5.1 SafetyNet 우회에 성공하나 불안정

  • Pokémon GO
    • 로그인이 되지 않는 오류
      • 오류 메시지 : This device, OS, or software is not compatible with Pokémon GO.
      • 또는 Failed to Log in.
      • 로그인이 되지 않는 문제. 루팅 탐지 시 발생하는 오류.
      • 애플리케이션 설정에서 포켓몬 고의 데이터를 지운다. (데이터는 전부 서버에 저장되니 걱정하지 않아도 된다.)
      • 로그인 - 실패 시 데이터 삭제 - 로그인을 반복.
      • Do not enter dangerous areas~ 또는 Do not trespass~ 등의 메시지가 나오면 성공.
      • 성공하여도 그 다음날 다시 켜보면 실패하는 경우가 있음. 위의 과정을 반복.
  • ISP 페이북
    • Magisk Hide만 해도 정상작동
  • 신한 쏠(sol)
    • Magisk Hide만 해도 정상작동
  • PASS
    • Magisk Hide만 해도 정상작동 단 EdXposed 활성화 또는 Magisk Hide Props Config 에서 해외 제조사 (Huawei,Sony) 값으로 변경한 경우 작동안됨 단말기값은 상관없다. (SM-N975F 갤럭시 노트10+ 유럽 단말기)
  • Galaxy Store
    • Magisk Hide Props Config 에서 해외 제조사로 변경한 경우 강제종료 (Huawei,Sony) (SM-N975F 갤럭시 노트10+ 유럽 단말기) 단말기값은 상관없다.
    • 24.0 zygisk를 사용하는 경우는 루팅이 감지되어 이벤트 참여등에 제한이 될수있긴하나 접속은 가능하다. 비정상적인 단말기 (녹스사용시 뜨는 팝업창과 동일) 해당 단말기는 이벤트 대상이 아닙니다. 가 대표적이다.
    • 이벤트 참여를 시도 하면 단말의 비정상적인 환경이 감지되어, 프로모션 참여가 불가능 합니다. (GCF4015) 로 요즘은 통일 되었으며 일부 이벤트(리니지,페이백,N이상 구매시 쿠폰지급등) 및 출석이벤트에 한하여 최근에는 참여가 가능하게 바뀌었다.

6 루팅 탐지 우회 실패

Magisk 최신 버전 기준으로 등록한다.

  • RootBeer Fresh 앱을 설치하여 Magisk Hide로 해당 앱 선택 후, 루팅 탐지 확인을 할 것.
  • RootBeer Fresh
    • BUSYBOX BINARY 실패

BUSY BOX 설치위치를 /SBIN로 설치시 해결 매번 재부팅마다 인스톨 다시해줘야함 프로버젼은 자동으로가능 또는 magisk에 있는 busy box를 설치해도 된다. (magisk에서 설치하는것을 추천한다. 플레이스토어에서 다운시 BUSY BOX앱 설치 여부를 감지해 앱만 설치되어있어도 루팅으로 간주하는경우가 있기 때문이다.)

    • MAGISK UDS AND STAT 실패

RMM_Bypass_v3_corsicanu 및 no-verity-opt-encrypt-6.1를 사용하면 감지안됨

    • Build.props 실패

RootBeer Fresh는 DANGEROUS PROPS 라고 명칭한다. https://github.com/Magisk-Modules-Repo/MagiskHidePropsConf/releases 공식 홈페이지 Magisk 에서만 사용가능하고 앞에는 MagiskHidePropsConfig 버젼이고 뒤는 Magisk 버젼을 이야기한다. ~2.4.0 v15~v16.7 2.4.1~3.5.2 v17~v18.1 4.0.0~4.0.3 v19+ 5.0.0~ v19.4+ Magisk 다운로드 기능에서 다운을 받고 재부팅하면 Magisk 모듈에 들어가면 추가되어있다. SafetyNet 우회에 도움을 줄수있을뿐 우회를 해주는 툴이아니라고 경고되어있다. 만약 SafetyNet 우회가 안되었다면 한번시도해보는것도 좋다. 설정에서 Magisk 패키지명을 바꾸면 해결되는 경우도있다. BusyBox가 인식이안되는경우나 직접 경로 설정을 하기 어렵다면 Busybox @osm0sis https://github.com/yashdsaraf/bb-bot/releases 에서 받으면된다.

  • AIA Vitality
  • Fate/Grand Order
    • 루팅 탐지로 안드로이드의 보안 취약점을 무단 사용
  • Xposed Systemless
    • 삼성 전용 Xposed 받기
    • Magisk 모듈 목록에 있는 Xposed는 Systemless지만, 삼성 터치위즈 지원을 하지 않음. 삼성 터치위즈 롬에서는 설치 시 무한부팅 벽돌 현상이 발생함.
    • Systemless Xposed를 설치하여도 SafetyNet을 우회할 수 없다고 말함.(Systemless Xposed does not pass SafetyNet!!!)
    • Magisk용 Xposed 모듈을 설치한 경우, Magisk 모듈 메뉴에서 Xposed를 해제한 후 재부팅하면 SafetyNet이 우회된다.

Xposed fails safetynet.png

불가능하다.

글을 읽고 포럼을 검색해 봐도, 이렇게 말하고 있다.

Xposed=SafetyNet 우회 실패.

그러하다.

It only passes ctsprofile.png

이 모듈(Xposed)은 "기기 체크"이다. CTSProfile는 우회되지만, BasicIntegrity는 우회에 실패한다.

Virtual Xposed가 새로 나왔다. 안에서 가상 머신을 실행하여, 루팅 우회 성공률이 100%다. 다만, 머신 안에 머신을 실행하는 특성상 과도한 전력소모가 발생한다.

7 Magisk 시스템리스 루팅 추천앱 또는 모듈

Greenify + ForceDoze
  • 강제로 Doze 모드를 활성화하여 배터리 절약 효율이 극대화된다.
  • Greenify에서는 앱 종료 시 루팅 상태에서는 바로 전부 종료가 가능하다. (비루팅 상태에서는 전부 꺼짐 버튼이 눌릴 때까지 기다려야 한다. 비루팅에서 이 옵션을 켤 시 배터리 역효과가 날 수 있다.)
  • Greenify 유료 버전 + Xposed를 적용할 경우, GCM(FCM) 푸시 허용, 시스템 앱 추가, WakeUp 타이머 병합 등의 강력한 기능을 사용할 수 있다.
  • 네이티브로 Doze를 지원하는 안드로이드 6.0 MarshMallow 이상에서 가장 효과가 있다.
  • DCMProvider는 갤러리에서 사진 분류 역할을 한다. 서드 파티 갤러리를 쓴다면 필요없다. Doze 방해 주범이다.
티타늄 백업
  • 시스템 앱 중 하는 일도 없으면서 메모리를 점유하거나 Doze를 방해하는 앱을 찾아 삭제 또는 비활성화할 수 있다.
  • 없을 시 나중에 오류를 일으킬 수 있는 시스템 앱은 나중에 다시 활성화할 수 있도록 삭제하지 말고 비활성화하자.
  • 티타늄 백업으로 필요없는 시스템 앱을 삭제(비활성화)하고 위 Greenify + ForceDoze와 같이 사용하면 Doze가 지원되는 기기에서는, 사용하지 않는 경우 거의 피처폰 수준의 배터리 절약 효과를 기대할 수 있다.
  • NFC는 기기에 Wakelock을 일으켜 배터리를 소모하게 하는 주범중 하나다. 일부 마시멜로 사용 기종에서는 정상적인 방법으로 NFC가 종료되지 않을 때가 있다. 이 때 티타늄 백업에서 NFC를 비활성화하면 된다.
Wakelock Detector
  • Doze를 방해하는 앱을 찾아, Greenify와 연동시켜 Doze를 방해하지 않도록 종료시킬 수 있다.
ViPER4Android
  • 모든 앱의 음향 효과를 극대화할 수 있다.
  • 다른 노루팅 이퀄라이저와 비교하여 배터리 효율이 증가하고 품질 역시 증가한다.
  • 이퀄라이저를 지원하지 않는 앱(SoundCloud, YouTube)에서 음향 효과를 줄 수 있다.
  • 블루투스, USB, 아날로그잭, 폰 스피커 등 따로 설정이 가능하다.
  • 제조사에서 제한한 음량 이상으로 출력이 가능하다.
  • 이전 버전은 SELinux 허용적(Permissive) 상태에서만 작동하였지만, 최신 버전은 강화(Enforced) 상태와도 호환된다.
  • 모듈에서 제공된 정보없음 다운로드에서 업데이트있음 으로 무한재설치 루프하는경우 ViPER4Android 폴데에 들어가서 apk를 수동설치해주면된다. (재부팅필요) v2.7.1.6기준
  • 모듈이 24.0부터 사라져서 23.0에서 설치후 업그레이드 해야한다. 24.0 상위버젼에서 설치시 드라이버 다운이 불가능해 진다. 참고로 github에서 Flash in Magisk Manager ONLY 라고 명시되어있다. (인터넷에 있는것들은 공식이 아니므로 조심해서 다운받자.) https://github.com/Magisk-Modules-Repo/ViPER4Android-FX 에서 ZIP다운받아서 리커버리에서 설치해도된다.
YouTube ReVanced
  • 루팅 순정버젼 둘다 지원하며 기능면에서 하나밖에 차이가없다.
  • 순정에서는 맴버쉽 구독,도네이션등 하면 튕기는 오류가있다. 구글 프레임 워크를 우회하지 못해서 생기는 문제이지만 루팅시에는 정상적으로 작동이된다.
RAM Management fixes
  • 램 관련 트윅
  • 빨라지는 기종도 있지만 오히려 심하게 느려지는 기종도 있음. 느려질 시 모듈 체크 해제 후 재부팅
Emoji One
  • 업데이트 지원을 하고 있는 현역 폰이 아닌, 기술 지원이 끝난 구형 폰에 추천
  • 유니코드 DB 업데이트에 따라, 유니코드 신버전에서 새로 추가된 이모지를 업데이트해 줌
Magic Charging Switch
  • 최대 충전 용량에 제한을 두어 배터리 수명을 늘리는 모듈
  • 일체형 배터리거나, 착탈식이라도 한 개만 쓰는 경우 추천.
  • 일체형 배터리에 부품이 단종된 모델(예: 갤럭시 노트 프로 12.2) 이라면 필수 모듈이다.
  • 모듈 설치 후 터미널에서 조작
  • su로 # 권한을 얻고 mcs 85 80 : 배터리를 85%[2]까지 충전하고 충전 중단, 80%까지 내려가면 충전 재개.
Riru-Core
  • 예전에 사용하던 Xprivacy를 사용할수있는 프로그램이다.
  • 시스템 파일을 하나를 재배치 하면 사용할수 있는데 시스템을 재배치 하면 시스템 변조가 걸리기 떄문에 후킹을 이용해서 시스템 파일을 중간에 바꿔서 감지를 못하게 하는 방법이다.
  • LSPosed,EdXposed,XposedBridge,Dobby,Lsplant가 있다.
  • 현재 대중적이고 업그레이드가 활발히 진행중인건 LSPosed이며 2가지 버젼이 있다.
  • Riru,Zygisk버젼이 있으며 동시에 설치해도 상관없으나 동시 실행은 불가능하며 Riru버젼시 Zygisk를 비활성화 해야한다. https://play.google.com/store/apps/details?id=org.lsposed.manager 를 설치해보자
  • github페이지는 영문이지만 차근차근 하면 된다. 설치되지않음 LSPosed가 설치되지 않았습니다. 인경우는 Zygisk 버젼을 사용하도록하자 DenyList에 앱이 추가된경우 모듈활성화 할 앱리스트에서 투명한 상태로 차단목록에서 라고 뜨며 선택시 거부목록에 있습니다. 적용 되지 않을수 있습니다. 팝업이 뜬다.
  • Luckypatcher 모듈 활성화시 시스템 프레임워크 앱 밑에 권장이라고 뜬다. 선택시 벽돌이 되며 해결법은 Riru를 비활성화 하면 된다. Riru 재설치 시도시는 오류가 뜬다. 아마 반대로 Zygisk-LSPosed를 비활성화 해도 벽돌이 해결될거 같긴하나 여러앱 활성화등 오류를 명확히 알수없는경우는 Riru 비활성을 추천한다.
  • Playstore,netflix등이 VPN 여부 상관없이 국가 중국으로 된다.
Zygisk
  • 개발자는 현재 구글 보안팀에서 일하고 있서 업데이트가 뜸해졌다고 설명하였으며 이전같이 창과방패(의역) 싸움은 관심이없다며 지금 공개한 툴로 인해 많은사람들이 다른 추가적인 프로그램을 만들어주기 바란다며 추가업데이트를 공개하였다. (직역은 창과방패가 아닌 고양이와 쥐이다.)
  • 제일중요한점은 64BIT 만 지원한다. 32BIT 단말기로 업데이트하면 벽돌등이 될수있으니 주의할것
  • Magisk Hide가 사라졌으며 Zygisk에는 대신 deny list=(Magisk Hide)가 있지만 유튜브 비교영상을 보면 Magisk Hide가 훨씬 좋다
  • Safety Net이 꺠지는 경우가 있는데 https://github.com/kdrag0n/safetynet-fix/releases 로 고치면 된다. (cts Profile)만 고쳐준다. BasicIntegrity은 denylist에서 플레이스토어를 추가해야한다.

8 Magisk Hide VS Zygisk Deny List

  • Magisk Hide Zygisk Deny List
  • 1.Hide Magisk SU Y Y
  • 2.Hide Root Y Y
  • 3.Hide Modules Y Y
  • 4.Hide Bootloader Unlock Status Software Attestation Only N
  • 5.Hide SeLinux Permissive Y N
  • 6.ro.debuggable Set to 1 No change
  • 7.ro.secure Set to 1 No change
  • 8.ro.build.type Set to user No change
  • 9.ro.build.tags set to release-keys No change

9 같이 보기

10 참고

  1. [1] A Magic Mask to Alter Android System Systemless-ly
  2. 신형 삼성 노트북의 배터리 수명 연장 기능 사용 시의 충전 제한값은 85%.
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}