2016-07-21 6 views
1

나는 Xposed가 후킹 부분을 어떻게하는지 이해하려고 노력하고 있으며, 사용자가 어떤 방법 으로든 쉽게 연결할 수 있도록 API를 제공한다.어떻게 안드로이드에서 후킹을 할 것인가

시작될 때마다 모든 프로세스 내부에있는 jar 파일 인 Xposed Bridge의 소스 코드를 살펴 보았습니다. 또한 JNI를 통해 네이티브 메소드에 전달하기 위해 클래스 메소드, 매개 변수 등을 얻기 위해 자바 리플렉션을 사용하고있는 것으로 나타났습니다.

한 가지, 내가 알아낼 수없는 것은 Xposed가 프로세스를 연결하고 그 프로세스를 완전히 제어 할 수 있다는 것입니다.

나는 후크가 XposedBridge jar 파일의 Java 측에서 발생하는지 또는 원시 코드의 ART 레벨에서 발생하는지 파악하려고합니다.

답변

1

좋은 질문입니다. XPosed는 ART VM 및 이전 Dalvik VM 인 app_process 파일을 수정하여 작동합니다.

이 수정 된 ART/Dalvik VM은 XPosedBridge.jar 파일과 실행시 시스템에 등록 된 모든 xposed 모듈을로드합니다. 이제는 Android가 작동하는 방식이 처음부터 (Zygote라고 불리는) 하나의 Java VM이 생성 된 다음 앱이 시작될 때마다 새 앱이 자체 VM을 갖기 위해 포크됩니다.

또한 수정 된 ART/Dalvik VM은 Zygote의 fork 함수 뒤에 콜백을 추가하여 packageOnLoad 이벤트를 가로 채고있는 모든 xposed 모듈 코드를 트리거 할 수있게합니다.

마지막으로 개별 클래스의 메서드를 가로 채기 위해 XposedBridge (xposed 모듈을 만들 때 사용중인 라이브러리)의 hookMethod 기능은 VM의 기본 클래스 구조체를 수정합니다. 는 새 대체 메소드에 연결하려는 메소드의 메소드 포인터를 리디렉션하기 위해 연결하려는 특정 클래스에 대해 정의됩니다.

관련 문제