Security ★ Development/시스템
system_server broadcast hooking
Duskystar
2018. 3. 17. 12:52
반응형
system_server는 안드로이드에서 작동하는 프로세스로 init -> zygote -> system_server 순으로 구동됩니다.
여러가지 서비스 manager 역할을 하며 framework에 속한다고보면 됩니다.
여기서 프로세스간 브로드캐스트를 잡을 수 있습니다.
am/BroadcastQueue.java
private final void processCurBroadcastLocked(BroadcastRecord r,
ProcessRecord app) throws RemoteException {
if (DEBUG_BROADCAST) Slog.v(TAG,
...
processCurBroadcastLocked() 함수에서 할 수 있는데 BroadcastRecord와 ProcessRecord에서 각각의 프로세스 정보를 얻을 수 있습니다.
각각의 전처리를 해준 다음 AOSP 기준으로 app.thread.scheduleReceiver()가 호출되기 전에 확인해줍니다.
위 시점에서 r.callerPackage가 브로드캐스트를 보내는 프로세스이고 app.processName이 브로드캐스트를 받는 프로세스가 됩니다.
bind를 통해 보내는 intent는 여기서 잡을 수 없고 binder driver 혹은 ActivityManagerService에서 잡아야하지만 sendBroadcast()를 통해 보내는 브로드캐스트는 확인할 수 있습니다.