本文来自网易云社区

“Question”为网易云易盾的问答栏目,将会解答和呈现安全领域大家常见的问题和困惑。如果你有什么疑惑,也欢迎通过邮件(zhangyong02@corp.netease.com)提问。

近期很多人咨询盾盾关于Android安全的各类问题,在此整理了一篇问答合集,以飨读者。

一.什么是Android界面劫持

界面劫持是指在Android系统中,恶意软件通过监控目标软件的运行,当检测到当前运行界面为某个被监控应用的特定界面时(一般为登录或支付界面),弹出伪造的钓鱼页面,从而诱导用户输入信息,最终窃取用户的隐私(恶意盗取用户账号、卡号、密码等信息),或者利用假冒界面进行钓鱼欺诈。

1. 监听系统Logocat日志,一旦监听到发生Activity界面切换行为,即进行攻击,覆盖上假冒Activity界面实施欺骗。

2. 监听系统API,一旦恶意程序监听到相关界面的API组件调用,即可发起攻击。

3. 恶意启动Service监听目标应用,在切换到目标Activity时,弹出对话框劫持当前界面迷惑用户

●    针对用户

Android手机均有一个HOME键,长按可以查看到近期任务。用户在要输入密码进行登录时,可以通过长按HOME键查看近期任务,比如说登录微信时长按发现近期任务出现了微信,那么现在的这个登录界面就极有可能是一个恶意伪装的Activity,切换到另一个程序,再查看近期任务,就可以知道这个登录界面是来源于哪个程序了。

●    针对开发人员

针对钓鱼Activity类型劫持,在登录窗口或者用户隐私输入等关键Activity的onPause方法中检测最前端Activity应用是不是自身或者是系统应用,如果发现恶意风险,则给用户一些警示信息,提示用户其登陆界面以被覆盖,并给出覆盖正常Activity的类名。

如果是针对弹窗对话框类型的劫持,接管Activity的生命周期,当发现当前界面onResume之后,判断是否失去焦点;如果同时存在则有可能是对话框类劫持,判断此时运行的活动进程是否包含敏感权限(全局Alert权限、获取任务栈权限等),如果有的话则给用户告警。

Android 的 APK 中怎么放置反编译“炸弹”

上面文章里提到的"炸弹", 其实就是反编译器的 bug,所以针对不同的反编译器,需要设计不同的“炸弹”。先了解一下常用的 APK 反编译工具:

●     baksmali/smali: baksmali 能将二进制 dex 文件转化为 smali 文本文件用于分析,smali 则能将 smali 文件重新编译为 dex 文件。

●    Apktool : 整合了 baksmali/smali 用于处理 dex 文件, 另外实现了 res 资源文件(比如layout / strings等)的反编译。

●   AxmlPrinter : 用于将二进制形式的 AndroidManifest.xml 转换为文本形式的 AndroidManifest.xml。

●    dex2jar: 能将 dex 转化为 jar 文件。

●    jd-gui: 能将 jar 文件反编译为 java 源代码。

●    Ida Pro: 主要用于反编译 Apk 中的 So 文件,也支持将 dex 文件反编译为类似smali 语法的文本形式指令。

从上面的反编译工具可以看出,主要分三种功能:

●    反编译资源,如 AndroidManifest.xml、layout.xml

●    反编译 Dex 文件,或者进一步将 Dex 文件转换为 Java 代码

●    反编译 So 文件

炸弹”的设置需要对特定的文件格式有相当的了解,而且可能只能针对某个反编译工具的。

Android app如何加密?

android app包含的内容有dex文件,so文件,res,assets资源文件。对应的加密按此内容分为三大方面:dex保护、so加密、资源保护(res, assets)。

●   dex保护

由于未保护的dex文件,是从java编译打包而来,破解成本低较易受到攻击。其保护措施从最基本的加壳,到函数执行体抽取、动态加载,再到当前的vmp虚拟机加固,安全逐步增强。尤其是vmp加固,更是使用了自研虚拟机解释函数体,如果指令加密替换做的好,会让破解者很难受。

●    so加密

so文件,由起初的段加密,发展到自定义elf结构的加密方式,能防止IDA查看函数名称,增加破解成本和难度。

●    资源保护

res资源文件,通常只采用混淆的方式增加逆向难度。assets资源,一般不处理。但随时H5应用日益增多,部分厂商(易盾、娜迦)有提供assets加密的功能,实现原理不详。

除了上述三点防护外,还有防反编译、防二次打包、防调试、防模拟器、防xposed功能等。

