0


APP 安全相关技术探讨

在移动应用日益普及的今天,APP 的安全问题备受关注。本文将围绕 APP 安全加固技术以及手工安全检测这两个重要方面展开讨论,为读者呈现 APP 安全领域的关键知识和技术要点,并详细介绍相关操作步骤。

一、APP 安全加固技术

(一)什么是 APP 安全加固

APP 加固是对原本容易暴露的程序运行逻辑进行保护,而不影响程序本身的运行结果,包括 dex 和 so 文件。目前来看,保护 dex 文件更为重要,因为 dex 文件反编译之后的代码可读性更强。详细来说,是在二进制的程序中植入一段代码,在运行时优先取得程序的控制权,做一些额外的工作,例如对原始二进制原文进行加密、隐藏、混淆等操作,这是应用加固的一种常见手法。

(二)APP 安全加固的影响

  1. 正面影响- 保护核心代码算法,提高破解、盗版、二次打包的难度,有效缓解代码注入、动态调试、内存注入攻击等问题。- 随着加固技术的发展,对猖獗的二次打包行为起到了打击作用。
  2. 负面影响- 影响兼容性:这是 APP 加固技术面临的一个难题。很多时候为了追求兼容性,不得不放弃一些技术。不同的应用市场对加固后的应用兼容性要求不同,例如有些应用市场会拒绝加壳后的应用上架,部分加固后的应用在某些设备或系统上可能无法正常运行。- 影响程序运行效率:虽然目前一些大的加固厂家在兼容性和运行效果方面做得还不错,但加固操作仍可能对程序运行效率产生一定影响。- 被恶意利用:部分流氓、病毒也会使用加壳技术来保护自己,给安全检测和防范带来困难。

(三)APP 安全加固的必要性

  1. 保护开发者利益 - 防止二次打包:加固技术可以防止应用被重打包,避免仿冒应用泛滥。一些犯罪分子会对热门应用进行重打包,并添加恶意代码后重新发布,这会严重损害开发者和开发厂商的利益。- 保护重要代码逻辑和算法:防止代码被反编译和破解,尤其是针对修改关键逻辑以破解应用内购买等行为,加固技术能提供很大的保护作用。
  2. 提高用户体验 - 重打包的 APP 从外面几乎分辨不出来,大多数用户难以甄别。通过加固技术,可以减少这类不良应用的出现,从而提高用户体验。

(四)APP 安全加固的分类

  1. 核心逻辑分类- 动态载入:这是一种常见的方式。- VMP(虚拟机保护):相当于自己实现虚拟机,但通常只是指令的简单替换。由于兼容性问题,目前在 dex 文件的加固中较少使用 VMP。
  2. 加固范围分类- Dex 加固:只针对 dex 文件进行加固。- So 和 Dex 加固:对 so 文件和 dex 文件同时进行加固。- 核心逻辑加固:重点对核心逻辑进行保护,因为加固会影响运行效率,所以有些加固方案只对核心逻辑进行有效的保护,而大多数维护运行的代码还是暴露的。同时,资源也会被加密,并且一些充当技术会结合防止反编译的技术,例如在 resource 文件里做手脚影响 apktool,在 smali 里加代码影响 baksmali 工具等。

(五)APP 安全加固的思路

目前 APP 加固几乎都是利用 DexClassLoader 来动态加载 dex 来实现的。由于这段逻辑本身会暴露 dex 文件,所以通常要配合反调试技术。具体包括以下几个方面:

  1. 混淆逻辑:通过混淆逻辑增加逆向难度。
  2. 检查文件特殊内容:对一些文件的特殊内容进行检查。
  3. 检查代码运行时间:判断是否在被调试。
  4. Hook 检查:在对抗一些脱壳工具方面,着会在程序中做 hook,检查是否有特殊的逻辑存在。

一般使用常见的加固工具加固应用后,它会把你的 dex、so 加密存在 apk 中,然后 apk 运行过程会先运行壳的代码,壳的代码再把原来的 dex、so 解出来加载,不同厂商自己的方案略有差距,但目前多数都是这个思路,具体细节各厂家有各自的方法。

(六)APP 安全加固操作步骤

  1. 选择加固工具 - 根据应用的特点和需求,选择合适的加固工具。常见的加固工具包括一些商业工具以及开源工具。不同的工具在加固效果、兼容性、操作难度等方面可能存在差异。
  2. 配置加固工具 - 按照加固工具的使用说明,进行相关配置。这可能包括设置加固的范围(如只加固 dex 文件还是同时加固 dex 和 so 文件)、选择加固的核心逻辑方式(如动态载入或 VMP 等)。
  3. 进行加固操作 - 将应用的源文件(如 apk 文件)导入加固工具。- 启动加固过程,工具会自动对应用进行加固处理,包括对 dex 和 so 文件进行加密、混淆等操作。
  4. 测试加固后的应用 - 在不同的设备和系统环境下,对加固后的应用进行兼容性测试。确保应用能够正常运行,没有出现崩溃、卡顿等问题。- 对加固后的应用进行安全测试,检查是否能够有效防止常见的攻击方式,如二次打包、反编译等。

(七)APP 安全加固案例

