Android高级之十三讲之安全方案

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Android是开源的,内部API相对比较透明,因此App的威胁会多一些,了解一些安全知识,有助于用户体验和产品稳定性。



本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!


Android是开源的,内部API相对比较透明,因此App的威胁会多一些,了解一些安全知识,有助于用户体验和产品稳定性。

1、App组件方面,慎用android:export=true(Activity、Service、BroadcastReveiver如果组件有超过一个intent-filter则默认为true;ContentProvider在16即4.1系统及以下默认为true,以上为false;),防止被程序恶意调用;对放出的组件,进行权限限制和数据校验,Intent设置包名。

2、WebView使用webView.addJavaScriptInterface的方式注入开放给H5的接口,使用注解的方式@JavaScriptInterface来标明接口。

4.2以下防攻击方案:http://blog.csdn.net/zhouyongyang621/article/details/47000041

3、防止反编译,造成接口被攻击、数据泄露,进行混淆加固处理;同时可以将apk的md5发给服务端进行校验,如果二次打包,则可以分辨出;用Cipher对数据库包括SharePreference加密,后者使用MODE_PRIVATE;核心功能写入so,通过jni调用

4、防止DNS劫持,使用https加密传输;升级和下载时往往容易被劫持链接而下载别的App,同时防止被hook导致安装其他路径的安装包。升级和下载使用https,安装时要比较下载包的Md5与服务端返回是否一致、包名是否一致来保证下载包正常;将数据设置失效时间。

5、接口数据校验,注意频繁请求某一接口、虚拟注册、验证码接口被刷,防止服务端被拖垮。

6、打包上传后验证签名信息,下载应用市场apk,解压出META-INF下CERT.RSA文件,使用如下命令查看签名

keytool -printcert -file META-INF/CERT.RSA

7、数据传递
 Collections.unmodifiableList(list);
上面的方法可使当前list无法再添加对象,保持数据传递的安全性。

8、某些敏感Api为防止hook,可以设置setAccessiable(false),使得无访问权限来保证业务层实现安全。

9、设置包名和权限,防止部分攻击(仅打开此包下,具备此权限的页面)

Intent intent = new Intent("com.android.settings.action.SWITH_AGED_MODE");
intent.setPackage("com.android.settings");
sendBroadcast(intent,"com.android.settings.permission.SWITH_SETTING");
并对四大组件中传递的intent进行合法性校验。

10、防御措施一般如下三种:

第一、寄托在破坏攻击者的工具。第二、寄托在Java层代码逆向、调试和阅读的难度。第三、寄托在c层代码逆向、调试和阅读的难度上。

  11、对于动态注册的广播,尽量使用LocalBroadcastReceiver来进行本地注册,这样只在本应用内通信;如果使用registerReceiver()则要做好权限控制。

附硬件信息查询方式,通过拨号盘输入如下参数即可

12、onPause时,通过ProcessManager.getRunningAppProcess来检测自己是否位于栈顶,防止第三方应用悬浮

13、使用TrustMangerFactory导入证书,自签校验

14、getRecentTask,使自己的进程不可见

在AndroidManifest.xml配置android:exclueFromRecents=false或Intent设置此flag,仅5.0以下有效,以上底层已经封掉getRecentTask方法

15、android:allowBackup="false" 防止设为true后,通过 adb backup 和adb restore来备份和恢复数据。

16、敏感信息不要使用socket通信,使用可以检验身份的方式会更好。

通用功能