a) 防反编译,一般是对市面上的反编译工具(例如apktool)做对抗,利用其漏洞,致使反编译失败;

b) 防二次打包,一般常用的是在代码里保存签名信息,启动时在native层将当前apk的签名信息与保存的签名进行比对。市面上已有破击工具。可以在常用实现方式上做些升级。

c) 防调试,通过ptrace进程,阻止破解者再ptrace调试。

d) 防模拟器,检测/system/bin/su和/system/xbin/su文件。

e) 防xposed,通过检测XposedHelpers的methodCache,判断是否被hook。

相关阅读:

Question第一期 | 网站被黑客扫描撞库该怎么应对防范?

点击可免费试用网易云易盾安全服务。

相关文章:
【推荐】 kubernetes 1.3管中窥豹- RS(Replica Sets):the next-generation Replication Controller

Question | 关于Android安全的一二事的更多相关文章

  1. Android 谈谈封装那些事 --BaseActivity 和 BaseFragment(二)

      1.前言 昨天谈了BaseActivity的封装,Android谈谈封装那些事--BaseActivity和BaseFragment(一)有很多小伙伴提了很多建议,比如: 通用标题栏可以自定义Vi ...

  2. Android打包的那些事

    使用gradle打包apk已经成为当前主流趋势,我也在这个过程中经历了各种需求,并不断结合gradle新的支持,一一改进.在此,把这些相关的东西记录,做一总结. 1. 替换AndroidManifes ...

  3. Hadoop 一二事(1) - 简单介绍与杂谈

    大数据大数据,身边很多朋友都在谈大数据,Big Data!!! 到底是什么,用来干嘛的,也很少有人说得出一二,那今天开始就简单说说这一二事吧 hadoop 的来源:是作者女儿的一个玩具 - 一只黄色的 ...

  4. 不可不知的 Android strings.xml 那些事

    相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧. ...

  5. 【Android开发那点破事】打开APP加载页面实现

    今天的破事呢就说说APP加载页面的实现.一般情况下,当APP打开的时候,我们需要做很多事情,比如检查网络连接啊,初始化一些配置啊等等.我们可以让这些事情在APP完全打开之前做完,然后呢在打开的过程中显 ...

  6. 关于ANDROID模拟器的一些事

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 继上一篇Android Studio VS Eclipse的文章后接着来分享AnDevCo ...

  7. [Android开发那点破事]解决android.os.NetworkOnMainThreadException

    [Android开发那点破事]解决android.os.NetworkOnMainThreadException 昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡 ...

  8. Android GC 那点事

    版权声明:本文由陈昱全原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/170 来源:腾云阁 https://www.qclo ...

  9. Android桌面快捷方式那些事与那些坑

    原文来自http://blog.zanlabs.com/2015/03/14/android-shortcut-summary/ 将近二个多月没写博客了.之前一段时间一直在搞红包助手,就没抽时间写博客 ...

随机推荐

  1. SpringBoot Docs

    http://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/html/boot-features-external-config.ht ...

  2. maven项目发布到Tomcat丢失jar包

    昨天看了一篇tomcat设置的文章,说要把第一个勾上,这样不需要更新到tomcat.  一启动tomcat就发现丢包.后来在网上看了许多文章,说要update maeven项目,然后你就会发现启动过程 ...

  3. 最短路径问题:弗洛伊德算法(Floyd)

    Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被 ...

  4. [Linux/Unix]常用命令

    1.查看日志后200行有“TNS字符串的详细信息 file_name |grep TNS 实时查看文件情况: tail -f file_name 2.查看路由情况: #Linux环境 tracerou ...

  5. dual表详解

    dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户 SQL> select user from ...

  6. git简单配置

    1.安装完git查看版本 git --version 2.配置用户名邮箱 git config --global user.name "chencheng" git config ...

  7. javascript--setTimeout定时器

    setTimeout()  可以理解为 定时炸弹      ---------------->隔一段事件执行,并且只会执行一次 函数语法: setTimeout(参数1,参数2) 参数1:待执行 ...

  8. android 自定义滑动按钮

    第一接触公司项目就让我画页面,而且还涉及到我最讨厌的自定义view  但是没办法,讨厌也必须要做啊,经过百度上资源的查找,终于写出了一个滑动控件.废话不多说,上代码. package com.eton ...

  9. nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)

    解决办法: nginx nginx -s reload

  10. 进一步理解 frame 和 bounds

    总结一下 iOS中 frame 和 bounds之间的区别    综述 frame和bounds都是描述一块矩形区域,但是他们是有区别的 frame:可视范围,可以理解为控件的大小,把控件当作边缘很薄 ...