转自:http://www.taobaotesting.com/blogs/2336


编写android短信安全程序项目中的安全注意点

云林 发表于:2013-01-10 浏览:7633次 评论:3次 所属分类:安全测试

有幸参加了淘宝网组织的工程师之夜第二轮无线之夜, 与boss铁花和乔倩同学一起做了个 短信的收读程序 , 重点在体现安全性上, 在程序过程中有点小收获,记录于此, 第一次做完整的android 程序, 没看什么参考,单纯个人理解 ,这里的安全我分三块,APK反编译、activity安全,数据库安全。

APK反编译, 在APK反编译上,我们使用了淘宝两套反编译工具, 一套代码保护,一套DEX文件保护,使用通过So文件加载, 以及不能被反编译的Dex文件 等,由于涉及到淘宝产品安全, 具体就不细讲了 。

activity 安全,在这一块上我们做了几个内容,

  1. 第一个是所有程序入口必须是输入密码界面,用户不能从其他方式进入到程序的其他activity中

使用方法:

  • 所有activity 在intent 跳转之后,必须finish ,一开始程序即是这么设计,后来发现,这样写用户体验会非常不好,在程序中,用户一旦点返回就会整个退出程序,后面改了操作, 在程序中intent 跳转 不 finish , 一旦activity 要跳转到输密码的 activity , 不论从哪儿过来, 输密码的activity 都会结束所有activity 并 直接 kill 进程, 这样下次用户进来之后 ,必须先进入输入密码的activity中
  • 还有一种情况是用户在 内部 页面,点击 home 键,回退到页面 ,在进入程序, 这时我们可以在 onResume 方法中查看如果intent没有特定参数带入或没有intent(内部跳转的intent会顺带来一个 带加密参数的intent),那么即跳转到 main页面,要求输入密码
  • 总之概括一句话, 不论用户如何退出,都会结束所有activity 后在退出 ,即下次再进来会要求输入密码

2. 第二所有intent 必须带加密参数才容许跳转

在程序内部传递, 或通知栏信息进入的时候, 必须带上指定的加密参数, 才容许跳转,否则重新调回到主页面,要求输入密码 。这块主要是放 伪造通知栏信息 进入程序内容页面

3. 第三是在main 页面,onStart(),方法中查看当前 activity 栈中 第一个activity 是否是程序的activity , 如果不是,根据activity 生命周期的看法, back前的activity 很可能是攻击者的activity在获取你的密码 。这个是防activity劫持的基础

4 . 所有 intent 均为点对点跳转, 不使用广播事件。为了防止 intent 事件被监听

5 . (在manifest文件中将所有activity 设置为android:launchMode="singleTask" 并且不配置 main filter ,作用是 用户按home 键退出之后 ,在进入肯定回到首屏,这个方法其实有点点问题,不合符google的开发规范, 建议谨慎使用,另一个方法, 建议在onStop方法中 finish 这样也方便)1 和 5 的作用是 不论用户如何退出,都会结束所有activity 后在退出 ,即下次再进来会要求输入密码 ,这个具体怎么做 参考另一篇博文http://www.taobaotest.com/blogs/2337



1 2 3 4 点 加起来, 基本可以防止activity劫持的情况,这点我各种测试中验证了一把, 是可行的。 这一块上,也只是测试 ,希望有想法的同学给我留言,探讨下

数据库安全

1 、 防暴力破解

对于爆破而言,我们需要做的是如何缓解攻击者的破解时间,该程序采用的方法是如果输错密码 ,即会退出程序,需要在点击图标进入,这样尝试一个密码,至少需要2s , 按照我上回8位 数字密码 爆破 每秒 300-500次 破解,需要35个小时才能遍历完毕的速度, 如果用户设置一个6位 纯数字密码, 攻击者要暴力破解,则至少需要400d 。

2 、用户名和密钥绑定

加解密的密钥设置为通过用户密码几次转码后得到, 跟随用户密码动态绑定,如果用户密码更改, 那么加密内容也必须重新拿出来解密后在加密

3 、防止数据库注入

防止数据库注入,所有操作均使用sqllite 的封装函数, 并且对search函数中的参数做强制类型转义

2点 的作用体现在,即使攻击者攻破一台手机, 也无法使用 该台手机的密钥去做第二台的破解,另外,就算攻击者拿到了数据库, 把密码字段删除后,也无法通过重置密码来获取短信内容 。


更多相关文章

  1. Android(安卓)framework——Activity的启动和创建
  2. Android学习笔记(四)——通过剪切板传递数据
  3. Android(安卓)Studio 4.0 稳定版全方位详解
  4. Android(安卓)NDK学习笔记(一) 初识NDK
  5. android 2.3 StrictMode 使用
  6. android activity 属性解释
  7. 个人帐号密码信息管理(PAPIM)软件构想
  8. Android中的数据库
  9. 如何为Android,Mac和Windows平台创建Java JNI动态链接库

随机推荐

  1. Android(安卓)圆形和圆角图片 AppCompatI
  2. 3月22日学习记录(2)(显式intent与隐式intent
  3. Android(安卓)WebView 踩过的坑
  4. Android(安卓)3.0 访问WebService或Socke
  5. Android(安卓)监听开机广播实现应用开机
  6. Android(安卓)N 各种ANR的时间
  7. Android(安卓)NavigationView使用详解
  8. Android(安卓)Studio AAPT2 error: check
  9. 基于Android的Word在线预览
  10. Android(安卓)ScrollView 滚动监听