代码 功能描述 备注
*#*#7780#*#* 恢复手机出厂设置,清除应用数据以及设置,移除手机绑定的谷歌账号,卸载下载的应用 不会删除系统内置应用,不会删除SD Card上的文件
*2767*3855# 重新安装手机操作系统,恢复手机出厂状态,删除包括安装在内部存储上的所有APP并清除设置  
*#*#197328640#*#* 进入调试模式  
*#*#4636#*#* 电话基本信息,电话使用情况,电池信息  
*#*#34971539#*#* 摄像头系统信息 注意不要点击不要点击升级摄像头系统信息,小心1秒变砖
*#*#7594#*#* 改变电源按键的功能,允许直接关机而不是询问用户选择操作(无声模式,飞行模式,关机)  
*#*#273283*255*663282*#*#* 备份所有的媒体文件,打开文件拷贝界面让你能够备份图片,视屏和音频等媒体文件  
*#*#8255#*#* 启动GTalk服务监控  
*2767*4387264636* 显示产品信息  
*#0228# 显示电池状态  
*#12580*369* 软件和硬件信息  
*#32489# 查看加密信息  
*#273283*255*3282*# 数据创建菜单  
*#3282*727336*# 数据使用状态  
*#8736364# OTA升级菜单  
##778 显示EPST菜单  
*#228# ADC读取菜单  

WIFI,GPS和蓝牙检测

代码 功能描述 备注
*#*#526#*#* WLAN检测  
*#*#528#*#* WLAN测试  
*#*#232339#*#* WLAN测试  
*#*#232338#*#* 显示WIFI网卡的MAC地址  
*#*#1472365#*#* 快速GPS测试  
*#*#1575#*#* 不同类型的GPS测试  
*#*#232331#*#* 蓝牙测试  
*#*#232337#*#* 显示蓝牙设备地址  

系统固件版本信息

代码 功能描述 备注
*#*#1111#*#* FTA软件版本  
*#*#2222#*#* FTA硬件版本  
*#*#4986*2650468#*#* 硬件信息  
*#*#1234#*#* PDA和手机系统信息  
*#2263# 基带选择  
*#9090# 诊断配置  
*#7284# USB模式控制  
*#872564# USB日志控制  
*#745# RIL日志输出菜单  
*#746# 调试日志输出菜单  
*#9900# 系统日志输出模式  
*#*#44336#*#* 显示构建时间,更新列表  
*#03# NAND闪存串号  
*#3214789# GCF模式状态  
*#4238378# GCF配置  

工厂测试

代码 功能描述 备注
*#*#0283#*#* 网络数据包回路测试  
*#*#0*#*#* LCD测试  
*#*#0673#*#* 音频测试  
*#*#0289#*#* 音频测试  
*#*#0842#*#* 震动与背光测试  
*#*#2663#*#* 触摸屏测试  
*#*#2664#*#* 触摸屏测试  
*#*#0588#*#* 近距离感应器测试  
*#*#3264#*#* 内存硬件版本  
*#0782# 实时钟测试  
*#0589# 光感应器测试  
*#7353# 快速测试菜单  
*#3214789650# LBS测试  
*#8999*8378# 测试菜单  
*#07# 测试历史  

PDA和电话

代码 功能描述 备注
*#*#7262626#*#* 场测试  
*#06# 显示手机IMEI号码  
*#*#8351#*#* 打开语音拨号记录日志  
*#*#8350#*#* 关闭语音拨号记录日志  
**05***# 从紧急拨号屏幕解锁PUK码  
*#301279# 网络制式HSDPA HSUPA控制菜单  
*#7465625# 查看手机锁定状态  
*7465625*638*# 配置网络锁定MCC/MNC  
*7465625*782*# 配置网络锁定NSP  
*7465625*77*# 插入网络锁定键SP  
*7465625*27*# 插入网络锁定键NSP/CP  
*#272886# 自动接听选择  

其他

