浅谈安卓开发代码混淆技术
Android开发中的防止重打包和应用安全加固技术(六)

Android开发中的防止重打包和应用安全加固技术随着移动互联网的快速发展,Android应用的数量急剧增加。
然而,随之而来的是日益增加的安全威胁。
重打包是一种常见的安全问题,攻击者可以通过重新打包应用程序添加恶意代码,并将其发布到应用商店或其他渠道上。
为了应对这一问题,开发者需要采取一些防范措施和应用安全加固技术。
一、代码混淆技术代码混淆是一种常见的防止重打包的技术。
它通过修改和重组源代码,使其逻辑难以理解,并增加攻击者进行逆向工程的难度。
例如,可以对变量、函数、类名进行重命名,删除无用的代码和注释。
同时,代码混淆还可以对敏感代码进行加密,以防止攻击者获取关键信息。
这些加密算法可以包括AES、RSA等。
此外,可以使用一些工具或框架来自动化实施代码混淆,如ProGuard和DexGuard等。
二、反调试技术攻击者通常会尝试使用调试器对应用进行分析和破解。
为了防止被恶意调试,开发者可以利用一些反调试技术。
例如,可以在应用程序中检测是否存在调试器,并在检测到调试器时触发一些特定的行为,例如崩溃或停止运行。
此外,还可以使用一些工具或框架来进行反调试操作,如Xposed框架、Frida工具等。
这些工具提供了一些API和功能,可以帮助开发者检测和对抗调试行为。
三、应用程序完整性保护技术应用程序完整性保护技术旨在防止应用程序被篡改或修改。
其中一种常见的技术是应用签名验证。
每个应用程序都会使用开发者的私钥进行签名,通过验证应用签名可以确定其是否被篡改。
此外,可以对应用进行资源文件的完整性检查,以确保应用在运行过程中没有被修改。
四、动态加载和加密技术动态加载和加密技术可以有效防止恶意软件进行静态分析和逆向工程。
在应用程序中,可以使用动态加载技术将敏感代码以及关键数据文件在运行时加载到内存中,而不是在编译时静态加载。
这样一来,攻击者很难通过静态分析获取到这些敏感信息。
同时,可以使用加密技术对关键代码和数据进行加密,只有在需要使用时才进行解密。
Android开发中的应用反编译和代码混淆保护(五)

Android开发中的应用反编译和代码混淆保护Android应用的开发和发布是一个复杂且竞争激烈的过程。
开发者经过数月甚至数年的努力,编写出一个功能强大、用户友好的应用程序,但不幸的是,他们的劳动成果很容易被他人复制、篡改甚至盗窃。
为了保护开发者的利益和应用程序的安全性,应用反编译和代码混淆成为了Android开发中不可忽视的重要环节。
一、应用反编译的风险和挑战在Android开发中,应用的APK文件是一个包含了可执行代码和资源文件的压缩包。
由于APK文件的本质,这使得它容易被反编译,进而暴露应用程序的源代码和敏感信息。
一旦黑客获得了应用的源代码,他们就可以轻易地篡改应用的功能,嵌入恶意代码或者窃取用户的隐私信息。
因此,应用反编译是一项必要的任务,以保障代码的安全性和应用的可靠性。
然而,应用反编译并不是一项容易的任务。
当开发者上传应用到Google Play商店之后,APK文件将自动被Google Play进行代码验证和防护,这使得大多数的简单反编译方法无法成功。
而且,应用反编译也需要一定的技术水平和耐心。
反编译的过程中,黑客们需要了解和掌握DEX文件格式、Dalvik虚拟机指令集等相关知识。
因此,开发者需要采取一些措施来提高应用的防护性。
二、代码混淆保护的必要性和原理代码混淆是一种在编译过程中对应用程序代码进行变形、重组和操纵的技术。
通过代码混淆,开发者可以使得应用程序的逻辑和结构变得模糊,以干扰和困惑那些试图进行反编译的黑客。
代码混淆可以对变量、类、方法、字符串等进行重命名、删除无效代码、修改控制流等操作,使得应用程序的源代码变得难以阅读和理解。
代码混淆保护对于Android应用开发者来说是必要的。
通过混淆代码,开发者可以最大程度地降低黑客反编译并篡改应用程序的可能性。
在遭受沉重打击的黑客面前,应用的安全性将得到有效的保护。
三、常用的代码混淆技术代码混淆是一项技术性较强的工作,以下是一些常用的代码混淆技术供开发者参考:1.变量与方法重命名:通过将变量和方法改名为无意义的随机字符串,使得应用代码变得难以理解和阅读。
移动应用开发中常见的代码混淆与反编译保护技术

