热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【技术分享】另外一种静默安装APP“黑科技”分析

作者:ssssssshg预估稿费:500RMB(不服你也来投稿啊!)投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿0x01 引子我们知道,具有静默安装应用能力的APP,一般默认是

http://p7.qhimg.com/t01f30b71772e96cd58.png

作者:ssssssshg

预估稿费:500RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

0x01 引子

我们知道,具有静默安装应用能力的APP,一般默认是手机厂商的系统应用,这类应用天生就拥有system权限,而第三方应用想要拥有静默安装app能力,只能在root后的手机上向su申请root权限,那么是否有非root权限下静默安装app的方法呢?

第三方应用中,有静默安装APP需求的一般是市场类应用,如360手机助手、百度手机助手和腾讯应用宝等,市场类应用为了让用户节约频繁点击操作的时间,提高用户体验,在安装和升级大量app不太希望有太多的弹框确认操作影响用户,而各家都独避蹊径实现了非root权限静默安装app,目前的方法都是使用AccessibilityService辅助服务进行自动点击,根据app的安装步骤来一步步实现app的静默安装。

AccessibilityService辅助服务是google为使用手机有障碍的用户提供的服务,第三方APP必须通过开启这个服务,才能让手机模拟用户点击,app使用这个功能会明确提示用户,如某流行的第三方市场应用。

http://p9.qhimg.com/t013187573f3b77be83.png

 另外还可以通过adb shell命令

”settings put secure enabled_accessibility_services /< ACCESSIBILITY_SERVICES_NAME>”和”settings put secure accessibility_enabled 1”

直接开启辅助服务,因为adb shell是具有”settings”的执行权限的:

 http://p4.qhimg.com/t01939517a671834ff0.png


0x02 另一种静默安装APP的方法

那既然拥有了adb shell的权限,除了开启辅助服务实现静默安装,我们还能不能使用一种更简单的方法呢?

大家知道,adb是能远程连接的,以前各种手机和智能设备都默认开启了adb的远程连接造成各种安全漏洞,如果安卓开启了调试模式,我们也可以事先通过USB调试使用tcpip命令开启这个远程调试功能,如“adb tcpip 5555”,开启5555端口的远程调试绑定,这时候不管是什么终端只要能使用合法的调试协议都是能使用adb的,所以手机上的app也能使用远程调试功能,这里我们不需要重复造轮子,直接使用Adblib这个开源库就能让app拥有adb远程调试的能力。无代码,不信服:

Socket socket = new Socket("127.0.0.1", 5555);
AdbCrypto crypto = AdbCrypto.loadAdbKeyPair(new AdbBase64() {
    @Override
    public String encodeToString(byte[] data) {
        return Base64.encodeToString(data, Base64.DEFAULT);
    }
}, keyPair);
connection = AdbConnection.create(socket, crypto);
connection.connect();
AdbStream stream = connection.open("shell:pm install -r /storage/emulated/0/ HookVulnerable.apk");

http://p1.qhimg.com/t014e86cf4cfb865d4b.png

如图,APP在本地就具备了静默安装的能力

0x03 adb协议简要分析

目前安卓的adb调试协议启用了设备认证,并使用了RSA非对称加密!我来简单描叙下ADB协议的流程:

1.调试设备连接手机,手机向调试设备发送AUTH TOKEN报文,这里会包含源自/dev/urandom的20字节的随机token。

2.调试设备用自己的私钥对该随机token进行签名(SHA1+RSA),放在发往手机的SIGNATURE报文中。

3.手机检查签名,如果正确,响应以CONNECT报文,否则向主机发送新的AUTH TOKEN报文,提供新的随机token。

4.如果调试设备已经确认了所有公私钥对,则向手机发送AUTH RSAPUBLICKEY报文,包含一个调试设备公钥。

5.手机接收到调试设备公钥后弹出信息框,询问是否允许(或永久允许),该信息框中一般会显示调试设备公钥的指纹(MD5) 

6. 调试设备的公钥最后保存在手机端的/data/misc/adb/adb_keys

http://p7.qhimg.com/t016387a542b8d733a9.png

看到这里我再把Adblib简要分析下,作者将adb源码里的几个重要的结构用JAVA实现,主要是

1.adb协议的标志头(OKAY,CLSE,OPEN,AUTH等)

2.adb消息的结构(命令、参数、payload长度,payload的checksum、magic以及payload)

3.adb加密方式(RSA加密消息)

大致通信过程如下:

http://p2.qhimg.com/t01cd2a7bbe0eb4a525.png

因此,Adblib只是在APP端把adb协议调试设备端的流程重新实现了而已。


0X04安全思考

文章写到这里,我就不再做更深入的分析了。关于安全问题,每个人都会有自己的思考,也许产品人员想到的是用户体验,而安全人员希望寻找里面的漏洞,黑产木马病毒制造者想到的则是会是怎么作恶,


0x05 参考

https://github.com/cgutman/AdbLib

https://nelenkov.blogspot.com/2013/02/secure-usb-debugging-in-android-422.html


推荐阅读
  • 本文介绍了如何使用MATLAB调用摄像头进行人脸检测和识别。首先需要安装扩展工具,并下载安装OS Generic Video Interface。然后使用MATLAB的机器视觉工具箱中的VJ算法进行人脸检测,可以直接调用CascadeObjectDetector函数进行检测。同时还介绍了如何调用摄像头进行人脸识别,并对每一帧图像进行识别。最后,给出了一些相关的参考资料和实例。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在序列化时如何对SnakeYaml应用格式化,包括通过设置类和DumpSettings来实现定制输出的方法。作者提供了一个示例,展示了期望的yaml生成格式,并解释了如何使用SnakeYaml的特定设置器来实现这个目标。对于正在使用SnakeYaml进行序列化的开发者来说,本文提供了一些有用的参考和指导。摘要长度为169字。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
  • IDEA窗口文件上面的类导航栏不见了的解决办法
    本文介绍了解决IDEA窗口文件上面的类导航栏不见的问题的方法,通过在File-Settings-Editor-General-Editor Tabs-Tab placement中选择top即可解决该问题。 ... [详细]
  • 解决IDEA配置xml文件头报错的方法
    本文介绍了解决IDEA配置xml文件头报错的方法,包括了具体的解决方案和步骤。通过本文的指导,读者可以轻松解决这个问题并正常使用IDEA进行开发工作。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
author-avatar
林君滨__
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有