代码 功能描述 备注
*#0*# Galaxy S3服务菜单 Samsung
*#1234# 软件版本 Samsung
*#12580*369# 硬件与软件信息 Samsung
*#0228# 查看电池状态 Samsung
*#0011# 打开服务菜单 Samsung
*#0283# 网络回路测试 Samsung
*#0808# 访问USB服务 Samsung
*#9090# 打开服务模式 Samsung
*#7284# FactoryKeystring菜单 Samsung
*#34971539# 访问摄像头系统 Samsung
*#7412365# 摄像头固件菜单 Samsung
##7764726 Motorola DROID 隐藏服务菜单 Motorola 默认密码6个0
1809#*990# LG Optimus 2x 隐藏服务菜单 LG 默认密码6个0
3845#*920# LG Optimus 3D 隐藏服务菜单 LG 默认密码6个0
3845#*850# LG G3 诊断测试菜单 LG AT&T
5689#*990# LG G3 诊断测试菜单 LG Sprint
3845#*851# LG G3 诊断测试菜单 LG T-Mobile
##228378 LG G3 诊断测试菜单 LG Verizon
3845#*855# LG G3 诊断测试菜单 LG 网络变种
*#*#3424#*#* HTC 测试功能 HTC
##8626337# 运行VOCODER HTC
##33284# 场测试 HTC
##3282# 显示EPST菜单 HTC
##3424# 运行诊断模式 HTC
##786# 反转诊断支持 HTC
##7738# 协议修订 HTC
*#*#786#*#* 硬件重置 Nexus 5
*#*#7873778#*#* 启动Superuser应用 Nexus 5
*#*#1234#*#* 启动Superuser应用 Nexus 5
*#123# 是否连接到家庭网络,仅用于加拿大和美国 Nexus 5
*#*#2432546#*#* 检查系统升级 Nexus 5

日志输出办法:

adb logcat -b main -v time>app.log  打印应用程序的log 

adb logcat -b radio -v time> radio.log 打印射频相关的log

adb logcat -b events -v time  打印系统事件的日志,比如触屏事件

6、权限问题

        try {
            PackageManager packageManager=mContext.getPackageManager();
            Drawable drawable=packageManager.getResourcesForApplication("com.tencent.qq").getDrawable(0x7f020110);
            mOnlineTv.setBackground(drawable);
        }catch (Exception e){
            showToast(e.getMessage());
        }

如上代码可以获取QQ的一张图片来设置到自己的App来,原因在于QQ设置了export=true,破解其App得到资源即可实现。延伸讲一个activity的安全性,一般通过action、设置应用包名可以直接打开,那么可以做的就是给activity设置一个权限,同时将传过来context的package做判断,如果在后台注册过则同意打开,否则拒绝打开。

再举一例:

   Intent intent = new Intent(Intent.ACTION_MAIN);
        ComponentName cn = new ComponentName("com.tencent.qq", "com.tencent.qq.activity.LoginActivity");
        intent.setComponent(cn);
        startActivity(intent);

7、安全一点的intent(设置selector为null,chrome默认设置component为null)

  1. // convert intent scheme URL to intent object  
  2. Intent intent = Intent.parseUri(uri);  
  3. // forbid launching activities without BROWSABLE category  
  4. intent.addCategory("android.intent.category.BROWSABLE");  
  5. // forbid explicit call  
  6. intent.setComponent(null);  
  7. // forbid intent with selector intent  
  8. intent.setSelector(null);  
  9. // start the activity by the intent  
  10. context.startActivityIfNeeded(intent, -1);  

防止被注入选项和component进入其他app,被截取数据。

劫持后如何防止用户数据被抓取

主要因为html中被插入js,同时弹出新的伪装页面

http://www.cnblogs.com/alisecurity/p/5408588.html

遇到下面这种,还是要自己多注意些

8、zip包里尽量不要出现../../file,对解压包的目录进行判断是否多级目录,防止数据被覆盖。

String entryName = entry.getName();
if (entryName.contains("..")){
throw new Exception("unsecurity zipfile!");
}

9、

伪基站传播分析

伪基站能够伪装成电信运营商的服务号,向手机用户群发钓鱼短信,收到的钓鱼短信跟正常短信显示在一起,真假难辨。钓鱼网站的仿真度很高,并抓住了人们贪小便宜的弱点,先收集用户信息,再引导安装仿冒应用。

