静默安装
首页
文章
漏洞
SRC导航
内容精选
输入关键词搜索
APP 登录| 注册
【技术分享】另外一种静默安装APP“黑科技”分析
阅读量 80017 | 稿费 500
分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2016-12-02 17:20:52
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
直接开启辅助服务,因为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
本文由安全客原创发布
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/85041
安全客 - 有思想的安全新媒体
安全知识
ssssssshg 分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
2018安恒杯11月赛-Web&Crypto题解
2018-11-26 10:02:02
U2F安全协议分析
2018-11-24 10:00:48
二十年重回首——CIH病毒源码分析
2018-11-23 15:20:19
Cookie Maker:隐藏在Google Docs中的恶意网络
2018-11-23 14:30:40
|发表评论
发表你的评论吧
昵称
大表哥
换一个
|评论列表
还没有评论呢,快去抢个沙发吧~
ssssssshg
这个人太懒了,签名都懒得写一个
文章
1
粉丝
0
TA的文章
【技术分享】另外一种静默安装APP“黑科技”分析
2016-12-02 17:20:52
输入关键字搜索内容
相关文章
360 | 数字货币钱包APP安全威胁概况
以太坊智能合约安全入门了解一下(下)
对恶意勒索软件Samsam多个变种的深入分析
360 | 数字货币钱包安全白皮书
Json Web Token历险记
揪出底层的幽灵:深挖寄生灵Ⅱ
简单五步教你如何绕过安全狗
热门推荐
安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66 0daybank
文章评论