라이브러리 로드 과정

라이브러리 로드 과정

2024년 7월 8일

일반적인 라이브러리 로드 과정 #

69174d43-013d-4387-97c0-c31718c09d16 이 이미지도 수정해야됨. 리턴되는 위치가 잘 안나와있음

안드로이드에서 라이브러리는 Java단의 System.loadLibrary(), System.load() 함수 호출로 로드할 수 있다.

내부적으로는 NDK(C/C++)단에서 libdl.so의 dlopen(), android_dlopen_ext() 을 호출한다. 4c2d3016-77c8-40b4-b4cb-74f2ee156a3f

[TODO] 자동으로 호출되는부분 init_array, fini_array, depencdency.. 이런것들도 정리


분석 #

어떤 코드에서 어떻게 호출되는지, readelf 같은걸로 확인하기 어떤 순서인지 정확히 확인할 수 있도록..

후킹코드 #

후킹을 어떻게 해야하는지도 알려주면 좋다. 그냥 후킹하면 안된다. android_dlopen_ext의 onEnter에서는 라이브러리가 로드되지 않았기 때문에 찾을 수 없고, onLeave에서는 이미 init_array 함수가 호출됐기 때문에 늦은 후킹이 된다.

다른 방법? #

mmap으로 직접 로딩? 이게 가능한진 모르겠지만 POC 까지 가능하다면 하는게 좋음

Reference #

###init array hook 관련 이건 따로 프리다에서 다뤄야될듯

comments powered by Disqus