GhostLock-App
中文: README_ZH.md
지원 기기
| 커널 | 기기 |
|---|
6.1.118-android14-11-ga3b9c44908dd-ab13320413 | Redmi Note 15 Pro+ |
6.1.118-android14-11-gca0ef6d17716-ab13624819 | Xiaomi 14 |
6.1.138-android14-11-g0c3d559bcd85-ab14529422 | Xiaomi 14 |
6.1.145-android14-11-g09f1c0074ad7-ab14226177 | Infinix Note 50s 5G |
6.1.145-android14-11-g74d1702dab4d-ab14669069 | Vivo T4 |
6.1.162-android14-11-gce140c0e5bf5-ab15450923 | Zenfone 11 Ultra |
6.6.30-android15-8-g54dcbfbef792-ab12368803-4k | Red Magic Tablet 3 Pro |
6.6.77-android15-8-g4a507830d890-ab13636293-4k | Xiaomi Civi 5 Pro, REDMI K90 / 4 Turbo, POCO F7 |
6.6.77-android15-8-g63ce7556864c-ab13994517-4k | Xiaomi 15 |
6.6.77-android15-8-gca30f3b4bef6-abogki440974771-4k | Xiaomi 15 Pro, REDMI K80 Pro / K80 Ultra |
6.6.89-android15-8-g096cdb6ecefc-ab14358676-4k | OPPO Pad 4 Pro |
6.6.89-android15-8-g0889fe95bb10-ab14402178-4k | POCO X8 Pro Max |
6.6.89-android15-8-g8e4be6b47e40-ab14134548-4k | POCO X8 Pro |
6.6.89-android15-8-gf4dc45704e54-abogki446052083-4k | OnePlus 13 |
6.6.92-android15-8-g3637f4904cf5-ab13944661-4k | Red Magic Tablet 3 Pro, Red Magic 10 Pro, Red Magic 11 Air |
6.6.102-android15-8-gab8eb70a71b8-ab14350911-4k | Nothing Phone 3 |
6.6.102-android15-8-gb01b41c2647c-ab15574720-4k | Xiaomi 17T |
6.6.102-android15-8-gfe76d1bc97fd-ab14689815-4k | Xiaomi 17T |
6.6.118-android15-8-g2e6b9c3812c5-ab15114928-4k | OPPO Find N5 |
6.6.118-android15-8-g93e223c276e7-abogki500782043-4k | OPPO Find X8 Ultra, OnePlus 13 / ACE 5 Pro |
커널은 정확한 uname -r로 매칭됩니다. 지원되지 않는 빌드는 거부되며 앱은 상단에 상태를 표시합니다. 오프셋은 src/kernels/<uname-release>/offsets.h에 있으며, 추출기의 --register로 새 빌드를 추가할 수 있습니다.
빠른 시작
GhostLock을 열고 실행을 탭하세요. KernelSU (me.weishu.kernelsu) 또는 ReSukiSU (com.resukisu.resukisu)가 모듈 로딩을 위한 ksud를 제공합니다. 없으면 W1/W2가 여전히 uid 0을 부여하지만 모듈은 로드되지 않습니다.
이 경로는 두 개의 코어를 경쟁시킵니다. 메인 스레드는 pselect를 반복 호출하고 소비자 스레드는 대기 중인 프로세스의 우선순위를 교란합니다. 이 쌍은 기본적으로 빅 코어(폴백 0/1)를 사용하며, GHOSTLOCK_CORE / GHOSTLOCK_CONSUMER_CORE로 재정의할 수 있습니다.
명령줄 디버깅
adb/shell에는 seccomp 필터가 없으므로 W3는 건너뜁니다. 빠른 검증에 유용합니다:
make ghostlock
adb push ghostlock /data/local/tmp/ghostlock
adb shell chmod 755 /data/local/tmp/ghostlock
adb shell /data/local/tmp/ghostlock
오프셋 추출
tools/extract_rs는 boot.img(선택적으로 xbl_config.img 포함), 전체 OTA ZIP 또는 이를 가리키는 http(s) URL에서 오프셋을 도출합니다. kallsyms는 --kallsyms에서 가져오거나 이미지의 내장 테이블에서 복구합니다. pselect_waiter_shift와 off_slide_loggers_0_1은 내장 arm64 디스어셈블러로 도출됩니다. MediaTek 이미지에는 xbl_config.img가 없고 일반적으로 BTF도 없습니다. 물리 로드 주소는 kallsyms _text에서 도출됩니다(--phys로 재정의 가능).
cargo build --release --manifest-path tools/extract_rs/Cargo.toml
tools/extract_rs/target/release/ghostlock-extract.exe boot.img --xbl-config xbl_config.img --register
tools/extract_rs/target/release/ghostlock-extract.exe OTA.zip --format json --out offsets.json
--register는 테이블을 src/kernels/<uname-release>/offsets.h에 저장합니다. --format c --out offsets.h는 독립 헤더를 덤프합니다.
기기 내 분석
전체 OTA는 전적으로 휴대폰에서 분석할 수 있습니다. boot와 xbl_config는 자동으로 추출됩니다. 앱 샌드박스 내에서 실행할 때는 --work-dir에 앱 쓰기 가능 디렉터리를 전달하세요. 크로스 컴파일 후 푸시:
rustup target add aarch64-linux-android
$ndk = "$env:ANDROID_HOME\ndk\29.0.14206865\toolchains\llvm\prebuilt\windows-x86_64\bin"
$env:CC_aarch64_linux_android = "$ndk\aarch64-linux-android35-clang.cmd"
$env:AR_aarch64_linux_android = "$ndk\llvm-ar.exe"
$env:CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER = $env:CC_aarch64_linux_android
cargo build --release --target aarch64-linux-android --manifest-path tools/extract_rs/Cargo.toml
adb push tools/extract_rs/target/aarch64-linux-android/release/ghostlock-extract /data/local/tmp/
adb shell /data/local/tmp/ghostlock-extract /sdcard/OTA.zip
앱 재빌드 없이 오프셋 가져오기
새 커널은 더 이상 앱 재빌드가 필요하지 않습니다. Import offsets.json을 탭하고 추출기의 JSON(단일 객체 또는 배열)을 선택하거나 <GHOSTLOCK_HOME>/offsets.json(기본값 /data/local/tmp)에 푸시하세요. 시작 시 네이티브 코드는 커널을 거부하기 전에 현재 uname -r을 가져온 항목과 매칭합니다. 가져오기는 파일 간에 병합됩니다. 이미 저장된 릴리스가 있으면 덮어쓰기 전에 확인을 요청합니다.
앱이 JSON을 직접 생성할 수도 있습니다. Parse OTA link(전체 OTA ZIP URL)와 Parse image(boot.img + 선택적 xbl_config.img)는 추출기를 프로세스 내에서 실행하고 성공 시 offsets.json을 앱 데이터 디렉터리에 기록합니다.
[
{
"release": "6.12.38-android16-5-g844001fb8721-ab14552068-4k",
"kernel_phys_load": 3347054592,
"pselect_waiter_shift": 0,
"symbols": { "off_init_task": 37801728, "off_init_cred": 37891184 },
"struct_fields": { "task_prio": 148, "task_cred": 2304 }
}
]
크레딧 및 라이선스
다음 프로젝트를 기반으로 하며, Apache License 2.0에 따라 라이선스가 부여됩니다(LICENSE 참조):