테스트 환경 : 갤럭시 S6 Lite (android 11 : P610XXU2CUC3 (2021.03) 펌웨어)

android 7에서 통했던 /system/lib 폴더에 so를 복사하는 방법이 더이상 안됨

아래와 같은 에러 발생함.

dlopen failed: library "/system/lib64/libinject.so" needed or dlopened by "(unknown)" is not accessible for the namespace "classloader-namespace"

심지어 기존에 있던 시스템 라이브러리를 인젝션해도 동일 에러 발생.

해결 방법은 /data/user/0/app name/files/ 에 so를 복사함.

넷플릭스,정부24앱에서 인젝션 테스트 완료

1. 옵션->빌드 버전에서 현재버전 확인 후 각 버전에 맞는 펌웨어 다운로드

(13버전의 2024.10 펌웨어 P610KOO6FXJ1 에서 루팅 확인)

samfw.com/firmware/SM-P610/KOO

https://samfrew.com/model/SM-P610/

2. adb 디버그 허용, oem 언락 허용(빌드버전 연타하면 나옴)

3. 파워 off 후 볼륨 상 + 볼륨 하(One UI 3.0이상,보통 안드로이드11버전)를 동시에 누르면서, 1초후에 usb를 연결한다. (연결되어있는 상태면 안되고 타이밍 맞게 연결해줘야됨) 잠시 후 다운로드 모드로 진입하게 된다.

볼륨상을 길게 눌러 부트로더 언락을 진행한다.

4. 초기화 완료되면 다시 빌드버전 연타한 후 oem이 언락되어 있는지 확인

5. ap.tar에서 boot.img.lz4만 추출후 압축해제 (wsl에서 실행)

$ sudo apt-get install lz4
$ lz4 -d boot.img.lz4

6. magisk manager설치 후 boot.img만 패치

그 후 아래의 명령어로 다시 압축 

lz4 -B6 --content-size boot.img boot.img.lz4

boot.img.lz4를 원본 ap의 boot.img.lz4에 덮어쓰고 다시 tar로 압축

tar -cvf ap.tar *

7. 파워 off후 다시 다운로드 모드에 진입한다. odin 실행 후 패치한 ap선택 후 tar파일을 선택하여 start를 누른다.

bl, csc(home_csc 아님) 도 같이 설정해줘야 한다.

반드시 oem lock이 off 상태인지 확인한다. on이면 2부터 다시 반복한다.

Odin3-v3.14.4.zip
4.20MB

8. odin이 성공하면 몇번 재부팅되면서 실행되는데, 만약 try again, reset 하는 화면이 뜨면 reset한다.

이 과정을 거치고 화면이 보여진다면 다시 태블릿을 종료하고, 파워+볼륨상을 길게 눌러 리커버리 모드로 진입한 후에

wipe data/factory reset  과 wipte cache partition을 실행한다.

(안하면 내장 메모리 용량이 16기가로 인식됨)

아래 항목은 실패 시 참조

만약 에러가 발생하면 파워 + 볼륨하 버튼을 누르고 있는다.

태블릿 초록색 화면에 "An error has occurred while updating the device software. Use the Emergency recovery function in the Smart Switch PC software." 에러가 발생하면 아래의 프로그램을 설치한다.

Frp Hijacke rV1.0 setup.rar
1.12MB

설치 패스워드 : www.gsmhagard.com

위처럼 입력후 HIJACK IT!을 누르면 재부팅이 된다.

태블릿이 공장 초기화 상태로 되는데, 더이상 oem잠금해제가 보이지 않게 된다. 설정->일반 에서 "날짜 및 시간 자동 설정"을 비활성화 후 날짜를 현재 날짜에서 1달전 쯤으로 설정한다. 그다음 소프트웨어 업데이트를 시도하면 oem 잠금해제가 보이게 된다.

만약 다른 에러로 무한 다운로드 모드 상태가 지속된다면, 패치하지 않은 순정 ap, bl, csc펌웨어를 odin으로 올린다.

 

레퍼런스

forum.xda-developers.com/t/sm-p610-flash-only-official-released-binaries-are-allowed-to-be-flashed-recovery.4214009/

forum.xda-developers.com/t/howto-unlock-and-root-the-galaxy-tab-s6-lite.4132289/

 

1. Android Studio -> Create New Project -> Native C++

2. app/build.gradle을 열어보면 아래와 같이 되어있다.

android {
    compileSdkVersion 29
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.codetronik.myapplication"
        minSdkVersion 24
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }

arm64만 빌드하기 위해 externalNativeBuild { } 밑줄에 ndk { }를 추가한다. (수정하지 않으면 x86, x86_64, armeabi까지 모두 빌드됨)

        ndk {
            abiFilters 'arm64-v8a'
        }

만약 armeabi-v7a도 추가한다면 nox에서 64비트 모듈을 무시하고 32비트 모듈을 호출하게 되니 주의

3. nox 64비트 다운로드 (32비트를 받으면 arm64-v8a 에뮬레이션이 불가능)

4. 옵션에서 ROOT권한 주고, 개발자 옵션에서 USB 디버깅 허용 (구글에서 "nox 안드로이드 분석 환경" 로 검색해보면 가이드 많이 나옴)

5. 안드로이드 스튜디오에서 nox 기기를 apk 실행용으로 설정한다.

6. 아래와 같이 arm64-v8a 환경에서 잘 동작하는지 확인한다.

1) 아래는 arm64-v8a 전용 어셈블리어이므로, 타 cpu환경에서는 동작하지 않는다.

extern "C" JNIEXPORT jstring JNICALL
Java_com_codetronik_myapplication5_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";

__asm__ (".byte 0x03\n"\
        ".byte 0x00\n"\
        ".byte 0x00\n"\
        ".byte 0x14\n"\
        ".byte 0xde\n"\
        ".byte 0xad\n"\
        ".byte 0xbe\n"\
        ".byte 0xef\n"\
        ".byte 0xde\n"\
        ".byte 0xad\n"\
        ".byte 0xbe\n"\
        ".byte 0xef\n");

    return env->NewStringUTF(hello.c_str());
}

2) nox-adb을 root로 실행 후 빌드한 jni가 arm64로 동작 중인지 확인한다.

+ Recent posts