关于android:NDK是减少逆向工程的替代方案吗?

Is NDK an alternative to reduce reverse engineering?

我已经放弃尝试让Proguard在Eclipse或Android Studio上工作。 文档是神秘的,无论我尝试什么,Proguard混淆了apk的打击。 关于Proguard的问题也没有引起很多关注。

标准的Android apk文件旨在几乎邀请逆向工程,我正在寻找一些方法来保护我的代码。 并非我的所有代码都只是一些方法。

在我开始编写Android应用程序之前,我在C和C#中编写了应用程序,我对这两种语言都很熟悉,并且实际上更喜欢Java和Java,因此我最近一直在阅读有关NDK的内容。

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

我吠叫正确的树吗?

谢谢,

院长


这取决于您正在寻找什么样的保护。如果这是一个革命性的算法,它允许你比现在快得多地执行一些非常流行的任务,那么无论你如何模糊它,你的代码都将被反向设计;你需要专利保护。如果你想隐藏一些不友好的行为(比如监视你的用户),它就会被发现。所以不要这样做。如果您想保护某些客户端 - 服务器通信协议,可能会受到其他地方的轻松攻击。

但在某些情况下,C ++确实有帮助;分发单片共享库"黑盒子"比处理Java API更容易。我不认为混淆可以对您作为库销售的代码起作用。

当我们销售一个巨大的通信SDK时,我们遵循这种方法,我们所有的Java代码都只是向客户开放(部分内容旨在进行更改/自定义,但有些类在标题中带有警告"请不要修改此如果你把它搞得一团糟,那么产品很有可能无法正常工作"。


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

特别是如果你只用C开发小部件然后使用JNI与它进行通信,这是一个清晰的界面,任何反编译你的应用程序的人也可以使用它。如果您可以简单地执行代码,谁需要知道代码的工作原理?

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


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


是的,如果你使用NDK,你可能很难对你的代码进行逆向工程,而且任何人都不可能尝试。