移动应用开发中常见的代码混淆与反编译保护技术在如今移动互联网的高速发展下,移动应用程序的开发变得越来越受欢迎。
然而,随着应用程序的普及,一些不法分子也开始利用各种手段来窃取应用程序的代码,进行盗版和篡改。
为了保护应用程序的安全,开发者们力求采取一系列的代码混淆与反编译技术,以提高代码的安全性和保护应用程序的知识产权。
一、代码混淆技术代码混淆是一种将源代码转换成难以理解和阅读的形式的技术,通过代码混淆可以增加对代码的保护,减少被反编译的风险。
常见的代码混淆技术包括变量和函数的重命名、代码结构的改变、无用代码的插入等。
1. 变量和函数的重命名:通过将变量和函数进行重命名,可以使代码的阅读性大大降低,增加代码的混淆性。
开发者可以使用自动化工具将变量和函数名替换为无意义的字符串,使得代码难以理解和反编译。
2. 代码结构的改变:改变代码的逻辑结构和代码块的位置可以使代码更复杂、更难以理解。
开发者可以使用代码混淆工具重新组织代码的结构,增加代码的抽象性,增加代码的混淆程度。
3. 无用代码的插入:在代码中插入大量的无用代码可以增加代码的复杂性,使得反编译者难以分析代码的真正逻辑。
开发者可以通过自动化工具在代码中插入大量的无用代码,提高代码的混淆程度。
二、反编译保护技术反编译保护技术旨在防止应用程序被反编译,以减少盗版和篡改的风险。
常见的反编译保护技术包括代码加密、代码壳化和虚拟机技术。
1. 代码加密:通过对代码进行加密,可以增加代码的保护性,使得反编译者无法轻易获取源代码。
开发者可以使用加密算法将关键代码进行加密,并在运行时进行解密,以提高代码的安全性。
2. 代码壳化:代码壳化是一种将应用程序的二进制代码进行包装和加密的技术,可以有效防止应用程序被反编译。
开发者可以使用代码壳化工具将应用程序的二进制代码进行加密,以增加代码的安全性和反编译的难度。
3. 虚拟机技术:通过将应用程序代码编译成虚拟机指令,可以增加代码的保护性。
读懂Android中的代码混淆

