• Android App 逆向安全


    本文涉及的工具收集整理到Github上了:https://github.com/renhui/Thinking-Android-Safe

    一、Android 逆向工具

    1. ApkTool

    Android逆向分析领域历史最久远的工具之一,提供了Android Apk反编译和回编译的功能,让Apk的重新打包成为可能。虽然越来越多的工具提供了GUI进行反编译,但是以命令行的方式操作的ApkTool使用起来更加简单、便捷,仍然是很多人分析的最佳选择。

    目前ApkTool的版本2.4.1版本(推荐使用最新的版本使用,避免旧版本中的一些问题),下载地址为:https://ibotpeaches.github.io/Apktool/

    2. GDA

    GDA是一款完全基于C++开发的新型反编译工具,因此该工具并不仅依赖于Java平台。该工具使用起来非常方便,而且运行速度非常快,支持APK、DEX、OBED和oat等文件格式。

    3. Dex2jar/JD-GUI

    使用最多的将DEX文件转换为jar包的工具。对使用Dex2jar转换的包,可以通过JD-GUI等工具查看反编译后的Java代码。

    二、Android 安全评估工具

    1. Drozer 安全评估工具

    Drozer是MWR Labs开发的一款Android安全测试框架。是目前最好的Android安全测试工具之一。其官方文档说道:“Drozer允许你一一个普通android应用的身份与其他应用和操作系统交互。”在Web世界已经有了许多安全测试工具了,我们只需要给出一个目标,这些工具就会自动为我们安全测试报告。但Drozer与这样的自动化扫描器不同,Drozer是一种交互式的安全测试工具。使用Drozer进行安全测试,用户在自己的工作站上输入命令,Drozer会将命令发送到Android设备上的代理程序执行。其官方文档说道:“Drozer允许你一一个普通android应用的身份与其他应用和操作系统交互。

    安装文件地址:

    python-2.7.14:https://pan.baidu.com/s/1PWWks_KiI6sbK5EZrpDbDw,提取码:h4ui

    drozer-agent:https://pan.baidu.com/s/1E3M90v_9Hdn4aHMOsenU2g,提取码:7miw 

    drozer-2.4.4:https://pan.baidu.com/s/1IdsPKEqzzdFxOGRjL3RH1Q,提取码:g6ks 

    2. QARK 分析工具

    QARK是一款易于使用的工具,能够找到Android应用程序中的常见安全漏洞。与商业产品不同,它可以100%免费使用。QARK提供教育信息,允许安全审查人员找到对漏洞的精确和深入的解释。在反编译APK时,QARK可以自动使用多个反编译器,利用它们的组合输出来产生出色的结果。最后,QARK与传统工具相比的主要优势仅仅是指出可能存在的漏洞,它可以产生ADB命令甚至功能齐全的APK,将假设的漏洞转化为“POC”漏洞利用。

    包含在此工具尝试查找的安全漏洞类型中的有:

    • 无意中导出的组件、未妥善保护的导出组件
    • 易受拦截或窃听的intent、粘滞的intent的使用、发送不安全的广播Intent
    • 不正确的x.509证书验证
    • 创建事件可读或事件可写的文件、导出SharePreference
    • 可能泄漏数据的Activity
    • 不安全地创建了Pending Intents
    • 嵌入在源中的私钥、弱密码学使用不当或不适用
    • 潜在可利用的WebView配置
    • 启用备份的应用程序、可调试的应用程序
    • 支持过时API版本的应用程序,具有已知的漏洞

    安装文件地址:

    0.9-alpha.1https://github.com/linkedin/qark/releases/tag/v0.9-alpha.1

    三、Android 加壳方式

    使用软件壳为目标APK加壳,一般使用的方式为:Dex混淆、Dex加密与Application替换、so加密等。

    1. Dex混淆

    Dex混淆常见于Dex混淆器,例如DexGuard与DexProtect。识别这类加壳程序的方法是对比和分析它们所生成的Dex文件与常规Dex文件。为了达到字符串加密与方法流程混淆的效果,混淆器通常会使用Java的反射机制来实现加密,并向代码中插入getClass().getDeclaredMethod().invoke()之类的方法调用。配合它们独有的Dex字节码特征,相对容易识别。

    2. Dex加密与Application替换

    软件壳在处理Apk的时候,会用StubApplication类替换程序的Application类,达到接管Apk启动控制权的目的。不同的厂商的加壳程序向Apk添加的StubApplication类在名称与包名上有所不同,这是识别各个厂商软件壳最简单、有效的方法。

    3.So加密

    so加密一般会对Apk处理后,在assets目录下添加相应的文件。

    4. 如何识别软件壳

    可以使用APKID进行APK文件特征的识别,APKID是一款开源工具(https://github.com/rednaga/APKiD)。它使用Python脚本配合yara规则,实现了APK编译器识别规则与常见的软件壳特征识别规则,支持快速识别APK的软件壳信息,准确率高且易扩展。

    四、Android 软件壳的发展

    1. 动态加载型壳(第一代壳)

    动态加载壳属于第一代壳,它的发展时期是从4.4向5.0迈进的时期,这个时期也是从Dalviik虚拟机向ART虚拟机转型的时期。这个时期的软件壳,早期版本主要针对Dalvik虚拟机的实现,其特点是:对本地APK中的数据进行加密,在运行时在内存中解密

    因为“加载即解密”的特点,使得脱壳有很多种方式,常见的脱壳方法如下:

    • 缓存脱壳法:因为动态加载型壳使用DexClassLoader将加密后的Dex文件在内存中解密后进行动态加载,但部分软件壳并没有对加载的Dex缓存路径进行处理,导致优化的结果默认放置到了/data/dalvik-cache目录。只需要将/data/dalvik-cache下的OBEX文件去吃,在进行一次deodex操作,即可完成脱壳工作。
    • 内存Dump脱壳法:基于这代壳在内存中完全解密的特点,可以从内存中Dump需要解密的APK的内存,从而完成脱壳操作。
    • 动态调试脱壳法:本质还是基于内存Dump脱壳法,需要通过调试器找到合适的Dump时机,即DEX文件已经在内存中完全解密,且代码还没有开始执行。寻找合适的Dump时机是动态调试脱壳法的重点。
    • Hook脱壳法:与动态调试脱壳法一样,都需要分析人员找到合适的脱壳实际。不同点在于:动态调试脱壳法需手动操作调试器来完成脱壳,Hook脱壳法需要使用Hook框架,配合Hook代码,实现工具的自动化脱壳。
    • 系统定制脱壳法:与Hook脱壳法类似,系统定制脱壳法针对第一代壳在dvmDexFileOpenPartial()或dexFileParse()方法处设置断点来脱壳的特点,修改它们的源码中的实现,然后编译修改后的代码,以刷机的方式实现脱壳。刷机后,APK加载时会自动将Dex保存到我们修改后的指定的目录下,这样我们就能轻易找到脱壳后的DEX文件。

    2. 代码抽取型壳(第二代壳)

    代码抽取型壳属于第二代壳,特点是即使DEX加载到内存中,也处于加密的状态,所有的DEX方法都是在运行时解密的。针对这代的代码抽取型壳,脱壳的方法就没有第一代的脱壳方法多了,且难度变大了不少。

    针对代码抽取型的脱壳方式有以下几种:

    • 内存重组脱壳法:通过解析内存中的DEX文件格式,将其重新组合成DEX文件,可以实现百分百的DEX代码还原。
    • Hook脱壳法:也是基于DEX在内存中完全解密进行的。
    • 系统定制脱壳法:对Dalvik的方法实现代码进行修改通过调用dvmDefineClass()方法手动加载所有的类。

    3. 代码混淆壳(第三代壳)

    这里先说明一下软件的混淆技术。软件的混淆分为代码混淆和数据混淆,而从软件的编译与链接的生成过程来看,软件混淆是可以分为事前的代码混淆,事中的编译期混淆、事后的二进制混淆。

    代码混淆指的就是源码混淆,好处是经过这种混淆处理后的代码,分析起来是有一定难度的。不过,从软件混淆技术的层面看,尽管能有效防止反编译后的逆向分析,但是对自身的调试和维护也来了麻烦,当代码出现Bug的时候,定位问题也变得更难。

    代码混淆分为Java级别的代码混淆(第一代壳)和原生程序的代码混淆(第三代壳)。这里的代码混淆壳指的是: 原生程序的代码混淆。目前代码混淆壳是当前级别最高的软件加密技术,这里推荐LLVM编译套件,这是一个很优秀的开源跨平台的编译套件(感兴趣的可以了解AST混淆技术)。

    代码混淆壳在编译时改写了代码了代码生成的指令,因此在分析与破解这类二进制程序时,谈不上脱壳,更像是对原始指令的还原,或者说是对代码混淆的还原。

    五、Android 逆向安全拓展内容

    1. Android APP安全在线检测平台

    腾讯金刚审计系统 http://service.security.tencent.com/kingkong 免费 无限制
    腾讯御安全 http://yaq.qq.com/ 免费 查看漏洞详情需认证
    阿里聚安全 http://jaq.alibaba.com/ 免费 查看漏洞详情需认证
    360显微镜 http://appscan.360.cn/ 免费 无限制
    360APP漏洞扫描 http://dev.360.cn/html/vulscan/scanning.html 免费 无限制
    百度MTC http://mtc.baidu.com 9.9元/次 无限制
    梆梆 https://dev.bangcle.com 免费 无限制
    爱内测 http://www.ineice.com/ 免费 无限制
    通付盾 http://www.appfortify.cn/ 免费 无限制
    NAGA http://www.nagain.com/appscan/ 免费 无限制
    GES审计系统 http://01hackcode.com/ 免费 无限制
    盘古出品的Janeushttp://appscan.io
    Janus http://cloud.appscan.io
    APP逆向main_classify_list https://android.fallible.co/
    java在线反编译Java decompiler online http://www.javadecompilers.com
    腾讯电脑管家:哈勃 http://habo.qq.com/
    腾讯TSRC:金刚 http://service.security.tencent.com/
    阿里聚安全:http://jaq.alibaba.com/
    西安交通大学 sanddroid:http://sanddroid.xjtu.edu.cn/#home
    金山火眼:http://fireeye.ijinshan.com/analyse.html
    瀚海源文件B超:https://b-chao.com 

    2. 推荐博客内容

    安卓渗透测试工具——Drozer(安装和使用):https://www.cnblogs.com/zhaoyixiang/p/11236458.html

    Android安全测试框架Drozer(安装篇):https://www.jianshu.com/p/4ef5b26dd3fb

    Android安全测试框架Drozer(使用篇):https://www.jianshu.com/p/8f9d7dc5a8bb

    QARK工具的介绍和原理分析:https://zhuanlan.zhihu.com/p/35411248

    GDA:一款基于C++的新型Android逆向分析工具:https://www.freebuf.com/sectool/226185.html

    ApkTool: Apktool 使用教程:https://www.jianshu.com/p/6ba8b826c138

    Android中的Apk的加固(加壳)原理解析和实现:https://blog.csdn.net/sally_liang/article/details/52946790

    Android安全知识笔记合集:https://juejin.im/post/5deb7478518825126204f4d7

    Android安全客户端安全要点:https://zhuanlan.zhihu.com/p/35100057

    Android应用防止so注入防止动态调试参考代码:http://www.iiii.name/androidsobug.html

    安卓Activity劫持与反劫持:https://www.freebuf.com/company-information/222548.html

    Android 安全之 Activity 劫持防护:https://www.jianshu.com/p/d4677e837648

     

     

  • 相关阅读:
    关于数据库,程序员应该了解的那些事
    Kafka实战宝典:如何跨机房传输数据
    数据挖掘从入门到放弃(三):朴素贝叶斯
    面试官:数据库自增ID用完了会怎么样?
    《我想进大厂》之网络篇夺命连环12问
    面试官:缓存一致性问题怎么解决?
    空指针的传说
    淘宝|蚂蚁|菜鸟|盒马|嘀嘀|饿了么面经(已拿多个offer)
    苦修月余,斩获bigo、腾讯offer,面经奉上!
    《我想进大厂》之Spring夺命连环10问
  • 原文地址:https://www.cnblogs.com/renhui/p/13359870.html
Copyright © 2020-2023  润新知