android - 如何使 apk 安全。防止反编译

标签 android apk

我正在开发一个应用程序,它具有 SQLite 数据库来存储必须保护的个人信息。有哪些方法可以保护这些个人数据? APK 可以很容易地被完全反编译,那么我们如何保护 APK?此外,如何保护移动应用程序的数据库?

最佳答案

基本上,有 5 种方法可以保护您的 APK 被破解/反转/重新打包:

1。隔离 Java 程序

最简单的方法是让用户无法访问Java Class 程序。这是最基本的方式,它有多种具体的方式来实现。例如,开发者可以将关键的Java Class放在服务器上,客户端通过访问服务器的相关接口(interface)来获取服务,而不是直接访问Class文件。所以黑客没有办法反编译Class文件。目前,通过接口(interface)提供的标准和协议(protocol)服务越来越多,如HTTP、Web Service、RPC等,但也有很多应用不适合这种保护。例如,独立程序中的Java程序无法隔离。

2。加密类文件

为了防止Class文件被直接反编译,很多开发者会对一些关键的Class文件进行加密,比如注册号、序列号管理等相关类。在使用这些加密的类之前,程序需要先解密这些类,然后将这些类加载到JVM中。这些类可以通过硬件或软件解密。

开发人员经常通过自定义的 ClassLoader 类加载加密类(Applet 不支持自定义的 ClassLoader,因为安全原因)。 Customed ClassLoader 将首先找到加密类,然后解密它们。最后将解密的类加载到 JVM。自定义类加载器是这个保护方法中非常重要的一个类。因为它本身没有加密,所以它可能是黑客的第一个目标。如果已经攻克了相关的解密 key 和算法,那么加密的类就可以很容易地被解密。

3。转换为 native 代码

将程序转换为 native 代码也是防止反编译的有效方法。因为 native 代码通常很难被反编译。开发人员可以将整个应用程序转换为原生代码,也可以只转换关键模块。如果只是转换模块的关键部分,Java程序在使用这些模块时需要JNI技术调用。在使用这种方法保护Java程序时,它放弃了Java的跨平台特性。对于不同的平台,我们需要维护不同版本的原生代码,这会增加软件支持和维护的工作量。但对于一些关键模块,有时这种方案往往是必要的。为了保证这些原生代码不会被修改或替换,开发人员经常需要对这些代码进行数字签名。在使用这些原生代码之前,开发者往往需要对这些本地代码进行认证,以确保这些代码没有被黑客篡改。如果签名检查通过,则开发者可以调用相关的JNI方法。

4。代码混淆

代码混淆是对Class文件进行重新组织和处理,使处理后的代码与未处理的代码完成相同的功能(语义)。但是混淆后的代码很难反编译,即反编译后的代码很难理解,因此反编译人员很难理解真正的语义。理论上,如果黑客有足够的时间,混淆代码仍有可能被破解。甚至有些人正在开发去混淆工具。但从实际情况来看,由于混淆的多元化发展,混淆理论的成熟,Java代码混淆后可以很好地防止反编译。

5。在线加密

APK Protect是 APK 的在线加密网站,但 Activity 显然自 2013 年左右以来已停止。提供Java代码和C++代码保护,实现反调试和反编译效果。

我最初建议您使用最后一种方法,因为它可以为您节省更多时间。根据我的经验,操作非常简单,不会花很长时间。

关于android - 如何使 apk 安全。防止反编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6235290/

相关文章:

java - 如何在不上传apk的情况下在Android设备上运行Java代码

android - 为自己的 android 应用程序实现一个小型更新程序?

android - 如何减小 Apportable 生成的 APK 文件的大小?

android - Libgdx 不播放声音 android

Android R.anim,未找到摇动

android - 在 android 5.0 中更改应用程序语言不起作用

android studio 编译报错 debug-unaligned.apk path not found

当 NestedScrollView 添加到 XML 时,Android Studio 预览消失

android - 从表中选择 2 列,在一个查询

android - 具有不同 native 代码的多个 APK