读懂Android中的代码混淆本文为本人的一些实践总结,介绍一些混淆的知识和注意事项。
希望可以帮助大家更好的学习和使用代码混淆。
作者:技术小黑屋来源:知乎|2017-03-02 13:05收藏分享本文为本人的一些实践总结,介绍一些混淆的知识和注意事项。
希望可以帮助大家更好的学习和使用代码混淆。
什么是混淆关于混淆维基百科上该词条的解释为代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。
代码混淆影响到的元素有∙类名∙变量名∙方法名∙包名∙其他元素混淆的目的混淆的目的是为了加大反编译的成本,但是并不能彻底防止反编译.如何开启混淆∙通常我们需要找到项目路径下app目录下的build.gradle文件∙找到minifyEnabled这个配置,然后设置为true即可.一个简单的示例如下1. buildTypes {2.3. release {4.5. minifyEnabled true6.7. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'proguard是什么Java官网对Proguard的定义ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining classes, fields, and methods using short meaningless names. Finally, it preverifies the processed code for Java 6 or higher, or for Java Micro Edition.∙Proguard是一个集文件压缩,优化,混淆和校验等功能的工具∙它检测并删除无用的类,变量,方法和属性∙它优化字节码并删除无用的指令.∙它通过将类名,变量名和方法名重命名为无意义的名称实现混淆效果.∙最后它还校验处理后的代码混淆的常见配置-keepKeep用来保留Java的元素不进行混淆. keep有很多变种,他们一般都是∙-keep∙-keepclassmembers∙-keepclasseswithmembers一些例子保留某个包下面的类以及子包1. -keep public class .widget.**保留所有类中使用otto的public方法1. # Otto2.3. -keepclassmembers class ** {4.5. @com.squareup.otto.Subscribe public *;6.7. @com.squareup.otto.Produce public *;8.9. }保留Contants类的BOOK_NAME属性1. -keepclassmembers class com.example.admin.proguardsample.Constants {2.3. public static ng.String BOOK_NAME;4.5. }更多关于Proguard keep使用,可以参考官方文档-dontwarndontwarn是一个和keep可以说是形影不离,尤其是处理引入的library时.引入的library可能存在一些无法找到的引用和其他问题,在build时可能会发出警告,如果我们不进行处理,通常会导致build中止.因此为了保证build继续,我们需要使用dontwarn处理这些我们无法解决的library的警告.比如关闭Twitter sdk的警告,我们可以这样做1. -dontwarn com.twitter.sdk.**其他混淆相关的介绍,都可以通过访问官方文档获取.哪些不应该混淆反射中使用的元素如果一些被混淆使用的元素(属性,方法,类,包名等)进行了混淆,可能会出现问题,如NoSuchFiledException或者NoSuchMethodException等.比如下面的示例源码1. //Constants.java2.3. public class Constants {5. public static String BOOK_NAME = "book_name";6.7. }8.9. //MainActivity.java10.11. Field bookNameField = null;12.13. try {14.15. String fieldName = "BOOK_NAME";16.17. bookNameField = Constants.class.getField(fieldName);18.19. Log.i(LOGTAG, "bookNameField=" + bookNameField);20.21. } catch (NoSuchFieldException e) {22.23. e.printStackTrace();24.25. }如果上面的Constants类进行了混淆,那么上面的语句就可能抛出NoSuchFieldException.想要验证,我们需要看一看混淆的映射文件,文件名为mapping.txt,该文件保存着混淆前后的映射关系.1. com.example.admin.proguardsample.Constants -> com.example.admin.proguardsample.a:2.3. ng.String BOOK_NAME -> a4.5. void <init>() -> <init>6.7. void <clinit>() -> <clinit>8.9. com.example.admin.proguardsample.MainActivity -> com.example.admin.proguardsample.MainActivity:10.11. void <init>() -> <init>12.13. void onCreate(android.os.Bundle) -> onCreate从映射文件中,我们可以看到∙Constants类被重命名为a.∙Constants类的BOOK_NAME重命名了a然后,我们对APK文件进行反编译一探究竟.推荐一下这个在线反编译工具decompile Android .apk ✓ONLINE ✓注意,使用jadx decompiler后,会重新命名,正如下面注释/* renamed from: com.example.admin.proguardsample.a */所示.1. package com.example.admin.proguardsample;2.3. /* renamed from: com.example.admin.proguardsample.a */4.5. public class C0314a {6.7. public static String f1712a;8.9. static {10.11. f1712a = "book_name";12.13. }14.15. }而MainActivity的翻译后的对应的源码为1. try {2.3. Log.i("MainActivity", "bookNameField=" + C0314a.class.getField("BOOK_NAME"));4.5. } catch (NoSuchFieldException e) {6.7. e.printStackTrace();8.9. }MainActivity中反射获取的属性名称依然是BOOK_NAME,而对应的类已经没有了这个属性名,所以会抛出NoSuchFieldException.注意,如果上面的filedName使用字面量或者字符串常量,即使混淆也不会出现NoSuchFieldException异常。
android 混淆规则

android 混淆规则一、什么是Android混淆Android混淆(obfuscation)是一种优化工具,它可以将代码以及相关的文件有效地进行混淆和加密,从而使代码更难被人理解和阅读,从而保护软件的源代码安全,避免在破解者的手里泄露。
二、Android混淆的目的Android混淆的目的是保护软件的源代码,使其难以被破解或者恶意的使用。
Android 混淆的过程是根据可执行文件的程序、类、变量、函数等内容自动生成。
通过混淆,将源代码混淆之后,破解者不可能识别其中的原理、内部结构和工作原理。
三、Android混淆规则1、改变代码中原来的函数、变量和类名。
2、为固定的字符串添加不可读的字符。
3、移除代码中没有使用的字符。
4、将可执行文件和可执行程序之间的依赖关系混淆掉。
5、将可执行文件中的特定字段替换成更加难识别的字段。
6、移除设置中的不必要的零件或者信息。
7、添加混淆代码和模块,拦截破解者的识别行为。
8、对代码进行优化,精简注释,增加可执行文件的体积。
9、删除在编译期间产生的辅助文件,如调试文件和日志文件。
10、利用安全技术,如数据加密、数字签名和令牌机制,保护应用程序不被恶意修改。
四、Android混淆的优缺点优点:1、可以减少文件的体积,改善APP的性能,减少使用的带宽等。
2、有效的加密防止恶意破解,提高应用程序的安全性。
3、有效可以防止程序泄漏。
4、可以提高APP程序的开发周期。
缺点:1、Android混淆过程会使软件变得复杂,从而影响软件及其依赖库的更新。
2、Android混淆后,APP可能不稳定,可能会造成应用程序出现崩溃等问题。
3、混淆可能会影响APP程序的索引,从而影响APP在市场上的发布和推广。
使用ProGuard对Android应用进行代码混淆

使用ProGuard对Android应用进行代码混淆代码混淆是一种常用的安全措施,可以对Android应用程序的代码进行加密和优化,以提高应用的安全性和性能。
ProGuard是一款广泛使用的代码混淆工具,它可以对Java代码进行压缩、优化和混淆,从而减小应用的包大小,提高应用的运行效率,并增加反编译的难度。
本文将介绍如何使用ProGuard对Android应用进行代码混淆的步骤和注意事项。
一、什么是代码混淆代码混淆是指通过对代码进行重命名、去除无用代码、优化代码结构等方式,使得源代码在保持功能不变的前提下,增加阅读和理解的难度,从而达到保护应用程序代码的目的。
代码混淆可以减少应用程序的被逆向工程的风险,提高应用的安全性。
二、ProGuard的安装和配置1. 下载ProGuard首先,需要从官方网站下载ProGuard的压缩包,解压后可以得到proguard.jar文件。
2. 配置ProGuard在Android Studio项目的app目录下创建一个proguard-rules.pro文件(如果已存在,则进行修改),用于配置ProGuard的规则。
在proguard-rules.pro文件中,可以通过添加一些规则来指定哪些类、方法、字段需要被保留,哪些可以被混淆、优化或删除。
例如:```-keep public class com.example.MyClass{public *;}```上述规则指定了保持com.example.MyClass类及其所有公共成员不被混淆。
三、配置Android Gradle插件为了在构建过程中自动使用ProGuard工具进行代码混淆,需要在项目的build.gradle文件中进行配置。
在android块下添加以下代码:```buildTypes{release{minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}```上述代码表示在release构建类型中开启代码混淆,并指定了默认的ProGuard文件和自定义的proguard-rules.pro文件。
Android开发中的防止重打包和应用安全加固技术(五)

Android开发中的防止重打包和应用安全加固技术随着Android应用的普及和市场的竞争加剧,开发者们不仅需要关注应用功能的实现,还要重视应用的安全性和防范对抗重打包的措施。
本文将介绍Android开发中的防止重打包和应用安全加固技术。
一、代码混淆技术代码混淆是Android开发中常用的一种防止反编译的技术手段。
通过将代码中的类名、方法名、参数名等进行重命名和替换,使得反编译后的代码变得难以阅读和理解,从而增加攻击者逆向工程的难度。
常用的代码混淆工具有ProGuard和DexGuard。
ProGuard是一种免费的代码混淆工具,可以在编译打包的过程中进行开启;而DexGuard是商业版的代码混淆工具,提供了更加高级的混淆和保护措施。
代码混淆技术是一种常见且有效的防止重打包的手段,但也不是绝对安全的。
攻击者仍然可以通过其他手段进行反混淆和分析,因此综合使用其他的防护技术是非常必要的。
二、反调试和反脱壳技术为了防止应用在运行时被调试、破解和逆向分析,Android开发者可以采取一些反调试和反脱壳的技术手段。
一种常见的技术是使用Traceview和DDMS进行性能分析和代码跟踪,同时检测应用是否使用了Xposed框架等调试工具。
当检测到使用了这些工具时,应用可以主动触发异常或退出。
另外一种常见的技术是对应用进行加壳处理,将应用的核心代码和资源文件加密和混淆,以增加逆向分析的难度。
脱壳行为将会被检测出来,并执行相应的反制措施。
三、数字签名和应用完整性验证数字签名是Android应用开发中保证应用安全性的核心基础。
在发布应用之前,开发者需要使用私钥对应用进行签名,将签名信息嵌入到应用的APK文件中。
在应用安装过程中,Android系统会对应用进行数字签名验证。
如果应用签名不匹配或者签名文件被修改,系统会提示安装失败或者警告用户潜在的风险。
在应用运行时,开发者可以通过校验应用的签名信息,确保应用的完整性和合法性。
Android开发中的应用反编译和代码混淆保护(三)

Android开发中的应用反编译和代码混淆保护在如今移动应用开发领域的竞争激烈环境下,应用程序的安全性变得越来越重要。
Android作为一款流行的移动操作系统,其应用开发者面临着应用反编译的风险。
为了保护应用程序代码的安全性,开发者需要采取适当的措施进行代码混淆和反编译保护。
本文将探讨Android开发中的应用反编译问题,并介绍一些常用的代码混淆和保护技术。
1. 应用反编译的风险随着技术的不断发展,越来越多的人学会了如何反编译Android 应用程序。
应用反编译使得黑客可以轻松获取源代码,从而发现应用程序中可能存在的漏洞。
这些漏洞可能包括密码存储不安全、网络请求不加密等问题,给应用程序的安全性带来了严重威胁。
2. 代码混淆保护代码混淆是一种常用的保护应用程序的技术。
通过代码混淆,开发者可以将源代码中的变量、方法名和类名进行重命名,使得反编译后的源代码难以理解和修改。
代码混淆可以有效地增加应用程序的安全性,防止黑客通过反编译获取源代码。
3. 常用的代码混淆工具在Android开发中,有许多可以实现代码混淆的工具。
其中,ProGuard是应用广泛的一种代码混淆工具。
ProGuard能够对Android 应用程序的字节码进行缩小、优化和混淆。
通过删除无用的代码、重命名变量名和方法名,并对代码流进行修改,ProGuard可以使反编译后的源代码难以理解和修改。
4. 自定义代码混淆规则除了使用常用的代码混淆工具外,开发者还可以通过自定义代码混淆规则进一步提高应用程序的安全性。
通过定义自己的规则,开发者可以更加灵活地对代码进行混淆。
例如,可以定义规则使得一些关键函数和类名无法被反编译,或者在代码中添加一些虚假的逻辑,以混淆黑客对应用程序的分析。
5. 其他防护措施除了代码混淆外,还有一些其他的防护措施可以加强应用程序的安全性。
例如,开发者可以在应用程序中使用加密算法对敏感数据进行加密,以防止数据泄漏。
另外,应用程序可以使用数字签名来验证应用的完整性,防止黑客篡改应用程序的代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈安卓开发代码混淆技术
关键字:代码混淆,代码保护,应用安全,应用加固,安卓安全
随着移动互联网的快速发展,应用的安全问题不断涌现出来,于是越来越多的应用开发者将核心代码由java层转到native层,以对抗成熟的java逆向分析工具,然而如果native层的代码如果没有进行任何保护,还是比较容易被逆向分析工作者获取其运行逻辑,进而完成应用破解或者进行其他的操作。
那么提高native代码的安全性有什么好办法吗?答案是肯定的,今天我们就来介绍一种有效对抗native层代码分析的方法——代码混淆技术。
那么,什么是代码混淆呢?代码混淆的学术定义如下:
代码混淆(code obfuscation)是指将计算机程序的代码,转换成一种功能上等价,所谓功能上的等价是指其在变换前后功能相同或相近。
其解释如下:程序P经过混淆变换为P‘,若P没有结束或错误结束,那么P’也不能结束或错误结束;而且P‘程序的结果应与程序P具有相同的输出。
否则P’不是P的有效的混淆。
目前对于混淆的分类,普遍是以Collberg 的理论为基础,分为布局混淆(layout obfuscation)、数据混淆(data obfuscation)、控制混淆(control obfuscation)和预防混淆(preventive obfuscation)这四种类型。
1. 布局混淆
布局混淆是指删除或者混淆软件源代码或者中间代码中与执行无关的辅助文本信息,增加攻击者阅读和理解代码的难度。
软件源代码中的注释文本、调试信息可以直接删除,用不到的方法和类等代码或数据结构也可以删除,这样
即可以使攻击者难以理解代码的语义,也可以减小软件体积,提高软件装载和执行的效率。
软件代码中的常量名、变量名、类名和方法名等标识符的命名规则和字面意义有利于攻击者对代码的理解,布局混淆通过混淆这些标识符增加攻击者对软件代码理解的难度。
标识符混淆的方法有多种,例如哈希函数命名、标识符交换和重载归纳等。
哈希函数命名是简单地将原来标识符的字符串替换成该字符串的哈希值,这样标识符的字符串就与软件代码不相关了;标识符交换是指先收集软件代码中所有的标识符字符串,然后再随机地分配给不同的标识符,该方法不易被攻击者察觉;重载归纳是指利用高级编程语言命名规则中的一些特点,例如在不同的命名空间中变量名可以相同,使软件中不同的标识符尽量使用相同的字符串,增加攻击者对软件源代码的理解难度。
布局混淆是最简单的混淆方法,它不改变软件的代码和执行过程。
2. 数据混淆
数据混淆是修改程序中的数据域,而对代码段不作处理。
常用的数据混淆方式有合并变量、分割变量、数组重组、字符串加密等。
合并变量是将几个变量合并为一个数据,原来的每个变量占据其中一个区域,类似于一个大的数据结构。
分割变量则是将一个变量分割为两个变量,对分割前后提供一种映射关系,将对一个变量的操作转化为对分割后两个变量的操作。
数组重组有数组的分割、合并、折叠和平滑等几种方式。
分割是将一个数组分成2个或多个相同维度的数组;合并则相反;折叠是增加数组的维数;平滑则是相反。
在ELF文件中,全局变量和常量字符串存放在数据段中,反汇编工具可以轻易查找到字符串与代码之间的引用关系。
在软件破解中,通过一些字符串提示可
以很方便的找到代码关键语句,从而破解软件。
字符串加密则可以对这些明显的字符串进行加密存储,在需要时再进行解密。
3. 控制混淆
控制混淆也称流程混淆,它是改变程序的执行流程,从而打断逆向分析人员的跟踪思路,达到保护软件的目的。
一般采用的技术有插入指令、伪装条件语句、断点等。
伪装条件语句是当程序顺序执行从A到B,混淆后在A和B之间加入条件判断,使A执行完后输出TRUE或FALSE,但不论怎么输出,B一定会执行。
控制混淆采用比较多的还有模糊谓词、内嵌外联、打破顺序等方法。
模糊谓词是利用消息不对称的原理,在加入模糊谓词时其值对混淆者是已知的,而对反混淆者却很难推知。
所以加入后将干扰反汇编者对值的分析。
模糊谓词的使用一般是插入一些死的或不相关的代码(bogus code),或者是插入在循环或分支语句中,打断程序执行流程。
内嵌(in-line)是将一小段程序嵌入到被调用的每一个程序点,外联(out-line)是将没有任何逻辑联系的一段代码抽象成一段可被多次调用的程序。
打破顺序是指打破程序的局部相关性。
由于程序员往往倾向于把相关代码放在一起,通过打破顺序改变程序空间结构,将加大破解者的思维跳跃。
4. 预防混淆
预防混淆一般是针对专用的反编译器设计的,目的就是预防被这类反编译器反编译。
他是利用特定的反编译器或反混淆器的弱点进行专门设计。
预防混淆对于特定的反编译器非常有效,所以在使用时要综合利用各种反编译器的特点进行设计。
市面的安全服务供应商如腾讯御安全,所提供的保护方案提供了以上所述四种混淆分类的多维度的保护;布局混淆方面:提供了针对native代码层中的函数名进行了混淆删除调试信息等功能;数据混淆方面:提供了针对常量字符串加密及全局变量的混淆的功能;控制混淆方面:针对代码流程上,提供了扁平化,插入bogus 分支以及代码等价变换等功能;预防混淆方面:在混淆过程中加入了针对主流反编译器的预防混淆的代码,能够有效地抵抗其分析。
此外还对应用开发者提供不同等级的保护力度及多种混淆方式的功能的选择,用户可以根据自己的需求定制不同的混淆功能保护。
安全保护方案除了提供代码混淆保护方面的技术,还提供代码虚拟化技术及反逆向、反调试等其他应用安全加固方案,综合使用多种代码保护方案可以有效地提高应用代码安全。
更多技术方案:腾讯御安全技术博客。