我有一个数据处理算法,我将申请一个Android应用程序。算法可以通过Java或本地代码C实现。但是对于算法实现Java或C来说更安全,因为到目前为止我知道Android Dex文件可以被反向设计。它也适用于C?
答案 0 :(得分:4)
当您使用C(本机)而不是java时,代码安全性是最大的。
“到目前为止,我知道Android Dex文件可以进行逆向工程。它也是 适用于C?“
在JAVA中执行
通过将代码包放到库中,您可以使您的Java代码安全。即使它的反向工程或你的apk被破坏,你的代码将不可见,它将像加密格式。将算法包更改为库并添加到项目资产文件夹和构建路径。
在C中执行
如果你在C中这样做,那么确定破坏你的apk的人看不到你的C代码。有时它会可见,但它不会是可读格式。如果您通过C实现它,它将使进程比在java中更快,并且您将分配更多内存来执行该过程。堆内存不会对您的代码进行限制。唯一的问题是,由于使用JNI,获取错误的机会更多,并且很难在运行时跟踪错误。
注意:由于黑客攻击可以通过多种方式完成。我无法提供任何补充保证。但在大多数情况下,这就是事情..将您的算法包添加到库中并添加它使用buildpath 或以原生方式进行投影,您可以使代码安全到最大程度。
答案 1 :(得分:4)
如果您希望算法非常安全,请将其保留在脑中。
如果您希望算法相对安全,请将其保存在服务器上。
任何代码都可以进行逆向工程。几十年来,人们一直在对编译的C代码进行逆向工程。口译员的字典,如Java和Dalvik,往往更容易进行逆向工程,将其纳入更多人的技能组合。但是,受保护的是软件许可,这往往更令人担忧。如果您担心许可之外的“数据处理算法”,那么您的平均脚本小子并不会关心它,而真正想知道该算法是什么的竞争对手如果能够访问代码,无论是用Java,C还是手工编写的汇编程序编写的。
因此,如果您不希望人们对您的代码进行反向工程,请不要让他们拥有代码。将算法保留在您的服务器上。
如果您对此的回答是“我不希望我的应用程序依赖于服务器”,那么您明确指出您的“数据处理算法”并不重要,至少与具有该依赖性相比。那时,你真的必须开始提出“数据处理算法”的重要性。