乐安全软件锁实现原理分析

流媒体影视爆款预测数据集6000部剧集电影21特征 本数据集模拟流媒体平台影视内容特征,包含6000部剧集、电影与纪录片样本、21个字段,覆盖内容类型、题材、出品国家、上映年份与月份、内容分级、是否平台原创、是否系列续集、改编来源、时长、季数、明星影响力、制作与营销预算、观众评分、社交热度等维度。提供top10_hit分类目标(进入平台榜单前十并保持4周以上)与views_28d_m回归目标(上线28天观看量),结果字段独立分离,便于练习避免目标泄漏。数据干净完整、无缺失值、无需表关联,直接可用于分类、回归、探索性分析,以及发布档期选择、题材与续集表现、单位营销成本观看效率等研究,适合影视行业分析、推荐系统与机器学习教学。说明:本数据为Python生成的合成数据,仅反映生成规则,不含真实节目与个人信息。许可:CC0公有领域,可自由使用与二次分发。 立即下载

应广大网友的要求,笔者近期对乐安全的软件锁进行了分析,下面简单就一篇博文向大家介绍一下乐安全软件锁的实现原理。测试的乐安全版本为V4.2.4。

先说下结论,如果有兴趣的同学可以继续往下看分析。乐安全在本地进程得到了AMS的Bp,直接调用其getTasks方法,每隔一秒检测一下当前topActivity是否是需要被锁定的,如果是的话,就弹出一个解锁界面盖住本该启动的APP。

下面进行分析

首先要爆料的是,乐安全做的实在是有点不小心,打了些对于破解有用的log出来,降低了破解的难度。比如下面的:

 

 

