定义一个新的protected-broadcast广播


定义一个新的广播:
1,在frameworks\base\core\res中的AndroidManifest.xml
<protected-broadcast android:name="android.intent.action.POWER_BUTTON_LONG_PRESS" />
2,被定义为protected-broadcast的广播--受保护的广播,只能是拥有系统权限的APP,其他APP没有权限发送该类广播
一、android:sharedUserId=”android.uid.system”系统中所有使用android.uid.system作为共享UID的APK,都会首先在manifest节点中增加 android:sharedUserId=”android.uid.system”,然后在Android.mk中增加 LOCAL_CERTIFICATE := platform
二、AMS对系统应用发出的广播进行安全检查
3,发送广播:
                    Intent intent2 = new Intent("android.intent.action.POWER_BUTTON_XXX_PRESS");
                    mContext.sendBroadcast(intent2);
注册:
APP manifest.xml:
注册1::
        <receiver android:name=".receiver.DevicePowerButtonReceiver">
            <intent-filter>
                <action android:name="android.intent.action.POWER_BUTTON_XXX_PRESS" />
            </intent-filter>
        </receiver>
        
注册2:
    public void register(Context context) {
        IntentFilter filter = new IntentFilter();
        filter.addAction(PowerButton.ACTION_POWER_BUTTON_SHORT_PRESS);
        filter.addAction(PowerButton.ACTION_POWER_BUTTON_LONG_PRESS);
        context.registerReceiver(this, filter);
    }
    
接收:
public abstract class PowerButtonReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (PowerButton.ACTION_POWER_BUTTON_SHORT_PRESS.equals(action)) {
            handleShortPress(context);
        } else if (PowerButton.ACTION_POWER_BUTTON_LONG_PRESS.equals(action)) {
            handleLongPress(context);
        }
    }
}

<think>嗯,用户问的是关于“Sending non-protected broadcast phoneincomingCall from system 1400:system/1000 pkg android”这条日志消息的信息。首先,我需要理解这条日志的具体含义,可能涉及Android系统的广播机制。 首先,分解日志的结构。消息中提到发送了一个非保护的广播,类型是phoneincomingCall,来源是系统UID 1400(system/1000),包名是android。非保护广播可能指的是没有设置权限的广播,这可能会带来安全风险,因为任何应用都可以接收它。 接下来,考虑可能的原因。系统应用发送广播时,如果没有声明适当的权限,就可能被归类为非保护。需要检查发送广播的代码,看看是否有添加权限。另外,Android版本升级可能改变了广播的保护策略,比如在较新的版本中某些广播需要权限。 然后,潜在的影响。恶意应用可能监听这类广播,获取敏感信息,比如来电状态,导致隐私泄露。还可能被用来触发其他恶意行为,比如在来电时启动攻击。 解决方案方面,建议开发者在使用sendBroadcast()时,使用带有权限的方法,比如sendBroadcast(Intent, String),并声明相应权限。同时,在接收端设置权限要求,确保只有授权应用能接收。另外,检查系统应用的代码,确认是否需要调整广播发送方式,或者改用更安全的通信方法,如直接调用组件或绑定服务。 最后,总结一下,这条日志提示系统发送了一个未受保护的广播,可能存在安全隐患,需要开发者采取权限保护措施来增强安全性。</think>你的问题涉及Android系统广播的安全机制,下面分步骤解释: 1. **日志含义解析** 这条日志表示:UID为1400的系统进程(Android系统核心组件)正在发送一个未受保护的`phoneincomingCall`广播。完整日志格式为: $$packageName (pid) is sending non-protected broadcast actionName from system uid UID$$ 2. **关键概念说明** - **非保护广播(Non-protected broadcast)**:指未通过`android:permission`属性声明发送权限的广播 - **UID 1400**:属于`system_server`进程(Android系统核心服务) - **pkg android**:广播发送方为系统框架层代码 3. **可能触发场景** - 系统电话服务检测到来电时,通过广播通知其他组件 - 广播发送代码未添加权限声明: ```java // 未保护的方式 context.sendBroadcast(new Intent("phoneincomingCall")); // 正确应声明权限 context.sendBroadcast(intent, "android.permission.PRIVILEGED"); ``` 4. **安全风险分析** - 信息泄露:任何应用(包括恶意应用)均可注册接收此广播 - 状态伪造:攻击者可能伪造来电状态触发异常行为 - 违反Android兼容性定义文档(CDD)要求:自Android 8.0起,敏感广播必须显式声明权限 5. **解决方案建议** (1) 发送方修正: ```xml <!-- AndroidManifest.xml中添加权限声明 --> <uses-permission android:name="android.permission.BROADCAST_PHONE_STATE"/> ``` (2) 接收方限制: ```xml <receiver android:name=".PhoneStateReceiver" android:permission="android.permission.READ_PRIVILEGED_PHONE_STATE"> <intent-filter> <action android:name="phoneincomingCall"/> </intent-filter> </receiver> ``` (3) 系统级优化: - 对于系统内部组件通信,建议改用`LocalBroadcastManager` - 关键状态通知建议改用`ContentObserver`或`Binder`直连 6. **适配建议** - 针对不同Android版本调整策略: - Android 9+:需使用`sendBroadcast(Intent, String)` - Android 13+:对`PHONE_STATE`广播实施更严格限制 - 使用`adb shell dumpsys package broadcasts`检查广播保护状态 这类日志提示系统需要加强广播安全防护,建议结合Android V2签名方案和权限白名单机制,确保敏感状态变更通知的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值