Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否真的不可能保护Android应用程序免受反向工程的影响?_Java_Android_Reverse Engineering_Decompiling - Fatal编程技术网

Java 是否真的不可能保护Android应用程序免受反向工程的影响?

Java 是否真的不可能保护Android应用程序免受反向工程的影响?,java,android,reverse-engineering,decompiling,Java,Android,Reverse Engineering,Decompiling,众所周知,Android应用程序是用Java编写的。不管怎样,在Java中,不可能像堆栈溢出问题所表明的那样,保护编译后的代码免受反编译或反向工程的影响 如何保护一个包含算法商业秘密的应用程序免受逆向工程的侵害 我所说的“如何”不仅指软件技术,还指其他创造性的方法。使麻烦变得非常便宜,不要在客户端执行的秘密之上构建商业模式。换句话说,不要分享你的秘密。如果可能的话:远程过程调用一个保护良好的服务器(服务器有你想要保护的代码)。不可能保护任何客户端代码不受反向工程的影响。您可以使用或多或少有效的方

众所周知,Android应用程序是用Java编写的。不管怎样,在Java中,不可能像堆栈溢出问题所表明的那样,保护编译后的代码免受反编译或反向工程的影响

如何保护一个包含算法商业秘密的应用程序免受逆向工程的侵害


我所说的“如何”不仅指软件技术,还指其他创造性的方法。

使麻烦变得非常便宜,不要在客户端执行的秘密之上构建商业模式。换句话说,不要分享你的秘密。

如果可能的话:远程过程调用一个保护良好的服务器(服务器有你想要保护的代码)。

不可能保护任何客户端代码不受反向工程的影响。您可以使用或多或少有效的方法混淆代码。而经过优化的x86汇编程序恰好是一个很好的模糊处理

因此,如果你有算法秘密,就把它们放在服务器端

如何锁定已编译的Java类以防止反编译

你不能。任何计划都可能被拥有足够技能、时间和动机的人击败

(顺便提一下,这也适用于编译成二进制的软件。唯一的区别在于反编译所涉及的工作量。)

我的问题是,如何保护一个包含算法商业秘密的应用程序不受逆向工程的影响


不要在用户手机上安装应用程序。或者(更有用的是),在远程(适当保护的)服务器上运行包含商业秘密的代码。

无论您做什么,可能至少可以使反编译变得非常困难,但是:如果在程序中执行/计算某些内容,有关算法的信息必须存在,而且总是有可能找到如何做到这一点(假设对手方面有足够的技能和动力)。始终。

您不能完全保护您的应用程序,因为总会有人破解它

然而,你可以通过免费使用你的应用程序来阻止他们这么做,或者至少非常便宜,这样人们就不会被打扰了


或者,试着让你的Android应用程序保持“哑巴”,就像在后端服务器上保留所有秘密的业务逻辑一样,让你的应用程序使用某种形式的公开服务来显示数据。

我的第一步是优化和混淆已知用于针对Android VM的字节码的代码(通过Dex). 这是一个非常好的工具,它可以增加“反转”代码的难度,同时减少代码的占用空间(在某些情况下,我最近的一个小程序从大约600KB下降到大约50KB)

正如其他人所说,当算法的实现被分发到客户端时,您永远不会获得算法细节的100%安全性。为此,您需要将代码单独保存在服务器上。试图使客户端代码达到接近100%的安全性实际上等于并可能使您的客户端代码在面临网络中断时变得脆弱,并且通常会让(合法)用户感到沮丧

安卓开发者博客上有一些关于“防篡改”安卓应用的文章(他们建议使用ProGuard作为整体方法的一部分)

关于“创造性”方法:一些开发人员采用这种方法来阻止运行时分析,并将其与二进制代码部分的加密相结合(以阻止静态分析),但老实说,一个足够坚定的攻击者可以阻止这些方法,而这可能会导致合法的用户失望,如Windows KB文章所示。因为这个原因,我女朋友的“学开车”DVD软件不会运行,但她当然会责怪Linux

如果你想进一步研究,这可能是一个很好的起点。但是要注意的是,过度使用这些技术会让用户感到沮丧,这可能会比反向工程造成的商业机密损失更大。比如,也许最“创造性”的方法在于调整商业模式,而不是技术

最新的Android于2010年12月6日发布(与Android 2.3姜饼版本一致):

集成的ProGuard支持:ProGuard现在与SDK工具打包在一起。开发人员现在可以将其代码作为发布版本的一个集成部分进行模糊处理


我的算法在服务器上,我从我的智能手机应用程序调用该服务。犯罪者可以对我的智能手机应用程序进行反向工程,以查看我与服务器之间的协议。我可以保护我的算法,但我不能防止未经授权使用我的服务。我不得不接受这个现实,没有解决办法。我必须满足于,只要我通过自己的服务赚钱,那么我就必须承受其他人窃取我服务的潜力。

你想要一种创造性的方法,这里有一种

今天手机上没有反编译的主要程序是什么?无线电固件。为什么?它不是在手机的ARM芯片组上运行,而是在智能手机中越来越多的独立芯片上运行。它不是x86,也不是ARM,它使用高通公司专有的体系结构和指令

  • Java反编译很容易

  • ARM反编译更加困难(Hex-Rays反编译器许可证 起价为1129美元……二进制文件中thumb代码和标准ARM代码的混合是一种痛苦)=>您可以尝试使用Android进行编译 NDK.

  • 目前没有Hexagon反编译器!QDSP规范不公开,即使是盗版版本

问题是,独立软件供应商能否使用大众市场手机中包含的Hexagon固件?这似乎是高通公司的发展方向。查看他们的网站和SnapDragon产品

注:我既不支持高通公司,也不支持封闭源码。