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



本文来自刘兆贤的博客_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
##7764726Motorola 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
##228378LG G3 诊断测试菜单LG Verizon
3845#*855#LG G3 诊断测试菜单LG 网络变种
*#*#3424#*#*HTC 测试功能HTC
##8626337#运行VOCODERHTC
##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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘兆贤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值