以早先版本的阿里的 dex 加密技术为例。加密后的程序会有一些额外的文件,如 libmobisecx.so、libmobisecy1.so、libmobisecz1.so,其中有一个是加壳过的 so 文件,它是阿里加壳解密的核心逻辑所在。在这个 so 文件中,几乎所有的字符串都是被加密过的,可以通过两段数据解密得到,这样可以很大程度上防止通过字符串来推测逻辑。因为很多字符串是一些函数名或者参数,在 so 中许多逻辑都是反射调用 java 层实现的,这类代码逻辑不容易弄清,会加大跟踪难度。并且其中的反调试技术,有检查 TracerPid 和命令行中的 gdb、gdbserver、android_server 等。而且核心的逻辑基本都是动态解密的,在调用 DexClassLoader 的时候,加载的不是完整的 dex,在真正加载类的时候,会重新修改一些偏移,使文件变得完整。

此外,还有一些加固产品会对原本的执行逻辑进行混淆,如 APKProtector,即使脱壳成功,代码的可读性也不是很好。在使用这些加固产品之前,开发者也可以自己做一些简单的工作来增加逆向难度,比如对 java 代码中的字符串进行加密,自己实现加解密算法,在代码中使用加密字符串并进行解密。

二、APP 手工安全检测

(一)什么是 APP 手工安全检测

APP 手工安全检测是指借助相关工具进行针对性的测试,包括安全问题分析、恶意行为安全检测等。由于应用安全的检测可以做到反编译源代码级别,所以在手工安全检测时,可以阅读反编译的代码,以便针对一些场景和问题进行检测。

(二)APP 手工安全检测的必要性

  1. 安卓应用通过静态分析经常会被扫描到问题,但准确性比较有限,自动化分析工具只能起到辅助作用,所以需要借助手工安全检测去查看源代码上下文才好确定安全问题。
  2. 很多第三方平台都提供自动化的审计,但隐患、风险点距离实际的漏洞利用还有一定距离,即使是用借助语法分析的引擎去做自动化审计,也是需要手工确认的,这是需要替代的。

(三)APP 手工安全检测的思路

  1. iOS 应用- 由于 iOS 无法做到反编译,因此一般会借助反汇编的工具,比如 IDA。在越狱后的环境下,会借助 idb、classdump 等辅助工具,方便利用应用的逻辑进行分析。同时,会借助动态分析,然后用静态分析的方式去过一下那些问题点。动态分析会做系统行为 hook,对加解密、http 请求、文件系统是访问、iOS 剪切板、日志记录、keychain 访问进行分析,此外还有 UIWebView 的监控,因为 iOS 里面也会用到内嵌网页的开发。
  2. Android 应用- 先看一下是不是加壳的,如果是则对 apk 进行脱壳,然后通过反汇编、反编译工具得到汇编代码或反编译代码,然后根据特征定位代码位置,然后结合上下文分析,有时候可能要动态调试。在 Android apk 里面有很多小技巧,需要积累一些 antianalysis 的技术。

(四)APP 手工安全检测操作步骤

  1. iOS 应用- 准备工具:确保安装了 IDA 等反汇编工具。如果需要在越狱环境下进行分析,还需要安装 idb、classdump 等辅助工具。- 反汇编操作:使用 IDA 对应用进行反汇编操作,得到应用的汇编代码。- 动态分析:在越狱环境下,结合 idb、classdump 等工具,对应用进行动态分析。通过系统行为 hook,对加解密、http 请求、文件系统访问、iOS 剪切板、日志记录、keychain 访问进行分析,同时对 UIWebView 进行监控。- 静态分析:在动态分析的基础上,对得到的汇编代码进行静态分析,检查是否存在安全问题。
  2. Android 应用- 检查是否加壳:使用相关工具检查应用是否加壳。例如,可以使用 apktool 对应用进行初步检查,如果发现应用被加壳,则需要进行脱壳操作。- 脱壳操作:如果应用被加壳,可以使用 dexhunter 等脱壳工具对应用进行脱壳。- 反汇编和反编译:使用反汇编和反编译工具,如 apktool、dex2jar 和 jd-gui 的组合,对脱壳后的应用进行反汇编和反编译操作,得到汇编代码或反编译代码。- 定位和分析:根据特征定位代码位置,然后结合上下文分析代码,检查是否存在安全问题。如果需要,可以进行动态调试。

(五)APP 手工安全检测工具推荐

  1. iOS 应用- 推荐工具包括 IDA、jeb 等。
  2. Android 应用- 开源框架方面,静态扫描可以使用https://github.com/androguard/androguard,动态扫描可以使用https://github.com/mwrlabs/drozer。- 其他工具推荐包括 360 的显危镜、阿里的聚安全、梆梆、爱加密等,它们几家做的安全检测引擎功能差不多。此外,脱壳工具可以试试 dexhunter,盘古的 janus 也值得一试。

APP 安全是一个复杂而重要的领域,无论是安全加固技术还是手工安全检测,都对于保障 APP 的安全运行起着至关重要的作用。开发者需要充分了解这些技术和方法,根据自身需求和应用特点,选择合适的安全策略和工具,以提高 APP 的安全性。

标签: 网络 web安全

本文转载自: https://blog.csdn.net/m0_57836225/article/details/143060353
版权归原作者 阿贾克斯的黎明 所有, 如有侵权,请联系我们删除。

“APP 安全相关技术探讨”的评论:

还没有评论