美国联邦调查局认为:密钥长度需要设置56位,几乎不可破解,而30位以下可以通过暴力破解-入侵的艺术。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7月前
|
安全 Linux Android开发
Android 安全功能
Android 安全功能
83 0
|
7月前
|
XML Android开发 数据格式
ConstraintLayout 2,Android高级开发面试
ConstraintLayout 2,Android高级开发面试
|
3月前
|
开发框架 Dart 前端开发
Android 跨平台方案对比之Flutter 和 React Native
本文对比了 Flutter 和 React Native 这两个跨平台移动应用开发框架。Flutter 使用 Dart 语言,提供接近原生的性能和丰富的组件库;React Native 则基于 JavaScript,具备庞大的社区支持和灵活性。两者各有优势,选择时需考虑团队技能和项目需求。
384 8
|
2月前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
261 0
|
3月前
|
Web App开发 网络协议 Android开发
Android平台一对一音视频通话方案大比拼:WebRTC VS RTMP VS RTSP,谁才是王者?
【9月更文挑战第4天】本文详细对比了在Android平台上实现一对一音视频通话时常用的WebRTC、RTMP及RTSP三种技术方案。从技术原理、性能表现与开发难度等方面进行了深入分析,并提供了示例代码。WebRTC适合追求低延迟和高质量的场景,但开发成本较高;RTMP和RTSP则在简化开发流程的同时仍能保持较好的传输效果,适用于不同需求的应用场景。
174 1
|
4月前
|
存储 安全 API
Android经典实战之存储方案对比:SharedPreferences vs MMKV vs DataStore
本文介绍了 Android 开发中常用的键值对存储方案,包括 SharedPreferences、MMKV 和 DataStore,并对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。
110 1
|
4月前
|
Android开发 C++ 开发者
Android经典实战之跨平台开发方案:Kotlin Multiplatform vs Flutter
本文对比了Kotlin Multiplatform与Flutter两大跨平台开发框架,从技术特性、性能、开发效率、UI体验、可扩展性及适用场景等维度进行了详尽分析,帮助开发者根据项目需求和技术背景选择最优方案。
147 2
|
5月前
|
存储 安全 数据安全/隐私保护
🔎Android安全攻防实战!守护你的应用数据安全,让用户放心使用!🛡️
【7月更文挑战第28天】在移动应用盛行的时代,确保Android应用安全性至关重要。本文以问答形式探讨了主要安全威胁(如逆向工程、数据窃取)及其对策。建议使用代码混淆、签名验证、数据加密等技术来增强应用保护。此外,还推荐了加密API、HTTPS通信、代码审计等措施来进一步加强安全性。综上所述,全面的安全策略对于构建安全可靠的应用环境必不可少。#Android #应用安全 #代码混淆 #数据加密
80 3
|
4月前
|
Web App开发 网络协议 Android开发
### 惊天对决!Android平台一对一音视频通话方案大比拼:WebRTC VS RTMP VS RTSP,谁才是王者?
【8月更文挑战第14天】随着移动互联网的发展,实时音视频通信已成为移动应用的关键部分。本文对比分析了Android平台上WebRTC、RTMP与RTSP三种主流技术方案。WebRTC提供端到端加密与直接数据传输,适于高质量低延迟通信;RTMP适用于直播场景,但需服务器中转;RTSP支持实时流播放,但在复杂网络下稳定性不及WebRTC。三种方案各有优劣,WebRTC功能强大但集成复杂,RTMP和RTSP实现较简单但需额外编码支持。本文还提供了示例代码以帮助开发者更好地理解和应用这些技术。
150 0
|
5月前
|
存储 安全 Android开发
安卓应用开发的安全之道
【7月更文挑战第4天】在数字时代,移动应用的安全性至关重要。本文将深入探讨在安卓平台上开发安全应用的最佳实践,包括代码混淆、数据存储加密、网络通信安全、权限管理以及定期的安全审计和更新策略。通过这些措施,开发者可以显著提高他们的应用抵御恶意攻击的能力,保护用户数据免受侵害。