NDK 是减少逆向工程的替代方案吗?

Is NDK an alternative to reduce reverse engineering?

我已经放弃尝试让 Proguard 在 Eclipse 或 Android Studio 上工作。文档是神秘的,无论我尝试什么,Proguard 混淆 apk 都会失败。关于 Proguard 的问题在这个论坛上也没有得到太多关注。

标准 Android apk 文件的设计几乎是为了邀请逆向工程,我正在寻找一些方法来保护我的代码。不是我所有的代码只是一些方法。

在我开始编写 Android 应用程序之前,我用 C 和 C# 编写了应用程序,我熟悉这两种语言并且实际上更喜欢它们中的任何一种而不是 Java 所以我已经最近一直在阅读有关 NDK 的内容。

当然,NDK 与速度有关,但我想知道它是否也有助于保护我的代码免受黑客的逆向工程和检查。我知道这是 "compiled" 代码,所以我想源代码不会可见。

我找对树了吗?

谢谢,

院长

是的,如果您使用 NDK,则很难对您的代码进行逆向工程,而且不太可能有人会尝试。

本机 C 代码更难反编译,但可以使用正确的工具轻松反编译。

特别是如果你只用C开发小部分,然后使用JNI与之通信,接口清晰,任何反编译你的应用程序的人也可以使用它。如果您可以简单地执行代码,谁还需要知道您的代码是如何工作的?

结论:本机代码可能更难反编译。但通常唯一的区别是你需要不同的工具,你需要更多的知识和实践来反编译。另外修改一些东西通常更复杂。

这取决于您正在寻找什么样的保护。如果这是一种革命性的算法,可以让您以比现在快得多的速度完成一些非常流行的任务,那么无论您如何混淆代码,您的代码都将被逆向工程;你需要专利保护。如果你想隐藏一些不友好的行为(比如监视你的用户),它会被发现。所以不要这样做。如果你想保护某些client-server通信协议,它可能容易受到其他地方的攻击。

但在某些情况下,使用 C++ 确实有帮助;分发单体共享库 "black box" 可能比处理 Java API 更容易。我认为混淆不能用于您作为库出售的代码。

当我们销售一个庞大的通信SDK时,我们就采用了这种方式,我们所有的Java代码都简单地向客户开放(部分本来是changed/customized,但有些类在header"Please don't modify this class, there is very high chance that the product will not work properly if you mess with it"中进行了警告。

仅在 NDK 中实现一些方法可能不会有太大帮助。但是,如果您还对 NDK 代码应用混淆甚至 运行 时间保护技术,则可以提高对逆向工程的抵抗力。一个简单的网络搜索给出 a list of free tools。您还可以与 Arxan 等商业解决方案提供商合作。此外,如果您将应用程序的更多逻辑放在本机代码中,通常可以提高混淆级别。