本文来自刘兆贤的博客_CSDN博客-Java高级,Android旅行,Android基础领域博主 ,引用必须注明出处!

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以下防攻击方案:Android4.2下 WebView的addJavascriptInterface漏洞解决方案_梦_枫的博客-CSDN博客

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转换之后,可获得一个只读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,同时弹出新的伪装页面

你的应用是如何被替换的,App劫持病毒剖析 - 阿里安全 - 博客园

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

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

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

9、

伪基站传播分析

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

美国联邦调查局认为:密钥长度需要设置56位,几乎不可破解,而30位以下可以通过暴力破解-入侵的艺术。

10、为什么https网络传输是安全的?CSDN

Android高级之十三讲之安全方案相关推荐

  1. Android高级之十二讲之如何降低应用内存消耗

    安卓应用的内存往往是有限的,从开始的8M到16M,24M,32M,48M,64M等逐步变大,但内存的变大是由于分辨率的提高导致,并不意味着可以随意声明使用内存,而不及时回收(即使Java有自己的垃圾回 ...

  2. [总]Android高级进阶之路

    个人Android高级进阶之路,目前按照这个目录执行,执行完毕再做扩展!!!!! 一.View的绘制 1)setContentView()的源码分析 2)SnackBar的源码分析 3)利用decor ...

  3. Android 高级面试

    一. Android 性能优化 1. 如何对 Android 应用进行性能分析 2. 什么情况下会导致内存泄露 3. 如何避免 OOM 异常 4. Android 中如何捕获未捕获的异常 5. ANR ...

  4. 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android高级篇上)...

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. A awesome android expert interview questions a ...

  5. 视觉 SLAM 十四讲 —— 第十三讲 建图

    视觉 SLAM 十四讲 -- 第十三讲 建图 在前端和后端中,我们重点关注同时估计相机运动轨迹与特征点空间位置的问题.然而,在实际使用 SLAM 时,除了对相机本体进行定位之外,还存在许多其他的需求. ...

  6. android高级编程-android高级应用

    android高级应用>>> 第一阶段 程序员基本素质养成 程序员所需要具备的12条职业素质 让学员初步了解和审视自己所应该具备的职业素质.并且我们会在授课中随时训练和贯彻这样的素质 ...

  7. 耗时118天爆肝【1296页】的“Android高级开发面试题”,终于成功上岸字节

    前言 本人16年毕业于一家普通二本,考研裂开了且没有实习经验,只做过两个项目,每天就是不断地投简历.刷面经,感觉自己都要抑郁了,最后勉强进入了一家学校合作的互联网公司,后面陆陆续续也换了几家公司,毕业 ...

  8. android高级资料

    自己写一个组件化的工程: https://juejin.im/post/5cc5b3055188255e341c42ba android把一个module打包成maven仓库,arr文件,远程访问其中 ...

  9. Android 高级面试-2:IPC 相关

    内容 IPC 就是指跨进程通信.IPC 相关的内容,涉及的主要有: 常见的 IPC 通信方式: Binder 相关: 两种序列化方式及其对比: 问题 IPC Android 上的 IPC 跨进程通信时 ...

最新文章

  1. 每日一皮:这个食堂好...
  2. 【安全漏洞】ProxyShell利用分析2——CVE-2021-34523
  3. php中获取ip的地域信息比较精准
  4. Spring + Mybatis 使用 PageHelper 插件分页
  5. 「数据ETL」从数据民工到数据白领蜕变之旅(五)-使用dotNET脚本实现SSIS无限扩展...
  6. 单独像对相对定向元素解析
  7. 解决React首屏加载白屏的问题
  8. EasyUI 搜索框
  9. mysql 5.5 主从_Mysql5.5常用命令及主从配置
  10. 检测手机屏幕是否亮屏解锁
  11. 如何做一个自律的人?
  12. UI/UE设计学习路线图(超详细)
  13. 手把手教你如何写一个三子棋/N子棋的小游戏
  14. python基础教程十进制_Python基础教程(五):数字、字符串
  15. Java计算圆、长方形、正方形的面积及周长,并比较打印各个图形的大小
  16. Linux中关于安装包的分析。——Arvin
  17. php __destruct反序列化原理
  18. Swin Transformer v2实战:使用Swin Transformer v2实现图像分类(一)
  19. 机器学习工程师与研究员之间的7个主要区别(包括薪水)
  20. glsl boom

热门文章

  1. 如何做好软件维护工作
  2. 计算机网络——各种计算
  3. 使用 js 将图片进行转Base64转码
  4. Asp.Net MVC4的学习概况
  5. VS2019初步使用
  6. 推荐收藏:河海大学物联网工程学院历年复试线汇总
  7. python基础八:集合
  8. java futuretask 单例_集群环境下java单例查询多了就异常
  9. 前端性能优化,之还在为多种多样的知识点整理苦恼吗,进来看看吧。
  10. python可以自动拆分表格吗_Python最详细的Excel操作方式,你值得拥有!