这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战
代码混淆
其实代码混淆不算真正意义上的加密。只是将你的程序源码内容进行重命名降低代码的可读性,提高源码理解时间成本,实际并没有隐藏代码。 如果有足够多的时间和精力还是能够慢慢将源码内容解读,基本就知道源码具体在做些什么。另外代码混淆的覆盖率一般是占源码的10%-30%左右,达不到高覆盖率。 像阿里提出的全量混淆还是能够提高一定的安全性增加逆向分析的难度。
Apk加固
爱加密的apk加固
-
DEX动态分离加密 对
classes.dex中的所有函数功能代码进行提取,然后加密单独存放。能有效防止对dex静态逆向,以及代码内存映射安全。 -
so库文件加密 通过对
so代码的高级混淆、流程混排加密、代码内部字符串加密等,对so源码、so函数名称以及接口调用进行加密隐藏 -
防逆向篡改 防止相关破解工具对
APK进行逆向、动态调试及内存攻击,唯一性验证技术可保证APK内部任何信息被篡改后APK包无法运行
加固之后逆向查看java源码发现增加了SuperApplication 和 NativeApplication class,另外在其他class中你会发现函数具体实现被隐藏了。
这并是dex动态分离加密的结果。那具体的代码实现隐藏到哪里,在assets中你会发现多了一些文件包括so文件。那我们可以猜测具体的函数实现可能
就抽离到so文件中来实现。
阿里云的apk加固
-
反主流静态分析工具 能够有效的防止黑客通过APKTool,dex2jar,JEB等静态分析工具来分析应用的java层代码。
-
SO加壳 通过对SO文件进行加壳保护,能够有效的防止恶意者通过IDA,readelf等工具对SO里面的逻辑进行分析。
-
DEX加壳 通过对DEX文件进行加壳保护,以及动态运行时加载修复等技术手段,能够有效的防止黑客对java层代码的内存dump。
-
java指令翻译 修改java层业务逻辑的调用关系链,即便黑客得到java层的代码,也无法完整的分析整个业务逻辑。
-
java模拟执行 通过将DEX文件中的指令抽离,并使用一个自定义的执行环境进行模拟执行,能够有效防止恶意者对java层代码进行指令级别的dump。