protectai 분석중 발생한 정리할것들
2024년 7월 9일
- 라이브러리 로드 방식에 대한 이해 -> initarray 등
- 코루틴을 사용할때 후킹한 메소드가 어떤 코루틴에서 실행하고 있는지 찾기.
- 클래스로더가 다를때 왜 못찾는가? -> 자바 클래스 로딩 매커니즘 이해해야함
- Frida는 앱의 기본 클래스로더를 사용하고, 앱에서 로드하는 클래스들은 보통 기본 클래스로더에 로드되기 때ㅔ문에 상관없는데 커스텀 클래스로더를 사용하면, 앱의 기본 클래스로더가 아니기 때문에 클래스를 찾을 수 없게된다. -> 확인필요 이 가설이 맞다면, 문제되고있는 클래스를 찾을 수 없는 TS 에러들도 왜 발생했는지 어느정도 이해가 될수있음
- 프리다에서 다른 클래스로더를 이용해서 클래스후킹하는 방법.
- Java.classFactory.loader = loader; 처럼 클래스로더 바꿔치기. enumerateClassLoaders를 사용할 수 있음
- 노출된 클래스에 접근해서 getClassLoader() 메서드 등으로 클래스로더 가져오기
- 상위 클래스로더를 후킹
- 리플렉션으로 숨겨진 클래스로더 접근
- 이 방식을 정리해서 세션을 가져도될듯
- 동적으로 로드되는 클래스의 덤프
다이나믹 패키지를 사용하는 앱을 탐지하는 방법
- AndroidManifest.xml을 파싱해서 특정 권한이나 intent-filter action이 있는 경우 가능성을 높임. 바이너리로 파싱해도되고, 특징에 따라 요청해도되고..
- queryBroadcastReceivers 를 이용해서 어떤 브로드캐스트들이 원하는 Intent를 처리할 수 있는지 확인하는건데, QUERY_ALL_PACKAGES를 적용할 때 이 방식으로는 퍼미션이랑 가져올 수 있는것같음
- intent-filter에 이 설정된 경우
Intent(Intent.ACTION_MY_PACKAGE_REPLACED).setData(Uri.parse("package:")).setPackage(packageName),인텐트를 이렇게 data까지 저장해서 만들면된다.
- magisk는 어떤 원리로 다이나믹패키지를 구현햇나?