양적완화 이후 전 세계가 금리인상으로 허덕이며 정신없는 와중에 ChatGPT
가 일으킨 파장으로, 인간만이 할 수 있는 철학적 고찰이 필요하다는 생각에 '문학'책을 읽어야한다는 압박아닌 압박이 들었다.
는 핑계고, 사실 그냥 토익 시험 결과 기다리면서 호그와트 레거시를 좀 찐하게 했던게 화근이다.
토익시험 당일을 포함해서 60시간(2.5일) 중 45시간을 갈아넣어서 엔딩을 봐버렸다. 다시 말하면 30대 아재가 옛날 향수에 젖어서 시간가는 줄 모르고 게임했다는 말이다. 아무튼, 해리포터 원작 소설에서도 자세한 언급이 없었던 래번클로 기숙사를 보고 있자니 원문 소설을 제대로 보고 싶다는 생각이 들었다.
그러다가 평소에도 책을 사서 스캔 떠놓고도 잘 안보게 됐던 이유를 생각해봤는데, 컴퓨터로 보기에도 애매하고 태블릿(아이패드)으로 보는 것도 뭔가 불편하다는 생각이 들면서 '전자책 시장이 점점 커지는 데에는 이유가 있지 않을까?' 라는 궁금증과 함께 이것 저것 찾아보다, 6인치+
, MicroSD 확장
, 물리버튼
키워드에 부합하는 표제 eBook 단말을 지르게 되었다.
이미 PDF
, ePub
, txt
파일들을 많이 들고 있었던 것도 있고, 저작권을 인질로 삼은 DRM
을 명목으로 거지같은 사용성의 특화 단말을 쓴다는 것은 상상조차 할 수 없어서 범용 전자책 단말로 결정하게 된 것이다.
(중요) 사실 전자책 뷰어는 굳이 루팅할 필요가 없다.
하지만 중국제 단말(...)이라 개인정보 이슈도 있을 뿐더러, 내가 내 돈주고 산 단말을 관리자(Root User) 권한 없이 쓰는 것도 싫고, 무엇보다 기본 어플리케이션은 쓰지도 않는데 메모리만 차지하면서 삭제도 안되는 게 맘에 안들어서 어지간하면 루팅해서 사용한다.
정말 기본적인 얘기지만, 루팅하면서 발생할 수 있는 모든 책임은 사용자 본인에게 있다. 공식 수리 서비스 못 받게되는 것 쯤은 아무것도 아니니, 항상 복구대책 등을 생각하고 본인이 감당할 수 있을 때에만 진행하자.
가뜩이나 국내 전자책 뷰어 시장도 작은데, 루팅까지 들어가니 정말 자료 찾기가 힘들었다.
20대 초반에 안드로이드 폰 3개 썼던 것과, 최근에 안드로이드 기반 태블릿 잠깐 쓰면서 루팅해본 기억이 전부라 고생(삽질)을 좀 (많이) 했다.
그래도 기존에 나왔던 모델들의 영문 레퍼런스들이 있어서 원산폭격급 맨땅 헤딩은 아니었다는게 다행이다.
firmware
파일을 찾아서 다운로드하기firmware
복호화payload.bin
추출boot.img
추출 후 Root Privilege
패치boot.img
파일을 부트영역에 덮어쓰기Python
코딩 기초 지식git clone
같은 터미널 명령어
타이핑 정도on Android Device
Hidden Settings
// APK LinkMagisk
// Github Releases Link - 최신버전의 Assets
에서 Magisk-v00.apk
파일 다운로드GetBooxUpxKeys
// 모델의 Key Strings를 추출하는 앱. APK Linkon Windows
git clone
필요이 단계는 Android 10 <=
에서 Boox OS
펌웨어를 Hasing & Decryption 하기 위한 키값을 추출하는 것으로, 작동 원리는 단말 내부의 OnyxOtaService.apk
(구버전) 또는 libota_jni.so
(신버전) 파일을 찾아 해당 파일에서 Key Strings
와 Fingerprint
를 추출하는 것.
준비사항
2-3
을 단말에서 다운받고 실행만 하면 됨
실행하면 위 화면처럼 MODEL
, STRING_SETTINGS
, STRING_UPGRADE
, fingerprint
키에 해당하는 값들을 확인할 수 있음.
Leaf2
Key Strings > JSON
Format"Leaf2": {
"MODEL": "Leaf2",
"STRING_SETTINGS": "okRZqgfOHft/Y5jHx1N0ECjqrc/Op/nADFj2uL7Jbuxq",
"STRING_UPGRADE": "10Na33u5HfsCVHqjtwLrwACOW+2cz5MSnXUogONCTd9c"
}
Leaf2_P
Key Strings > JSON
Format"Leaf2_P": {
"MODEL": "Leaf2_P",
"STRING_SETTINGS": "lH1x4y+lRiS8YNYfiDJba3wOcacEOglrIMutctNhpAbL",
"STRING_UPGRADE": "6XR9lSuqRSd6Je0RDReTkVSVPHz3KytxeMRgVQvGyxn9"
}
boot.img
추출firmware
다운로드2022년 말을 기점으로 더 이상 공식 홈페이지에서 펌웨어를 다운로드 받을 수 없게 되었다. 하지만 언제나 방법은 있다. 아래 URL에서 MODEL_NAME
값을 본인 단말의 모델명으로 바꾸고 웹브라우저 주소창에 넣어 이동하자.
http://data.onyx-international.cn/api/firmware/update?where={"buildNumber":0,"buildType":"user","deviceMAC":"","lang":"en_US","model":"MODEL_NAME","submodel":"","fingerprint":""}
그러면 아래 JSON
이 Response로 돌아온다.
{
"_id": "635d30890da9ca3323343cdf",
"updatedAt": "2022-10-31T10:18:51.093Z",
"createdAt": "2022-10-29T13:54:17.167Z",
"md5": "a29114b257c8a08ecc6e486726ac3fdf",
"model": "Leaf2",
"submodel": "",
"brand": "Onyx",
"fingerprint": "Onyx/Leaf2/Leaf2:11/2022-10-29_19-11_3.3.1_8c9d49397/1583:user/dev-keys",
"buildType": "user",
"buildNumber": 1583,
"buildDisplayId": "2022-10-29_19-11_3.3.1_8c9d49397",
"excludeGroups": false,
"parentFingerprint": "",
"force": false,
"__v": 0,
"whitelistMAC": [
],
"size": 1500092388,
"betaGroups": [
],
"downloadUrlList": [
"http://firmware-us-volc.boox.com/a29114b257c8a08ecc6e486726ac3fdf/update.upx"
],
"changeList": [
"Fix some UI problems"
],
"fwType": "release"
}
여기에서 우리가 주목해야할 Key는 downloadUrlList
로, 해당 URL로 이동하면 단말에 맞는 update.upx
펌웨어 파일을 다운로드 할 수 있다.
(필자의 변)
사실 펌웨어 구하는 데 시간을 제일 많이 썼다.
내 단말 빌드는 2022-11-22_10-20_3.3.1_e4f27d41a
버전인데 API가 보내준 빌드는 2022-10-29_19-11_3.3.1_8c9d49397
이라 자칫 잘못하면 다 날아갈 수 있다는 생각에 현재 버전의 펌웨어를 구하려고 시도한 짓은 다음과 같다.
$ adb shell
로 boot.img
추출하기TWRP
를 써야한다고 했다. 찾아보니 펌웨어를 추출하고 공유하는 오픈소스 커뮤니티 프로젝트였다. (링크)EDL
(Emergency Download) 9008 모드로 부팅해서 펌웨어 받기adb reboot edl
로 기기를 재부팅시키고 펌웨어를 받는데, Qualcomm Sahara / Firehose Attack Client / Diag Tools 이 코드로 EDL
모드에서 명령어로 단말을 핸들링 할 수 있다고 했다. (EDL
에서는 ADB
도 Fastboot
도 안된다.)pyusb
, libusb
, UsbDk
, QDLoaderHS_USB_Driver
, Zadig
로 겨우겨우 EDL
에서 명령어를 입력할 수 있게 되었다.Loader
가 다를 수 있다는 걸 몰랐다. SDM662
라는 걸 보고 프로세서에 따라 로더가 달라진다는 걸 알았어야했다. (Note Air 2
는 퀄컴 스냅드래곤 662를 사용한다.)YouTube
에 CPU-z
를 쓰니 프로세서 정보가 나오는 장면을 확인하고 바로 다운받았다. 덕분에 Leaf2
는 스냅드래곤 630을 쓴다는 정보를 얻게 되었다.Loader
를 찾아내어 돌렸는데.. 터미널에 변화가 없었다.$ python edl r boot_a boot.img --memory=ufs --loader ./Loaders/qualcomm/factory/sdm630/000ac0e100000000_7be49b72f9e43372_fhprg_asus_peek.bin
Qualcomm Sahara / Firehose Client V3.60 (c) B.Kerler 2018-2022.
main - Using loader ./Loaders/qualcomm/factory/sdm630/000ac0e100000000_7be49b72f9e43372_fhprg_asus_peek.bin ...
main - Waiting for the device
main - Device detected :)
main - Mode detected: sahara
firmware
복호화준비사항 3-2. decryptBooxUpdateUpx
를 사용한다.
2023년 3월 5일 기준 Leaf2
모델의 정보가 없으므로, 해당 프로젝트 내 DeBooxUpx.py
코드 200번줄 즈음 작성된 dict
타입 데이터에 Leaf2
의 Key Strings를 추가한다.
"Leaf2": {
"MODEL": "Leaf2",
"STRING_SETTINGS": "okRZqgfOHft/Y5jHx1N0ECjqrc/Op/nADFj2uL7Jbuxq",
"STRING_UPGRADE": "10Na33u5HfsCVHqjtwLrwACOW+2cz5MSnXUogONCTd9c"
}
Step 1
에서 다운받은 update.upx
파일을 프로젝트 폴더로 이동시킨 뒤 아래 명령어를 터미널에서 실행한다.
python DeBooxUpx.py Leaf2
생각보다 금방 처리되며, update.zip
파일이 생성된다.
update.zip
를 압축해제하고 payload.bin
파일을 확보한다.
payload.bin
추출준비사항 3-3. payload-dumper-go
를 사용한다.
1. 다운로드 받은 압축파일을 압축 해제하면 payload-dumper-go.exe
가 포함된 폴더가 생성된다.
2. Step 2
에서 확보한 payload.bin
을 위 1항의 payload-dumper-go.exe
파일 위에 드래그 & 드랍해서 exe
파일을 실행시킨다.
3. extracted_{DATETIME_YYYYMMDD_HHMMSS}
폴더가 생성되며, 내부에 boot.img
를 비롯한 시스템 파일들이 생성된다. 우리는 boot.img
만 잘 챙겨서 단말 내 로컬 스토리지에 옮기면 된다.
Root Privilege
패치이 때 사전작업이 살짝 필요한데, 단말에서 개발자모드
로 전환하고 USB Debugging
을 활성화 해야한다.
준비사항 2-1. Hidden Settings
를 사용한다.
태블릿 정보
클릭빌드 번호
를 빠르게 5번+@ 클릭하여 개발자모드
활성화(위 Step 4
에서 계속)
1. 다시 (숨겨진) 안드로이드 기본 설정 최상위로 이동
2. 화면 최하단에 위치한 시스템
클릭
3. [고급]
을 선택하여 메뉴를 확장하고 개발자 옵션
클릭
4. (활성화 안돼있을 경우) 개발자 옵션
ON
5. 화면을 아래로 스크롤하여 디버깅
탭의 USB 디버깅
을 ON으로 전환 (이미 켜져 있더라도 껐다가 다시 ON)
6. USB 케이블을 사용하여 데스크탑과 연결 (함께 제공된 케이블이 아니면 잘 안되는 경우가 있으므로 가급적 정품 케이블 사용 권장)
boot.img
에 권한 부여 패치준비사항 2-2. Magisk
를 사용한다.
Magisk
앱을 실행한다Magisk
우측의 설치
버튼 클릭설치 방법
탭에서 파일 선택 및 패치
버튼을 클릭boot.img
파일을 선택한 뒤 설치
버튼 클릭magisk_patched-xxxxx_XXXX.img
를 컴퓨터로 복사ROOT
권한으로 부팅준비사항 3-1. ADB, Fastboot
를 사용한다.
Win + R
을 눌러 [실행]
창을 열고 cmd
입력 후 Ctrl + Shift + Enter
를 눌러 관리자 권한으로 명령프롬프트 실행cd C:\adb
adb devices
cf) List of devices attached
하단에 기기가 전시된다면 다음을 진행하고, 안된다면 장치관리자를 확인하여 드라이버 재설치adb reboot bootloader
fastboot devices
cf2) List of devices attached
하단에 기기가 전시된다면 다음을 진행하고, 안된다면 장치관리자를 확인하여 드라이버 재설치Step 6
에서 복사해놓은 파일을 C:\adb
로 이동하고 파일명+확장자
를 복사fastboot boot 파일명+확장자
Sending 'boot.img'
와 Booting
, Finished
가 처리 및 출력되며 단말이 재부팅ROOT
권한 적용Magisk
앱 실행Magisk
항목의 설치됨
영역에 Magisk
버전이 전시되는지 확인설치
버튼 클릭설치 방법
탭에 바로 설치(권장됨)
체크 후 우측 설치
버튼 클릭다시 시작
버튼 클릭ROOT
권한 확인단말이 재부팅 되면 아래 명령어를 명령프롬프트에서 실행하여 루팅 상태 확인
> adb shell
$ su
# _
shell
의 상태가 $
에서 #
로 바뀌면 su
(Super User) 권한으로 변경된 상태임이 확인
그렇게 필요한가? 싶긴 하지만 아래 스크립트를 실행해서 눈에 가시같던 불필요 앱들을 정리할 수 있었다.
> adb shell
$ pm list packages
$ su
# pm disable <package>;pm hide <package>
여담이지만, uninstall
명령어로 완전히 지워버릴 수 있는데, 혹시 몰라서 disable
하고 hide
로 숨김처리했다. 해당 처리를 진행한 패키지 목록은 다음과 같다.
com.onyx.calculator
com.onyx.appmarket
com.onyx.floatingbutton
com.onyx.mail
com.onyx.kime
com.onyx.latinime
org.chromium.chrome
좀 의아할만한 패키지는 아래 설명으로 갈음한다.
floatingbutton
: 제스처로 다 커버가 돼서 필요가 없음appmarket
: 플레이스토어 두고 왜 쓰는지 모르겠음kime
: 오닉스 기본 한글 입력기는 💩latinime
: 마찬가지로 오닉스 영어 기본 입력기..chrome
: NeoBrowser
(자세한 설명은 생략한다.)Hacking the Onyx Boox Note Air E-Ink Tablet
[GUIDE] How to dump and write back the storage on most of Qualcomm devices
DOWNLOAD AND INSTALL QUALCOMM HS-USB QDLOADER 9008
아오 성공했네요 ㅋㅋ Leaf3 직구로 ..
근데 루팅은 했는데 뭐 이후에 어떻게 해야할지 모르겠어요.
저는 중국어 -> 영어로 다 바뀌는 줄 알았거든요 ㅠ