前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android 7.0 中 Service bind 流程详解

Android 7.0 中 Service bind 流程详解

原创
作者头像
汪毅雄
修改于 2017-10-16 09:20:29
修改于 2017-10-16 09:20:29
3.8K0
举报
文章被收录于专栏:汪毅雄的专栏汪毅雄的专栏

我们知道,Android启动Service有两种方式,startService和bindService。

对于通过startService启动的Service,只能作为接收方,启动方可以通过onStartCommand来传递参数。这种启动方式其可以有多个启动者,不过在销毁的时候,一旦有任意一个启动调用了stopService或者自身stopSelf后,该Service就会停止,而启动者的生命周期无法影响到该Service。

对于通过bindService启动的Service,其和启动方有个“绑定”的过程,启动方可以通过Service的binder引用来调用Service的方法。不过这种方式Service的生命周期会关联着启动方的,启动方生命周期结束后,会默认unbindService来结束。

startService很多过程在bindService中都会得到体现,所以本文只介绍bindService的流程。

先看看bindService的调用过程

bindService

bindServiceCommon

这一步中首先会把ServiceConnection转成Binder对象

代码语言:txt
AI代码解释
复制
IServiceConnection sd = mPackageInfo.getServiceDispatcher(conn, getOuterContext(), handler, flags);

这一步是在LoadApk中完成的

代码语言:txt
AI代码解释
复制
public final IServiceConnection getServiceDispatcher(ServiceConnection c,
            Context context, Handler handler, int flags) {
        synchronized (mServices) {
            LoadedApk.ServiceDispatcher sd = null;
            ArrayMap<ServiceConnection, LoadedApk.ServiceDispatcher> map = mServices.get(context);
            if (map != null) {
                sd = map.get(c);
            }
            if (sd == null) {
                sd = new ServiceDispatcher(c, context, handler, flags);
                if (map == null) {
                    map = new ArrayMap<ServiceConnection, LoadedApk.ServiceDispatcher>();
                    mServices.put(context, map);
                }
                map.put(c, sd);
            } else {
                sd.validate(context, handler);
            }
            return sd.getIServiceConnection();
        }
    }

可以看到,LoadApk会为每个context保存一个key为ServiceConnection、value为ServiceDispatcher的map,这样尽量做到了ServiceConnection对应的Binder对象的复用。如果没有可复用,则把ActivityThread的主Handler和ServiceConnection对应起来,这样在复用的时候,ServiceDispatcher会调用validate方法检查handler为当前主线程handler,保证不错乱。另外,ServiceConnection作为回调接口,其在IPC中实质是以ServiceDispatcher的内部类InnerConnection作为载体来代替的。

接下来,就交给ActivityManagerService处理了

代码语言:txt
AI代码解释
复制
int res = ActivityManagerNative.getDefault().bindService(
                mMainThread.getApplicationThread(), getActivityToken(), service,
                service.resolveTypeIfNeeded(getContentResolver()),
                sd, flags, getOpPackageName(), user.getIdentifier());

ActiveService.bindServiceLocked

代码语言:txt
AI代码解释
复制
ServiceLookupResult res =
            retrieveServiceLocked(service, resolvedType, callingPackage, Binder.getCallingPid(),
                    Binder.getCallingUid(), userId, true, callerFg, isBindExternal);
        if (res == null) {
            return 0;
        }
        if (res.record == null) {
            return -1;
        }

这步顾名思义,是获取根据intent、binder等数据获取Service的信息,其中ServiceLookupResult包含了ServiceRecord和权限信息。进入函数我们可以看到如下:

代码语言:txt
AI代码解释
复制
ServiceRecord r = null;        
ServiceMap smap = getServiceMap(userId);
        final ComponentName comp = service.getComponent();
        if (comp != null) {
            r = smap.mServicesByName.get(comp);
        }
        if (r == null && !isBindExternal) {
            Intent.FilterComparison filter = new Intent.FilterComparison(service);
            r = smap.mServicesByIntent.get(filter);
        }
        if (r != null && (r.serviceInfo.flags & ServiceInfo.FLAG_EXTERNAL_SERVICE) != 0
                && !callingPackage.equals(r.packageName)) {
            r = null;
        }

