• Question | 关于Android安全的一二事


    本文来自网易云社区


    “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第一期 | 网站被黑客扫描撞库该怎么应对防范?


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


    相关文章:
    【推荐】 视觉设计师的进化
    【推荐】 一份 ECMAScript 2015 的代码规范(中)
    【推荐】 如何有效的杜绝“羊毛党“的薅羊毛行为?

  • 相关阅读:
    C语言资料分享
    vue子组件添加事件无效解决
    vue-cli3 vue动画 打包后不生效解决
    setTimeOut定时器实现数组内容循环获取
    echart 之仪表盘 动态分段颜色实现
    elementUI table树默认箭头修改
    《二》打包发布工程-README.md编辑
    《一》打包发布工程--npm 打包发布js库篇
    npm打包发布js库包npm ERR! 403 Forbidden
    安装nrm 后执行报错TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string
  • 原文地址:https://www.cnblogs.com/163yun/p/9599571.html
Copyright © 2020-2023  润新知