共计 2831 个字符,预计需要花费 8 分钟才能阅读完成。
App 加固技术性能倒退
通过这几年的倒退 APP 加固技术,一直失去疾速迭代倒退,加固的强度也在一直的晋升。加固技术的倒退次要经验:动静加载、内存不落地加载、指令抽取、指令转换、虚拟机爱护。上面就别离对这些技术实现进行解析。
动静加载
Android 动静加载加固技术用于爱护 App 利用的逻辑不被逆向与剖析,最早广泛在恶意软件中应用,它次要基于 Java 虚拟机提供的动静加载技术。因为动静加载技术次要依赖于 java 的动静加载机制,所以要求要害逻辑局部必须进行解压,并且开释到文件系统。这种动静加载技术不足之处在于:1. 这一解压开释机制就给攻击者留下间接获取对应文件的机会;2. 能够通过 hook 虚拟机要害函数,进行 dump 出原始的 dex 文件数据。
不落地加载
Android 不落地加载技术,它是在动静加载技术的根底进行改良。它通过借鉴第一代加固的动静加载技术中,要害逻辑局部必须开释到文件系统的缺点,它次要新增文件级别的加解密。
文件级别的加解密技术次要有两种实现计划:1. 通过拦挡零碎的 IO 相干函数,在这些零碎的函数中进行通明加解密。2. 间接调用虚拟机提供的函数,进行不落地的加载。这种文件级别的加解密不足之处在于:1. 因为在 App 启动时需解决大量加解密操作,它会造成 App 启动卡顿假死或黑屏景象,用户体验感较差;2. 因为它的内存是间断的,通过 hook 要害函数就能够获取到间断残缺的 dex 数据。
指令抽取
android 的指令抽取,次要在于函数根本的抽取爱护。通过应用 android 虚拟机自带的解释器进行执行代码。将原始 App 中 dex 文件的函数内容进行革除,并将独自挪动到一个加密文件中,在 App 运行的时候,再将函数内容从新复原到对应的函数体。
这一指令抽取技术的不足之处在于:1. 应用大量的虚拟机内部结构,会呈现兼容性问题;2. 应用 android 虚拟机进行函数内容的执行,无奈反抗自定义虚拟机;3. 它跟虚拟机的 JIT 优化呈现抵触,达不到最佳的性能体现。
指令转换 /VMP
它次要通过实现自定义 Android 虚拟机的解释器,因为自定义解释器无奈对 Android 零碎内的其余函数进行间接调用,所有必须应用 java 的 jni 接口进行调用。
这种实现技术次要有两种实现:1.dex 文件内的函数被标记为 native,内容被抽离并转换为一个合乎 jni 要求的动静库。2.dex 文件内的函数被标记为 native,内容被抽离并转换为自定义的指令格局。并通过实现自定义接收器,进行执行代码。它次要通过虚拟机提供的 jni 接口和虚拟机进行交互。这一指令转换技术实现计划不足之处在于:在攻击者背后,攻击者能够间接将这个加固技术计划当做黑盒,通过实现自定义的 jni 接口对象进行外部调试剖析,从而失去残缺的原始 dex 文件。
虚拟机源码爱护
通过利用虚拟机技术爱护(www.dingxiang-inc.com)App 中的所有代码,包含 java、Kotlin、C/C++ 等多种代码,虚拟机技术次要是通过把外围代码编译成两头的二进制文件,随后生成独特的虚拟机源码,爱护执行环境和只有在该环境下能力执行的运行程序。通过基于 llvm 工具链实现 ELF 文件的 vmp 爱护。通过虚拟机爱护技术,让 ELF 文件领有独特的可变指令集,大大提高了指令跟踪,逆向剖析的强度和难度。
App 加固后的性能实现
字符串加密 :将 App 的源代码中敏感字符串做随机加密解决。在运行时进行对字符串动静解密,这样就能够防止攻击者,通过利用工具进行动态逆向剖析发现要害字符串信息,从而疾速定位到利用中的业务代码。
控制流平坦化 :将 so 文件中 C\C++ 代码中的执行管制逻辑变换为平坦的管制逻辑,从形象语法树层面进行深度混同,使得其在罕用反编译工具中,极大的升高反编译逆向代码的可读性,减少逆向代码的剖析难度。
指令替换 :对代码中的运算表达式进行等效转换,使其在罕用反编译工具中,进步破解者逆向剖析门槛,无效的爱护外围算法的原始逻辑。
局部变量名称混同 :对源代码中的变量名称进行做混同操作,混同后变量名称变成无任何意义的名称。这给剖析者加大了剖析强度。
符号混同 :对 App 利用中的类名称、函数名称进行混同操作,增大间接用工具剖析难度,让反编译逆向工具,无奈间接通过类名称、函数名称进行疾速定位 App 的外围代码。
混同多样化 :采纳在混同过程中引入随机性技术,在雷同的混同策略下,每次混同后的代码均不统一,进一步晋升攻击者通过利用工具进行动态剖析的难度。
不通明谓词 :将代码中分支跳转判断条件,由原来的确定值变为表达式,减少程序逻辑的复杂性、升高代码的可读性。
防动静调试 :对 App 利用进行防调试爱护、检测到配置防动静调试性能的类、办法、函数被 IDA 逆向工具进行动静调试时候,App 利用进行主动退出运行操作,有利于爱护 App 利用间接被动静调试,从而进步攻防反抗的门槛。
防动静注入 :对 App 利用进行防动静注入爱护,当利用 zygote 或 ptrace 技术进行 App 利用的注入操作时,App 利用进行主动退出运行操作,以此进行进攻攻打方对 App 利用的非法操作,防止动态分析执行代码,从而达到动静爱护 App 利用平安。
HOOK 检测 :对 App 进行防 HOOK 爱护,检测到配置防 hook 爱护性能的类名、办法名、函数名在被 frida、xposed 等工具动静 hook 时候,App 进行主动退出操作,以此进行进步进攻 App 安全性,爱护 App 不被注入攻打,抵挡歹意侵入。
代码段测验 :对 App 利用中的代码段进行完整性校验,发现代码段被篡改,App 利用进行主动退出运行,避免 App 利用中的代码逻辑被篡改,以此进行动静爱护 App 的源代码安全性。
完整性校验 :对 App 中指定的函数级进行完整性校验,当利用被从新签名和代码的完整性受到毁坏时候,检测点进行触发 App 程序闪退,以此抵挡支流的调试器调试剖析,从而达到动静爱护程序平安。
通过实现源到源的虚拟化爱护,增强了源代码的安全性。通过多样化动态防护伎俩,实现控制流混同;字符串加密;符号混同等多样化伎俩全方位爱护代码,大大的进步代码动态逆向能力,让被逆向的代码无奈被了解。通过弱小动静防护伎俩,避免代码逻辑被篡改;爱护源代码反抗支流调试器,防止源代码被动态分析执行,防 HOOK 技术爱护代码不被注入攻打,进步动静逆向剖析的门槛。
App 加固技术总结
通过 App 加固技术不仅能够进步对逆向后的代码浏览难度、而且有利于升高 App 被破解、插入病毒、木马、后门程序等恶意代码的危险,同时也能加强用户隐衷数据、交易数据的安全性。通过 App 加固技术,也是为了更好应答国家对 App 平安合规监管检测的规范,升高 App 被第三方媒体曝光,从而重大影响企业品牌形象和信用,为企业和开发者的业务失常倒退保驾护航。
随着加固技术的疾速倒退和攻防反抗技术的疾速迭代,而虚拟机源码爱护技术作为以后支流的加固技术,置信在将来很长一段时间,它会始终占据主导且当先的位置,因为通过对源码的虚拟化爱护,从而可能为 App 提供足够强度的爱护。