这是在触发软件锁的时候打出的log,给了我们启发,通过反编译APK文件后,我们很快定位到了相关的代码。

   while (AppCheck.isRun)

        try

        {

          Thread.sleep(1000L);

          List localList1 = AppCheck.a(AppCheck.this).getTasks(1, 0, null);

          if (localList1.size() > 0)

          {

            AppCheck.a(AppCheck.this, ((ActivityManager.RunningTaskInfo)localList1.get(0)).topActivity.getPackageName());

            if (!AppCheck.c(AppCheck.this).equals(AppCheck.b(AppCheck.this)))

            {

              Log.i("AppCheck", "old" + AppCheck.c(AppCheck.this) + "------------new:" + AppCheck.b(AppCheck.this));

              String[] arrayOfString3 = new String[3];

              arrayOfString3[0] = "runningTask";

              arrayOfString3[1] = AppCheck.b(AppCheck.this);

              arrayOfString3[2] = AppCheck.c(AppCheck.this);

              a(arrayOfString3);

              AppCheck.b(AppCheck.this, AppCheck.b(AppCheck.this));

            }

          }

 

可以看到,乐安全在这里做了一个循环操作,首先sleep一秒,然后直接调用getTasks()方法得到一个List。我们先看下AppCheck.a(AppCheck.this)返回的是什么。由于jd反编译的不全面,下面要po上一个smali的代码片段。

.method static synthetic a(Lcom/lenovo/safecenter/utils/AppCheck;)Landroid/app/IActivityManager;

    .locals 1

    .parameter "x0"

 

    .prologue

    .line 21

    iget-object v0, p0, Lcom/lenovo/safecenter/utils/AppCheck;->a:Landroid/app/IActivityManager;

 

    return-object v0

.end method

 

这里可以看到a(AppCheck.this)返回的是一个IActivityManager的对象。这里可能大家会有一个疑问,IActivityManager是hide的,为什么可以在这里被调用。@安卓安全小分队的大牛讲师认为乐安全很有可能自己编译了一套framework.jar使得乐安全在编译阶段顺利通过,并且在手机上也能正常运行,关于这一部分的机理,如果大家觉得有必要,我们可以在以后的时间作为一个专题来讲解。

在这里笔者对之前的猜测做下更正,乐安全并不是通过注入方式来调用AMS的一个方法,而是简单的在本地得到了AMS的Bp,也就是这个IActivityManager的对象。下面再po一个smali的代码段来说明这个IActivityManager是如何得到的。

.line 38

    invoke-static {}, Landroid/app/ActivityManagerNative;->getDefault()Landroid/app/IActivityManager;

 

    move-result-object v0

 

iput-object v0, p0, Lcom/lenovo/safecenter/utils/AppCheck;->a:Landroid/app/IActivityManager;

 

通过直接调用ActivityManagerNative的getDefault静态方法就获得了这个IActivityManager对象,很简单。

好,回到前面的分析阶段。我们已经知道了,乐安全通过调用AMS的getTasks方法得到了tasks的list,到了第一if分支(参考前面贴出的代码)。

首先检查的是新启动的activity是否与前一个activity属于同一包。说白了就是如果用户已经在使用敏感APP了,乐安全就不要再去搞软件锁了,不然用户启动一个activity就有一锁出来不的把人烦死。

但是如果不属于同一个包,就进入了这个分支,先打了个被我们抓住尾巴的log,然后把old的包名和new的报名放进数组交给了a()方法。我们看看a()里都做了什么

    private void a(Object[] paramArrayOfObject)

    {

      if (paramArrayOfObject[0].equals("runningTask"));

      for (String str = "com.lenovo.safecenter.activityswitch"; ; str = "com.lenovo.safecenter.activityswitch2")

      {

        Log.i("AppCheck", paramArrayOfObject[0] + "------------action:" + str + " " + paramArrayOfObject[1] + " " + paramArrayOfObject[2]);

        Intent localIntent = new Intent(str);

        localIntent.putExtra("newPkg", (String)paramArrayOfObject[1]);

        localIntent.putExtra("oldPkg", (String)paramArrayOfObject[2]);

        AppCheck.g(AppCheck.this).sendBroadcast(localIntent);

        Settings.System.putString(AppCheck.g(AppCheck.this).getContentResolver(), "safe_input_method", "com.android.inputmethod.latin/.LatinIME");

        Log.i("AppCheck", paramArrayOfObject[0] + "------------end");

        return;

      }

}

 

很简单,把old package和new package用广播给发出去了。我们到接收端看一下如何处理。

乐安全的assets包里有一个LenovoSafeBox429.apk,打开后在里面发现一个MonitorAppService的类,他在onCreate的时候注册了一个BroadcastReceiver,接收名为com.lenovo.safecenter.activityswitch的action如下。

 

 

  public void onCreate()

  {

    this.getBroadcast = false;

    this.mContext = this;

    this.pattern = Pattern.compile("(.*)(\\={1})(.*)(//*)");

    this.runtime = Runtime.getRuntime();

    this.filter = new IntentFilter();

    this.filter.addAction("android.intent.action.SCREEN_OFF");

    this.filter.addAction("android.intent.action.SCREEN_ON");

    this.filter.addAction("com.lenovo.safecenter.activityswitch");

    this.filter.addAction("com.lenovo.safebox.lockscreen");

    this.lastPkg = "";

    registerReceiver(this.receiver, this.filter);

    if (canGetPassword())

    {

      if (!this.watchAppOpen)

        watchAppStart();

      if (!this.getBroadcast)

      {

        this.mTimer = new Timer(true);

        restartTimer();

      }

}

 

在receiver的onReceive函数里,这个receiver做了下面的事情。我们捡主要的说

          label498: if ((MonitorAppService.this.lastPkg == null) || (MonitorAppService.this.lastPkg.equals("com.lenovo.safebox")) || (MonitorAppService.this.lastPkg.equals(str)) || (!MonitorAppService.this.checkList.contains(str)) || (MonitorAppService.isLocked))

            continue;

          Intent localIntent = new Intent(MonitorAppService.this.mContext, LockScreenActivity.class);

          localIntent.putExtra("pkg", str);

          localIntent.addFlags(268435456);

          if (MonitorAppService.DEBUG)

            Log.i("MonitorAppService", "Lock in Broadcast TopTask :" + str);

          MonitorAppService.this.mContext.startActivity(localIntent);

关键的位置就是到一个list里查看当前启动的package是不是我要锁住的,如果是锁住的,那就直接启动一个activity盖在上面,就是我们看到的效果了。

PS:有的网友提到乐安全阻止了程序的正常启动,相关进程不会被启动。但是通过我们的观察,进程是已经被启动了的 ,如下图。

需要关注的是,AMS首先启动了被锁软件。Start了它的activity以及process(最开始的两条log),然后才会执行我们之前分析的部分,然后LockScreenActivity才被启动。这个时候可以通过ps命令查看当前进程。我们发现了被锁软件:

 

 

新浪微博@安卓安全小分队

AI大模型安全架构落地解决方案.pptx 立即下载

相关推荐

国央企创新负责人如何提升企业创新与技术合作的精准度?.docx

国央企创新负责人如何提升企业创新与技术合作的精准度?

软件加密锁原理

软件狗[Dongles]1、认识软件狗。[首先我对软件狗作一简单介绍,在后面我们将对各种软件狗的加密和解密做详细的讲解。]软件狗是插在微机并行口上的一个软件保护装置,它包括主机检查程序和密钥(也称加密盒)两部分。主机检查程序就是前面说的加密代码的一部分,加密盒是用来存放密码的。一般来说,软件狗插在并行口上,不会影响打印机的正常工作。常见的软件狗加密盒外形,如两个一公一母的D行25针连接器倒

libby的专栏 6996

科技中介服务机构在协助企业对接科研成果时,如何提升服务响应速度与专业化水平.docx

科技中介服务机构在协助企业对接科研成果时,如何提升服务响应速度与专业化水平

应用锁(AppLocker)原理及代码实现

最近工作上要用到应用锁(AppLocker),早上装了个试玩了一下,下午花了2个小时捣鼓出来一个demo (基于android 6.0),简单分享一下。   免责声明:这篇文章纯粹是个人YY,未参考或反编译任何商业app。   所谓应用锁,说白了就是在监测到目标app启动时额外起一个锁屏界面把它盖住。这种方式的缺点是显而易见的,无法100%保证盖住,有时候会先闪出一个app启动界面,然后才

飞久 1万+

啊算法撒上v的咋撒方式

啊算法撒上v的咋撒方式

科技中介服务机构如何构建更加专业化的技术服务评价体系?.docx

科技中介服务机构如何构建更加专业化的技术服务评价体系?

应用及系统权限管理实现-基于源码android 7.1.1.r13

应用及系统权限管理实现-基于源码android 7.1.1.r13 一、   Android权限管理的相关服务及架构 1.       权限管理涉及的服务包括activity: permission:[android.os.IPermissionController] ;[android.app.IActivityManager];package: [android.content.pm.IP

wuawua1的博客 1859

高校技术转移办公室人员如何利用智能工具简化技术成果的推介与转化流程?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

图腾柱无桥PFC变换器+平均电流控制+PI电压双闭环前馈控制设计(Simulink仿真实现)

图腾柱无桥PFC变换器+平均电流控制+PI电压双闭环前馈控制设计(Simulink仿真实现)内容概要:本文详细介绍了图腾柱无桥PFC变换器的设计与Simulink仿真实现,重点围绕平均电流控制和PI电压双闭环前馈控制策略展开。通过构建完整的仿真模型,分析了系统在不同工况下的动态响应特性与稳态性能,验证了所设计控制策略的有效性与鲁棒性。文章涵盖了主电路拓扑结构、控制环路设计、关键参数计算及仿真结果分析等内容,为从事电力电子变换器研发的科研人员提供了实用的技术参考与实现路径。; 适合人群:具备电力电子与自动控制理论基础,从事新能源、电源设计或相关领域研究的研发人员及高校研究生。; 使用场景及目标:①掌握图腾柱无桥PFC变换器的工作原理与建模方法;②学习平均电流控制与双闭环前馈控制的实现技巧;③应用于高效率电源系统设计与科研项目仿真验证; 阅读建议:建议结合Simulink仿真模型同步操作,深入理解各控制模块的设计逻辑与参数整定过程,并通过调整工况测试系统性能,强化理论与实践结合能力。

solong 图像处理器 - v3.4 - 吾爱大佬 by 金牌软件 .exe

solong 图像处理器 _ v3.4 _ 吾爱大佬 by 金牌软件 .exe

西门子 S7 PLC 对接 MES 系统:HTTP/JSON 通信实施指南

内容概要:本文介绍了通过IGT-DSER智能网关实现西门子S7-1500 PLC(采用优化访问DB数据块)与MES系统的对接方案。重点阐述了使用S7-PLUS标签方式读取PLC变量标签数据,结合网关边缘处理能力进行数据换算与JSON封装,并通过HTTP/GET或POST方式将数据上传至MES系统的技术路径。文中详细说明了网络配置、变量映射、触发逻辑设置、JSON结构生成、联调验收流程及常见故障排查方法,强调无需修改PLC程序即可完成集成,适用于工业现场快速部署。; 适合人群:自动化工程师、MES实施工程师、工业网络与设备运维人员; 使用场景及目标:①实现西门子S7-1500等支持优化DB的PLC与MES系统高效对接;②在不改动原有PLC程序的前提下完成数据采集与上传;③通过标准化JSON格式与HTTP协议实现与各类业务平台的数据交互;④提升系统集成效率并确保数据传输的准确性与可监控性; 阅读建议:此资源以实际工程案例为基础,建议读者结合IGT-DSER网关参数管理软件操作实践,重点关注标签配置、触发条件设定与JSON字段映射的细节,并在测试环境中验证请求与响应闭环后再投入正式运行。

两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容)

内容概要:本文介绍了“两路半桥LLC谐振变换器软开关Simulink仿真”项目,重点研究了谐振参数差异与分裂电容结构对系统性能的影响。该仿真模型基于Matlab/Simulink平台构建,旨在深入分析LLC谐振变换器在软开关条件下的工作特性,包括谐振频率匹配、零电压开通(ZVS)与零电流关断(ZCS)的实现机制,以及分裂电容对电压均衡性和系统稳定性的作用。通过调节谐振腔关键参数(如电感、电容值)和开关频率,全面评估变换器在不同负载与输入电压条件下的效率、电压增益特性及动态响应能力,进而验证软开关技术的有效性与系统设计的灵活性。; 适合人群:从事电力电子、电源变换器设计与仿真的高校研究生、科研人员及企业研发工程师,具备一定的电路理论、电力电子技术基础和Simulink仿真操作能力。; 使用场景及目标:①用于LLC谐振变换器相关的课程设计、毕业课题或科研项目的仿真验证;②深入理解软开关技术在高频高效电源转换中的应用原理;③优化分裂电容结构下的参数匹配与控制策略,以提升变换器的整体性能。; 阅读建议:在学习过程中应结合电路拓扑结构分析与仿真模型操作,重点关注谐振参数变化对软开关实现的影响,建议动手修改参数并观察关键波形的变化,以深化对LLC变换器工作机理的理解。

PSIM-串联谐振半桥LLC开关电源+PFM变频闭环控制【仿真+计算书+参考文献】

内容概要:本文详细介绍了PSIM-串联谐振半桥LLC开关电源结合PFM变频闭环控制的设计与仿真,系统阐述了LLC谐振变换器的建模方法、软开关实现机制及基于变频控制的闭环调节策略。资源包涵盖完整的PSIM仿真模型、详细的计算书与参考文献,重点展示了在宽负载范围内通过调节开关频率实现高效能运行的技术路径。系统利用串联谐振腔的频率特性,在不同负载条件下实现零电压开通(ZVS)或零电流关断(ZCS),显著降低开关损耗;同时,闭环控制通过反馈输出电压动态调整工作频率,确保输出稳定性和动态响应性能。该设计特别适用于对高效率、高功率密度有严格要求的应用场景。; 适合人群:具备电力电子、电源设计或自动化相关背景的本科高年级学生、研究生及从事开关电源研发的工程师。; 使用场景及目标:①掌握LLC谐振变换器的工作原理及其在PSIM中的建模与仿真方法;②学习PFM(脉冲频率调制)变频控制在开关电源中的闭环实现技术;③应用于高频高效电源系统的设计与优化,如通信电源、新能源变换器、车载充电机等;④为科研项目或毕业设计提供完整的仿真参考、计算依据与技术支持。; 阅读建议:建议读者结合提供的PSIM仿真文件、计算书与参考文献同步操作,深入理解谐振参数设计、变频控制逻辑与闭环反馈的实现细节,重点关注开关频率与增益曲线的关系、谐振元件参数匹配对效率的影响,并通过改变输入电压和负载条件验证系统的稳态与动态性能表现。

储能双向Buck-Boost+模型预测电流控制+电压下垂控制仿真【附参考文献】(Simulink仿真实现)

内容概要:本文介绍了基于Simulink的2.5kW储能双向Buck-Boost变换器仿真模型,融合模型预测电流控制与电压下垂控制策略,旨在实现储能系统的高效能量管理和稳定运行。该仿真系统深入探讨了双向功率流动的控制机制,通过模型预测控制(MPC)提升电流环的动态响应速度与稳态精度,有效实现充放电过程中的电流精确跟踪;同时引入电压下垂控制策略,使多个储能单元在无需通信的情况下实现并联均流,增强了系统的可扩展性与可靠性。整个控制架构适用于微电网、直流配电系统及分布式储能等应用场景,文中不仅提供了完整的Simulink仿真模型,还附有详尽的参考文献,便于读者复现、验证与进一步优化控制算法。; 适合人群:具备电力电子、自动控制理论及新能源系统基础知识的研究生、科研人员,以及从事储能系统、微电网或电力变换器开发的工程技术人员。; 使用场景及目标:①研究双向Buck-Boost变换器在储能系统中的充放电控制策略与能量双向流动特性;②掌握模型预测控制在电流环设计中的实现方法及其对系统动态性能的提升作用;③理解并实现基于下垂特性的电压控制策略,解决多变换器并联运行时的均流问题;④构建面向微电网与分布式能源系统的能量管理仿真平台,开展稳定性、鲁棒性及可扩展性验证。; 阅读建议:建议读者结合MATLAB/Simulink环境动手搭建与调试仿真模型,重点关注模型预测控制器的代价函数设计、权重系数整定以及下垂控制参数的匹配,通过对比不同工况下的仿真结果深入理解控制逻辑。同时,应仔细研读所附参考文献,从理论层面掌握MPC与下垂控制的数学基础,从而实现从仿真验证到实际工程应用的顺利过渡。

国央企创新负责人在推动技术转化过程中,如何更高效地识别高质量专利并实现价值转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

两相交错并联BuckBoost变换器仿真模型(Simulink仿真实现)

内容概要:本文详细介绍了两相交错并联Buck-Boost变换器的Simulink仿真模型构建与控制策略研究。该变换器采用两相交错并联拓扑结构,有效降低了输入与输出电流纹波,提升了系统效率与功率密度。文中系统阐述了其主电路拓扑、工作原理及基于状态空间平均法的小信号数学建模过程,并据此设计了电压-电流双闭环PI控制器,以实现输出电压的精确调节与优良的动态响应性能。仿真模型在Simulink中完整搭建,涵盖了主功率回路、PWM脉冲生成、驱动逻辑及闭环控制系统,通过设置负载突变等工况验证了控制策略的有效性,结果表明系统响应速度快、抗干扰能力强。此外,文档还探讨了该变换器与LLC谐振变换器、PFC电路等其他电力电子装置的协同仿真应用,凸显其在新能源发电、储能系统及电动汽车等领域的广阔应用前景。; 适合人群:具备电力电子技术基础,熟悉MATLAB/Simulink仿真环境,从事电源设计、新能源系统开发或相关领域研究的研发人员及高校研究生。; 使用场景及目标:①掌握两相交错并联Buck-Boost变换器的工作原理、建模方法与纹波抑制机制;②学习并实践基于状态空间平均法的系统建模与双闭环PI控制器的设计、参数整定技巧;③应用于储能系统、电动汽车车载充电机、光伏逆变器等需要高效、低纹波直流变换的系统仿真与原型开发。; 阅读建议:建议读者结合提供的Simulink模型文件,边操作边深入理解文档中的电路拓扑、控制逻辑与参数设置,重点关注双闭环控制的实现细节、PI参数整定过程及仿真结果分析,有条件者可进一步开展硬件在环(HIL)测试,以深化对理论与实践结合的理解。

上一篇: android通知栏广告
下一篇: 是广告还是病毒
鲶鱼团队
博客等级 码龄14年 36粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值