라이브러리 로드 과정
2024년 7월 8일
일반적인 라이브러리 로드 과정 #
이 이미지도 수정해야됨. 리턴되는 위치가 잘 안나와있음
안드로이드에서 라이브러리는 Java단의 System.loadLibrary(), System.load() 함수 호출로 로드할 수 있다.
내부적으로는 NDK(C/C++)단에서 libdl.so의 dlopen(), android_dlopen_ext() 을 호출한다.
[TODO] 자동으로 호출되는부분 init_array, fini_array, depencdency.. 이런것들도 정리
분석 #
어떤 코드에서 어떻게 호출되는지, readelf 같은걸로 확인하기 어떤 순서인지 정확히 확인할 수 있도록..
후킹코드 #
후킹을 어떻게 해야하는지도 알려주면 좋다. 그냥 후킹하면 안된다. android_dlopen_ext의 onEnter에서는 라이브러리가 로드되지 않았기 때문에 찾을 수 없고, onLeave에서는 이미 init_array 함수가 호출됐기 때문에 늦은 후킹이 된다.
다른 방법? #
mmap으로 직접 로딩? 이게 가능한진 모르겠지만 POC 까지 가능하다면 하는게 좋음
Reference #
###init array hook 관련 이건 따로 프리다에서 다뤄야될듯