这一步可以看到,再取ServiceRecord的时候,会先去尝试用缓存,如果设置了FLAG_EXTERNAL_SERVICE且是外部Service调用,则禁止复用。如果无法复用,则创建新的ServiceRecord并赋值。

回到bindServiceLocked中,往下走

代码语言:txt
AI代码解释
复制
AppBindRecord b = s.retrieveAppBindingLocked(service, callerApp);

首先,ServiceRecord会根据自己的成员函数retrieveAppBindingLocked方法来获取一个AppBindRecord。再此后面会用到一些数据结构:AppBindRecord、ServiceRecord、IntentBindRecord、ProcessRecord、ConnectionRecord。他们之间的关系需要理清楚一下:

ServiceRecord:保存了Service的信息

ProcessRecord:进程的信息

ConnectionRecord:进程和Service建立起的本次通信,记一次ConnectionRecord

AppBindRecord:当某个进程需要用某个Intent启动Service的时候,这时候应用程序和Service的关系由AppBindRecord来维持。所以里面包含:谁启动(ProcessRecord)、启动的是哪个(ServiceRecord)、用什么来启动(IntentBindRecord)、所有启动记录的信息(ArraySet<ConnectionRecord>

IntentBindRecord:如在AppBindRecord所说,用什么来启动Service(Intent),里面携带了ServiceRecord、及所有用此Intent启动Service的ArrayMap<ProcessRecord, AppBindRecord>

举个很不恰当的比喻:我想在一张纸上盖一个“汪毅雄”的章。

ProcessRecord:我(行为发起者)

ServiceRecord:“汪毅雄”的章印(行为目标)

IntentBindRecord:制作刻了“汪毅雄”三个字、并且能记录盖章过程的一个智能章。(工具,有权限的人都能用。也可以有很多个不同的,只要能盖出“汪毅雄”这几个字就可以)

AppBindRecord:“我要盖章”这个过程一系列下来的所有记录。

ConnectionRecord:手摁章印的过程。

代码语言:txt
AI代码解释
复制
public AppBindRecord retrieveAppBindingLocked(Intent intent,
            ProcessRecord app) {
        Intent.FilterComparison filter = new Intent.FilterComparison(intent);
        IntentBindRecord i = bindings.get(filter);
        if (i == null) {
            i = new IntentBindRecord(this, filter);
            bindings.put(filter, i);
        }
        AppBindRecord a = i.apps.get(app);
        if (a != null) {
            return a;
        }
        a = new AppBindRecord(this, i, app);
        i.apps.put(app, a);
        return a;
    }

有上面对数据结构的认识,我们可以看到,要取一个AppbindRecord。

a、我们先用Intent去获取filter。

b、ServiceRecord里有一个成员Map bindings保存所有可以启动该Service的IntentBindRecord,获得filter后,利用它去bindings中尝试复用IntentBindRecord。

c、拿到IntentBindRecord后,再用ProcessRecord去检查IntentBindRecord,看看其里面有没有和ProcessRecord相同进程的且也是启动该Service的AppbindRecord,有的话当然不用再建一个AppBindRecord,直接复用返回。

继续往下

代码语言:txt
AI代码解释
复制
AppBindRecord b = s.retrieveAppBindingLocked(service, callerApp);
            ConnectionRecord c = new ConnectionRecord(b, activity,
                    connection, flags, clientLabel, clientIntent);

            IBinder binder = connection.asBinder();
            ArrayList<ConnectionRecord> clist = s.connections.get(binder);
            if (clist == null) {
                clist = new ArrayList<ConnectionRecord>();
                s.connections.put(binder, clist);
            }
            clist.add(c);
            b.connections.add(c);
            if (activity != null) {
                if (activity.connections == null) {
                    activity.connections = new HashSet<ConnectionRecord>();
                }
                activity.connections.add(c);
            }

获得AppBindRecord后,再利用传递过来的信息(包括IServiceConnection这个回调接口)创建一个ConnectionRecord,并且把ConnectionRecord分别保存到AppBindRecord、ServiceRecord、ActivityRecord中。

继续往下

代码语言:txt
AI代码解释
复制
if ((flags&Context.BIND_AUTO_CREATE) != 0) {
                s.lastActivity = SystemClock.uptimeMillis();
                if (bringUpServiceLocked(s, service.getFlags(), callerFg, false,
                        permissionsReviewRequired) != null) {
                    return 0;
                }
            }

如果flag不为BIND_AUTO_CREATE,或者bringUpServiceLocked成功(return null)后,则可以继续后续的操作,如:Service已存在的时候BIND_TREAT_LIKE_ACTIVITY可以降低Service被杀的概率、重新回调connected、rebind等,本文不做讨论。继续bringUpServiceLocked

代码语言:txt
AI代码解释
复制
app = mAm.getProcessRecordLocked(procName, r.appInfo.uid, false);
            if (app != null && app.thread != null) {
                try {
                    app.addPackage(r.appInfo.packageName, r.appInfo.versionCode, mAm.mProcessStats);
                    realStartServiceLocked(r, app, execInFg);
                    return null;
                } catch (TransactionTooLargeException e) {
                    throw e;
                } catch (RemoteException e) {
                  
                }
            } 

在realStartServiceLocked之前,和Activity启动一样,我们先需要判断Service的进程是否存在,如果不存在,需要孵化新的进程,然后再继续Service的启动。这块在Activity启动过程中已经详述,这里就不重复说了,详见《Android 7.0中Launcher启动Activity过程》

当进程存在的时候,我们直接realStartServiceLocked

代码语言:txt
AI代码解释
复制
            mAm.notifyPackageUse(r.serviceInfo.packageName,
                                 PackageManager.NOTIFY_PACKAGE_USE_SERVICE);
            app.forceProcessStateUpTo(ActivityManager.PROCESS_STATE_SERVICE);
            app.thread.scheduleCreateService(r, r.serviceInfo,
                    mAm.compatibilityInfoForPackageLocked(r.serviceInfo.applicationInfo),
                    app.repProcState);
            r.postNotification();
            created = true;

上面可以看到,这块利用binder通信去告诉进程去创建一个Service---scheduleCreateService,实际创建过程是在用户进程(ActivityThread)中。

代码语言:txt
AI代码解释
复制
public final void scheduleCreateService(IBinder token,
                ServiceInfo info, CompatibilityInfo compatInfo, int processState) {
            updateProcessState(processState, false);
            CreateServiceData s = new CreateServiceData();
            s.token = token;
            s.info = info;
            s.compatInfo = compatInfo;
            sendMessage(H.CREATE_SERVICE, s);
        }

ActivityThread会创建一个CreateServiceData,并把ServiceInfo等信息填入,交给main Handler处理,最终会到handleCreateService方法中。我们直接进入

代码语言:txt
AI代码解释
复制
private void handleCreateService(CreateServiceData data) {
        LoadedApk packageInfo = getPackageInfoNoCheck(
                data.info.applicationInfo, data.compatInfo);
        Service service = null;
        try {
            java.lang.ClassLoader cl = packageInfo.getClassLoader();
            service = (Service) cl.loadClass(data.info.name).newInstance();
        } catch (Exception e) {
            ...
        }
        try {
            ContextImpl context = ContextImpl.createAppContext(this, packageInfo);
            context.setOuterContext(service);
            Application app = packageInfo.makeApplication(false, mInstrumentation);
            service.attach(context, this, data.info.name, data.token, app,
                    ActivityManagerNative.getDefault());
            service.onCreate();
            mServices.put(data.token, service);
            try {
                ActivityManagerNative.getDefault().serviceDoneExecuting(
                        data.token, SERVICE_DONE_EXECUTING_ANON, 0, 0);
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
            }
        } catch (Exception e) {
           ...
        }
    }

在这个方法中,首先获得Service的ClassLoader,用之load一个Service实例。然后再设置ContextImpl,然后初始化Service在进程中的信息和其binder对象,最后调用Service.onCreate方法,完成创建。然后通过binder告诉AMS service创建成功,也就是serviceDoneExecuting,可以看到告诉AMS的有个type的字段设为SERVICE_DONE_EXECUTING_ANON。

代码语言:txt
AI代码解释
复制
/** Type for IActivityManager.serviceDoneExecuting: anonymous operation */
    public static final int SERVICE_DONE_EXECUTING_ANON = 0;
    /** Type for IActivityManager.serviceDoneExecuting: done with an onStart call */
    public static final int SERVICE_DONE_EXECUTING_START = 1;
    /** Type for IActivityManager.serviceDoneExecuting: done stopping (destroying) service */
    public static final int SERVICE_DONE_EXECUTING_STOP = 2;

这块是Service生命周期给AMS的回调的类型,有3类。但是在Service onCreate完成后,AMS收到后没太做处理,所以这部分跳过。

刚才在realStartServiceLocked,AMS告诉进程创建Service,但是步骤并没有真正完成,我们回到刚才的方法

代码语言:txt
AI代码解释
复制
private final void realStartServiceLocked(ServiceRecord r,
            ProcessRecord app, boolean execInFg) throws RemoteException {
        try {
            ...
            app.thread.scheduleCreateService(r, r.serviceInfo,
                    mAm.compatibilityInfoForPackageLocked(r.serviceInfo.applicationInfo),
                    app.repProcState);
//******************** 接这里 ************************//
        } catch (DeadObjectException e) {
        } finally {
          ...
        }
        requestServiceBindingsLocked(r, execInFg);
        updateServiceClientActivitiesLocked(app, null, true);
    }

看到这里,在创建完成后,会调用requestServiceBindingsLocked方法执行bind操作

代码语言:txt
AI代码解释
复制
private final void requestServiceBindingsLocked(ServiceRecord r, boolean execInFg)
            throws TransactionTooLargeException {
        for (int i=r.bindings.size()-1; i>=0; i--) {
            IntentBindRecord ibr = r.bindings.valueAt(i);
            if (!requestServiceBindingLocked(r, ibr, execInFg, false)) {
                break;
            }
        }
    }

AMS进程中,会对bindings中的每一个IntentBindRecord尝试bind其进程。

代码语言:txt
AI代码解释
复制
if ((!i.requested || rebind) && i.apps.size() > 0) {
            try {
                bumpServiceExecutingLocked(r, execInFg, "bind");
                r.app.forceProcessStateUpTo(ActivityManager.PROCESS_STATE_SERVICE);
                r.app.thread.scheduleBindService(r, i.intent.getIntent(), rebind,
                        r.app.repProcState);
                if (!rebind) {
                    i.requested = true;
                }
                i.hasBound = true;
                i.doRebind = false;
            } catch (TransactionTooLargeException e) {
                ...
            } catch (RemoteException e) {
                ...
            }
        }

通过binder告诉ActivityThread,Service需要执行bind操作。然后在ActivityThread会调用到handleBindService方法。

代码语言:txt
AI代码解释
复制
private void handleBindService(BindServiceData data) {
        Service s = mServices.get(data.token);
        if (s != null) {
            try {
                data.intent.setExtrasClassLoader(s.getClassLoader());
                try {
                    if (!data.rebind) {
                        IBinder binder = s.onBind(data.intent);
                        ActivityManagerNative.getDefault().publishService(
                                data.token, data.intent, binder);
                    } else {
                        s.onRebind(data.intent);
                        ActivityManagerNative.getDefault().serviceDoneExecuting(
                                data.token, SERVICE_DONE_EXECUTING_ANON, 0, 0);
                    }
                    ensureJitEnabled();
                } catch (RemoteException ex) {
                }
            } catch (Exception e) {
            }
        }
    }

可以看到如果不是rebind,Service会执行Service.onBind()方法,把IntentBindRecord中的Intent告诉给Service谁bind它了。然后再告诉AMS publishService。

代码语言:txt
AI代码解释
复制
void publishServiceLocked(ServiceRecord r, Intent intent, IBinder service) {
        Intent.FilterComparison filter
                = new Intent.FilterComparison(intent);
        IntentBindRecord b = r.bindings.get(filter);
        if (b != null && !b.received) {
            b.binder = service;
            b.requested = true;
            b.received = true;
            for (int conni = r.connections.size() - 1; conni >= 0; conni--) {
                ArrayList<ConnectionRecord> clist = r.connections.valueAt(conni);
                for (int i = 0; i < clist.size(); i++) {
                    ConnectionRecord c = clist.get(i);
                    ...
                    try {
                        c.conn.connected(r.name, service);
                    } catch (Exception e) {
                    }
                }
            }
        }
    }

在publishServiceLocked中,对所有ConnectionRecord,把bind结果回调给其IServiceConnection。而IService的Stub在LoadApk中

代码语言:txt
AI代码解释
复制
private static class InnerConnection extends IServiceConnection.Stub {
            final WeakReference<LoadedApk.ServiceDispatcher> mDispatcher;
            public void connected(ComponentName name, IBinder service) throws RemoteException {
                LoadedApk.ServiceDispatcher sd = mDispatcher.get();
                if (sd != null) {
                    sd.connected(name, service);
                }
            }
        }

之后会通过主handler post一个Connection Runnable

代码语言:txt
AI代码解释
复制
private final class RunConnection implements Runnable {
            public void run() {
                if (mCommand == 0) {
                    doConnected(mName, mService);
                } 
            }
        }

最终真正执行到ServiceConnection中的onServiceConnected方法,完成最终绑定的过程

代码语言:txt
AI代码解释
复制
public void doConnected(ComponentName name, IBinder service) {
            if (service != null) {
                mConnection.onServiceConnected(name, service);
            }
        }

整个Service的bind过程就完成了!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
国内唯一!腾讯安全位居全球头部威胁情报厂商行列
近日,国际权威研究机构Forrester发布《2023年威胁情报服务厂商评估报告》(《External Threat Intelligence Services provider,2023》)(以下简称《报告》)。腾讯安全强势入围全球「Large」梯队代表性厂商,成为国内唯一一家进入世界级威胁情报厂商行列的公司。
腾讯安全
2023/03/15
5.3K0
国内唯一!腾讯安全位居全球头部威胁情报厂商行列
沙利文&头豹研报|腾讯安全威胁情报中心TIX位居领导者,创新指数排名第一!
9月5日,沙利文联合头豹研究院发布了《2022年中国威胁情报市场报告》(以下简称《报告》),深入研究了中国威胁情报市场的产品特点、发展现状、新动向及发展趋势,并分析了中国威胁情报市场的竞争态势和各厂商产品的综合竞争力表现。
腾讯安全
2022/09/05
1.7K0
沙利文&头豹研报|腾讯安全威胁情报中心TIX位居领导者,创新指数排名第一!
腾讯安全吴石:基于威胁情报构建免疫体系,助力企业稳步迈向智能安全新阶段
6月13日,腾讯安全、腾讯研究院联合IDC、《中国信息安全》杂志社、CIO时代、新基建创新研究院等多家权威机构、媒体共同发起“数字安全免疫力研讨论坛”,聚合产学研各界专家学者探讨数字安全建设新范式。论坛上,腾讯安全联合IDC发布“数字安全免疫力”模型框架,提出用免疫的思维应对新时期下安全建设与企业发展难以协同的挑战。
腾讯安全
2023/06/27
4760
腾讯安全吴石:基于威胁情报构建免疫体系,助力企业稳步迈向智能安全新阶段
腾讯安全SOC+能力图谱正式发布,助力政企构建闭环安全运营体系
随着云计算、人工智能、5G等新兴技术的融合发展,数字化转型正成为企业数字经济时代的重要发展路径。然而,数字化转型过程中IT架构的重塑、安全产品体系化能力不足带来的安全运营挑战,使得企业在业务突破上面临安全瓶颈。
腾讯安全
2022/11/24
1.5K0
腾讯安全SOC+能力图谱正式发布,助力政企构建闭环安全运营体系
一文透析腾讯安全威胁情报能力
“信息化时代进程的加快,使得网络安全建设成为国家与企业发展重要支柱。诸如网络入侵、黑客攻击等网络犯罪分子或者敌对势力的非法入侵,严重威胁电信、能源、交通、金融以及国防军事、行政管理等重要领域的基础设施安全。同时,国家也相继出台关于网络安全法律法规,如等保2.0、密码法等,对企业安全建设提出更高要求。”
腾讯安全
2019/11/04
5.9K0
一文透析腾讯安全威胁情报能力
腾讯安全与锐捷网络战略合作,威胁情报能力“被集成”
2月28日,腾讯安全和锐捷网络在北京联合举办“威胁情报”战略合作发布会。双方发布了一款集成了腾讯安全威胁情报的新一代防火墙,并举办战略合作签约仪式。
腾讯安全
2023/03/01
9500
腾讯安全与锐捷网络战略合作,威胁情报能力“被集成”
腾讯安全威胁情报品牌发布会召开 打造开放、共享的情报生态圈
近年来,全球网络安全威胁态势愈发严峻,安全事件层出不穷,企业传统的安全防御策略显得越来越力不从心。如何快速高效应对持续性的网络威胁,构建更具实战和联动能力的威胁情报能力,实现安全防御上的“化被动为主动”,已成为各行各业企业的刚需。
腾讯安全
2022/04/29
2.6K0
实战案例|聚焦攻击面管理,腾讯安全威胁情报守护头部券商资产安全
金融“活水”润泽千行百业,对金融客户来说,由于业务场景存在特殊性和复杂性,网络安全必然是一场“持久战”。如何在事前做好安全部署,构建威胁情报分析的防护体系至为重要,实现更为精准、高效的动态防御。
腾讯安全
2023/04/13
9760
实战案例|聚焦攻击面管理,腾讯安全威胁情报守护头部券商资产安全
腾讯安全升级三大原子能力,助力企业构建数字安全免疫力
数字化时代,企业如何治好“发展”与“安全”失调症?近日,腾讯安全、IDC、腾讯研究院等联合举办研讨论坛,发布“数字安全免疫力”模型框架,提出用免疫思维应对新时期下安全建设与企业发展难以协同的挑战。
腾讯安全
2023/06/16
3360
腾讯安全升级三大原子能力,助力企业构建数字安全免疫力
国际顶级行业研究机构发布:腾讯安全位居威胁情报服务市场领导者象限
北京时间11月30日,《IDC MarketScape:中国威胁情报安全服务(TISS)市场,2018厂商评估》报告正式发布,腾讯凭借腾讯云覆盖“云管端”的智慧安全体系,以及积累的海量大数据和庞大的黑色产业链情报库等优势,在产品和服务成熟度、行业影响力和持续投入能力等维度上位居入选的11家中国厂商前列, 进入了“领导者”象限。 (本图片来自IDC报告。按照IDC要求,对其他厂商做了隐私保护。) 近年来,随着物联网(IoT)、SDN和云计算等技术的兴起,企业数字资产的价值不断提升,全球企业所面临的网络安
腾讯云安全
2018/12/05
1.9K0
国际顶级行业研究机构发布:腾讯安全位居威胁情报服务市场领导者象限
共探数字化时代安全新思路,腾讯安全联合FreeBuf举办安全运营高峰论坛
近日,由网络安全行业门户FreeBuf主办,腾讯安全协办的「安全运营高峰论坛·深圳站」在深圳益田威斯汀酒店圆满举行。在这场网络安全行业盛会上,数百名来自全国各地的网安人共聚一堂,围绕“安全运营”、“新时代下威胁情报对企业的价值”展开讨论,共同探索数字化时代下的安全新思路。
腾讯安全
2023/06/14
3730
共探数字化时代安全新思路,腾讯安全联合FreeBuf举办安全运营高峰论坛
产业安全公开课:腾讯安全“重保”经验分享,助力企业构建防御体系
受重保防护时间和保障需求特殊性的影响,企业在重保的关键时期,往往面临着准备期难以控制、防护任务重、安全要求高的三大挑战。随着互联网新技术的发展,各种高级网络攻击不断迭代演化,攻击手法复杂多样。黑客会准备大量的兵器库以及全方位攻击手段,包括攻击情报库、0day库、敏感信息库等,以至于企业在重要时期保障中难以一已之力对抗庞大的黑产组织。
腾讯安全
2023/04/24
1.3K0
产业安全公开课:腾讯安全“重保”经验分享,助力企业构建防御体系
专家对话|揭秘威胁情报,如何助力企业提升安全免疫力?
近年来,随着IT环境日益复杂,漏洞数量持续增加,攻击手段和形式迅速迭代,安全事件层出不穷,企业改进安全策略和增强网络弹性的需求越来越迫切。
腾讯安全
2023/04/07
6830
专家对话|揭秘威胁情报,如何助力企业提升安全免疫力?
一图看懂|腾讯安全威胁情报中心(TIX)
随着网络安全威胁日益复杂多元,传统的安全防御策略面对层出不穷的新型、高级的网络威胁时,显得越来越力不从心。威胁情报,作为企业安全防御“化被动为主动”的利器,能够从事前、事中和事后全方位提高防御效率,一直以来备受行业青睐。
腾讯安全
2022/04/29
2.1K0
境外黑客叫嚣攻击我国视频系统,莫慌,绿盟威胁情报中心助您一臂之力
近日,绿盟威胁情报中心监控到,境外黑客组织宣称将于2月13日对我国视频监控系统实施网络攻击。黑客同时声称已掌握我国境内大量摄像头控制权限,并在pastebin网站上公开了部分受控目标,经核实发现这些受控目标均为广州市九安智能技术股份有限公司(以下简称为“九安”)生产的视频监控设备。经绿盟威胁情报中心的测绘,近一个月内,全国暴露在互联网上的“九安”视频设备共有2126个。
绿盟科技安全情报
2020/02/24
9830
境外黑客叫嚣攻击我国视频系统,莫慌,绿盟威胁情报中心助您一臂之力
腾讯安全威胁情报品牌发布会即将开幕 共话威胁情报生态共建之道
近年来,全球网络安全威胁态势愈发严峻,安全事件层出不穷。2021年5月,美国最大的成品油管道运营商科洛尼尔因受到勒索软件攻击,被迫关闭多个关键燃油网络,致使国家进入紧急状态;同年11月,加拿大最大城市多伦多也遭勒索软件攻击,导致公共交通IT系统几乎全部瘫痪。
腾讯安全
2022/04/26
1.1K0
又双叒叕入选!腾讯安全NDR连续四年获Gartner认可
近日,全球权威研究机构 Gartner发布了2023年《Emerging Tech: Security — Adoption Growth Insights for Network Detection and Response》(《新兴技术:安全-网络检测与响应的采用增长洞察》),腾讯安全连续四年被列为NDR市场代表供应商。
腾讯安全
2023/05/23
8490
又双叒叕入选!腾讯安全NDR连续四年获Gartner认可
腾讯安全专家支招:远程办公期间,企业如何做好网络安全防护?
新冠肺炎疫情期间,大量企业依托云实现了远程办公、信息发布及各类研发业务的快速上线和迭代。在享受云带来的业务弹性高效交付的同时,企业面临的安全风险也如影随形,云服务使用过程中的不当安全配置,很容易成为黑客的重点“攻击面”。
腾讯安全
2020/02/28
9210
腾讯安全专家支招:远程办公期间,企业如何做好网络安全防护?
企业如何打造“秒级响应”的威胁情报系统?
伴随产业数字化转型持续深入,各类高级和未知威胁迭代演化,企业对于威胁情报的需求也日益升高。据全球最大信息安全培训机构SANS调查数据显示,有80%的组织认为自己从威胁情报中获益。
腾讯安全
2020/04/10
2K0
企业如何打造“秒级响应”的威胁情报系统?
企业远程办公都有哪些安全风险?腾讯安全专家为您一一剖析
新冠肺炎疫情期间,大量企业依托云实现了远程办公、信息发布及各类研发业务的快速上线和迭代。在享受云带来的业务弹性高效交付的同时,企业面临的安全风险也如影随形,云服务使用过程中的不当安全配置,很容易成为黑客的重点“攻击面”。 针对疫情期间的网络安全动向,腾讯天幕团队联合腾讯云安全、桌面安全、云鼎实验室、安全专家咨询等团队,共同推出了针对云上业务的网络攻击趋势解析,并为企业如何做好远程办公的网络安全防护进行支招。 医疗、教育、电商行业 成黑客重点攻击对象 春节前期是大多数企业的“封网”时期,也正是黑客的“骚动期
腾讯云安全
2020/03/09
1.1K0
推荐阅读
国内唯一!腾讯安全位居全球头部威胁情报厂商行列
5.3K0
沙利文&头豹研报|腾讯安全威胁情报中心TIX位居领导者,创新指数排名第一!
1.7K0
腾讯安全吴石:基于威胁情报构建免疫体系,助力企业稳步迈向智能安全新阶段
4760
腾讯安全SOC+能力图谱正式发布,助力政企构建闭环安全运营体系
1.5K0
一文透析腾讯安全威胁情报能力
5.9K0
腾讯安全与锐捷网络战略合作,威胁情报能力“被集成”
9500
腾讯安全威胁情报品牌发布会召开 打造开放、共享的情报生态圈
2.6K0
实战案例|聚焦攻击面管理,腾讯安全威胁情报守护头部券商资产安全
9760
腾讯安全升级三大原子能力,助力企业构建数字安全免疫力
3360
国际顶级行业研究机构发布:腾讯安全位居威胁情报服务市场领导者象限
1.9K0
共探数字化时代安全新思路,腾讯安全联合FreeBuf举办安全运营高峰论坛
3730
产业安全公开课:腾讯安全“重保”经验分享,助力企业构建防御体系
1.3K0
专家对话|揭秘威胁情报,如何助力企业提升安全免疫力?
6830
一图看懂|腾讯安全威胁情报中心(TIX)
2.1K0
境外黑客叫嚣攻击我国视频系统,莫慌,绿盟威胁情报中心助您一臂之力
9830
腾讯安全威胁情报品牌发布会即将开幕 共话威胁情报生态共建之道
1.1K0
又双叒叕入选!腾讯安全NDR连续四年获Gartner认可
8490
腾讯安全专家支招:远程办公期间,企业如何做好网络安全防护?
9210
企业如何打造“秒级响应”的威胁情报系统?
2K0
企业远程办公都有哪些安全风险?腾讯安全专家为您一一剖析
1.1K0
相关推荐
国内唯一!腾讯安全位居全球头部威胁情报厂商行列
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档