1. 리패키징 혹은 개발 과정에서 아래 코드를 추가

// build.gradle에 추가
buildTypes {
	release {
		debuggable true
	}
    
// AndroidManifest.xml에 추가
<application
	android:debuggable="true"     
	tools:ignore="HardcodedDebugMode">

2. adb forward tcp:23946 tcp:23946

3. adb push c:\ida\dbgsrv\android_server64 /data/local/tmp

4. 안드로이드에서 /android_server64 &

5. IDA->Debugger->Attach->Remote ARM Linux/Android debugger

6. Hostname 127.0.0.1 Port 23946

7. Run!

8. 앱 선택 후 attach 되면 F9

9. got SIGCHLD signal 창이 뜨면 F9클릭 후 Yes 클릭

 

 

    private boolean checkRootMethod1() {
        for (String str : new String[]{"/system/app/Superuser.apk", "/sbin/su", "/system/bin/su", "/system/xbin/su", "/data/local/xbin/su", "/data/local/bin/su", "/system/sd/xbin/su", "/system/bin/failsafe/su", "/data/local/su"}) {
            if (new File(str).exists()) {
                return true;
            }
        }
        return false;
    }

exist() -> /apex/com.android.art/lib64/libjavacore.so에서 access()를 호출함

access() 후킹 코드 작성으로 우회 가능

int (*Org_access)(const char* __path, int __mode);
int hook_access(const char* __path, int __mode)
{
    register uint64_t result;

    __asm volatile ("MOV %0, LR\n" : "=r" (result));

    LOG("access path - %s %lx", __path, result);
    if (strstr(__path, "su"))
    {
        return -1;
    }
    return Org_access(__path, __mode);
}
A64HookFunction((void*)access, (void*)hook_access, (void**)&Org_access);

https://github.com/codetronik/AArch64Hook_android

테스트 환경 : 갤럭시 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. namespace 체크 때문에 so를 /system/lib에 복사하여야 한다.

2. so에서 로그 파일 생성 시 로그파일 경로가 app경로가 아닐 경우 crash가 발생한다. /data/data/app_name/cache 에 로그를 생성하면 오류가 발생하지 않는다.

android 11의 경우 /system/lib64 디렉토리도 namespace 우회가 불가능하기 때문에 /data/user/0/app name/files 폴더에 so를 복사한다.

 

+ Recent posts