SO 인젝션 동작 순서
1. 인젝션할 SO파일을 /data/local/tmp 또는 샌드박싱 영역(/data/data/패키지명)에 옮긴다. 낮은 버전의 안드로이드면 로드가 되겠지만 같은 uid, context(selinux) 권한 맞춰줘야 된다.
2. /proc/%d/cmdline 폴더를 순회하면서 zygote 프로세스명을 찾고 해당 프로세스의 pid값을 알아낸다.
3. zygote 함수를 사용하여 해당 프로세스에 ptrace로 어태치한다.
4. libc.so의 mmap 함수의 위치를 알아낸다.
5. read/write 권한을 인자로 주어 mmap 함수를 호출한다.
6. libc.so의 mprotect 함수의 위치도 알아낸다.
7. mmap으로 만든 메모리 영역에 READ/EXEC 권한으로 변경해준다.
8. mmap함수 호출 후 반환된 주소값에 인젝션할 so파일의 경로를 write 해준다.
9. /system/bin/linker에서 dlopen 함수의 위치를 알아낸다.
10. dlopen(mmap반환값, RTLD_NOW, RTLD_GLOBAL) 함수로 호출하여 라이브러리를 로드한다.
11. 필요하다면 dlsym 함수도 마찬가지로 호출하면 된다.
린엔진, frida도 이와 유사한 방식이라고 보면 된다.
'Android > Tech' 카테고리의 다른 글
Android OKHTTP SSL Pinning 적용하기 (certificate pinning) (1) | 2020.05.01 |
---|---|
안드로이드 OLLVM 빌드 방법 (0) | 2019.12.17 |
안드로이드 안티디버깅 앱 우회 실습 - IDA 동적 분석 방법 (0) | 2019.12.15 |
안드로이드 안티디버깅 기술과 우회 기법 (1) | 2019.12.08 |
[안드로이드] ARM 후킹 기법 (1) | 2019.09.09 |