system_server broadcast hooking

2018. 3. 17. 12:52Security ★ Development/시스템

반응형

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()를 통해 보내는 브로드캐스트는 확인할 수 있습니다.