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

2024-02-25

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


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

1. 隔离Java程序

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

2. 加密类文件

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

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

3. 转换为本机代码

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

4. 代码混淆

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

5. 在线加密

APK保护 https://twitter.com/apkprotect是一个 APK 在线加密网站,但活动显然自 2013 年左右以来已停止。提供Java代码和C++代码保护,达到反调试、反编译的效果。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 apk 安全。防止反编译 的相关文章

  • 使用 android 将图像上传到 Flickr

    我需要将 Flickr 与 android 集成 我已完成身份验证 我需要将图像上传到 flickr 但我不知道如何执行相同操作 我参考文件 http www flickr com services api upload api html
  • Android 上的多处理

    我一直在 Android 上执行一些测试 以验证并行化算法 如 FFT 的性能可以提高多少 我通过使用带有 JNI FFTW 的 pthread 和 Java 线程 来自 JTransforms 来实现这些算法 我没有像预期那样通过使用线程
  • 从ndk中的不同线程调用java方法

    我正在尝试使用 android 的 NDK 从 C 中的独立线程调用 java 静态方法 到目前为止我已经 JNIEnv env AttachJava jclass cls2 env gt FindClass com actvt showd
  • 如何检测手机一整圈(360 度)?

    由于我在网络上搜索没有找到任何相关答案 因此我发布了有关检测的问题360度转弯使用加速度计绕其轴的 Android 设备 例如 在横向模式下围绕 y 轴 假设在起始位置 y 值为 0 设备平坦于地面 当手机向前旋转 90 度时y 10 18
  • 如何设计Android建筑物室内地图? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想设计一个 Android 应用程序 它可以帮助学生和其他人在特定建筑物 一层 中导航 显示前往教室的步行方向 我需要帮助 这是您通
  • 将 React Native 应用程序嵌入到现有的 ios/android 应用程序中

    我需要知道是否可以在现有的 ios android 应用程序中 嵌入 一个 React Native 应用程序 而不共享 React Native 应用程序代码 我们目前有一个 React Native 应用程序 它使用一些插件依赖项 并被
  • SDK 管理器缺少模拟器的旧版 Android 系统映像

    我刚刚重新安装了 ADT 捆绑包 20130522 和 Android Studio 因为我的 eclipse 安装再次搞砸了 但那是另一个故事了 在任一版本中 当我启动 SDK Manager 时 都没有任何 2 2 的系统映像 只有 2
  • 移动到SD卡

    我知道从 android 2 2 开始可以使用移动到 SD 卡功能 我想知道有没有办法在我的程序中检测设备是否支持移动到 SD 卡功能 如果支持 则可以移动 否则如果不支持 则什么也不会发生 将在手机内存中 我的主要问题是我的应用程序支持
  • Horizo​​ntalScrollView 将 GridView 缩小为小行

    当我将 Horizo ntalScrollView 放在 GridView 周围时 GridView 会被压缩到左侧的一个小列中 Gridview 的垂直滚动条甚至出现在左侧 Horizo ntalScrollView 的宽度设置为 fil
  • 在 Unity 中构建 apk 应用程序时包含文件

    在unity中构建apk文件时如何将文件和文件夹添加到apk文件中 我需要的是在Android上安装应用程序后 在应用程序的父目录 android data com company product files 中存在一些文件和文件夹 这是我
  • 视图随软键盘移动,遮挡其他 UI 对象

    我有一个容器视图 我希望它始终位于视图底部 位于 ScrollView 下方 ScrollView 有一些 UI 对象 其中一个是 EditText 对象 目前 当用户点击 EditText 对象内部时 android softkeyboa
  • 标签栏随键盘一起上升

    这个问题之前已经发过 但是没有答案 Problem TabBar gt 2 个选项卡 选项卡一有一个Scrollview and an EddiText 标签二 其他 贴带时EditText 软键盘上升 TabBar与它一起 一个丑陋的解决
  • Android 中的 BLE Gatt onConnectionStateChanged 失败,状态为 257

    我正在开发一个同时连接到多个BLE设备的Android应用程序 之后我从这些设备永久读取特征 但过了一会儿 我在onConnectionStateChanged 函数中得到状态257 android文档没有解释错误的原因是什么 或者如何修复
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • Android 10 中没有设备筛选器的 USB_DEVICE_ATTACHED

    我正在开发一个 Android 应用程序 它在清单中为 BroadcastReceiver 注册了四个意图过滤器 这些都是 android hardware usb action USB DEVICE ATTACHED android ha
  • 如何在捆绑中存储稀疏数组

    我有一个SparseArray
  • Android 导航 DeepLinks - 如何区分使用导航操作进行导航与深层链接

    我有导航操作和深层链接 根据您导航的位置 将您带到某个片段 我想确定是使用了深层链接还是仅使用了导航操作 这正是KEY DEEP LINK INTENT https developer android com reference andro
  • android中如何将字符串转换为unicode

    我正在解析一些unicodes from json to my android应用程序 API 给出unicodes像这样的图标 ue600 当我将这个unicode直接添加到textview like textview setText u
  • 如何将 Android 应用程序添加到已在 iOS 应用程序中使用的现有 Firebase 项目?

    我一直在我的 iOS 应用程序中使用 Firebase 项目 我现在想开始为 Android 应用程序使用相同的 Firebase 项目及其所有数据库和存储 在您的应用程序下Overview菜单 你应该按添加另一个应用程序并选择Androi

随机推荐