关于java:保护Android应用程序不受逆向工程的影响真的不可能吗?

Is it really impossible to protect Android apps from reverse engineering?

正如我们所知道的,Android应用程序是用Java编写的。在爪哇,无论你做什么,都不可能保护编译的代码不受反编译或逆向工程的影响,因为堆栈溢出问题如何锁定编译的Java类以防止反编译?建议。

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

"如何"不仅指软件技术,也指其他创造性的方法。


对我来说,第一站是优化和模糊的代码与proguard,这是已知的工作针对Android的dalvik虚拟机(通过dex)字节代码。这是一个非常好的工具,可以增加代码"反转"的难度,同时缩小代码的占地面积(在某些情况下,这是一个相当大的难题:我最近的一个小程序从大约600 kb降到了大约50 kb)。

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

Android开发者博客上有一些关于"防篡改"Android应用程序的有用文章(他们建议使用Proguard作为整体方法的一部分)。

关于"创造性"方法:一些开发人员使用调试器检测技术来防止运行时分析,并将其与二进制代码的部分加密相结合(以阻止静态分析),但老实说,足够有决心的攻击者可以绕过这些方法,同时它可以导致合法的用户失望,如WI所示Windows知识库文章游戏:错误消息:检测到一个调试器:卸载该调试器,然后重试。我女朋友的"学习驾驶"DVD软件不会在virtualbox下运行,因为这个原因,但她责怪Linux!

OpenRCE和维基百科关于模糊代码的文章可能是很好的起点,如果你想进一步研究这个问题的话。但是要注意的是,与通过反向工程丢失商业机密相比,过度使用这些技术会让用户感到沮丧,从而可能会损失更多。正如安东所说,也许最具创造性的方法在于调整商业模式而不是技术。

2010年12月6日最新的Android SDK更新(与Android 2.3姜饼版本同时发布):

Integrated ProGuard support: ProGuard is now packaged with the SDK Tools. Developers can now obfuscate their code as an integrated part of a release build.


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


让麻烦变得如此便宜,不要在客户机端执行的秘密之上构建业务模型。换句话说,不要分享你的秘密。


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

所以如果你有算法秘密,把它们放在服务器端。


How to lock compiled Java Classes to prevent decompilation

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

(顺便说一下,这也适用于编译为二进制的软件。唯一的区别是反编译的工作量。)

My question is how one would go about protecting an app that contains algorithmic trade secrets from reverse-engineering?

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


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

但是,你可以通过让你的应用程序免费,或者至少是非常便宜的方式来阻止他们这样做,这样人们就不会被打扰了。

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


不管你做什么,也许至少你可以让它很难反编译,但是:如果某个程序中执行/计算了某个东西,那么关于算法的信息就必须存在,并且总是有可能找到如何得到它(假设你对手有足够的技能和动机)。总是。


你不能百分之百地保护你的安卓代码从逆向工程。如果您想保护某个密钥,那么可以在调用Web服务时从提供加密密钥的服务器中获得帮助,并将该密钥用于代码中。


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

今天还没有解压的手机上的主要程序是什么?无线电固件。为什么?它不在手机的ARM芯片组上运行,而是在一个单独的高通六边形上运行,这种六边形越来越多地出现在智能手机上。它不是x86,也不是ARM,它使用高通公司专有的架构和指令。

  • Java反编译很容易。

  • ARM反编译更加困难(Hex-Rays反编译许可证从1129美元开始…在二进制文件中,拇指代码和标准ARM代码的混合是一个难题)=>您可以尝试使用Android进行编译。NDK。

  • 目前没有六边形反编译器!QDSP规范并不是公开的,甚至是盗版的。

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

注:我既不是专业的高通公司,也不是专业的闭源公司。但这条线索对这种解决方案很有吸引力。


我在服务器上有我的算法,我从我的智能手机应用程序调用该服务。罪犯可以反向工程我的智能手机应用程序,以查看我的协议与我的服务器。我可以保护我的算法,但我不能防止未经授权使用我的服务。我必须接受这个现实,没有解决方案。我必须满足于,只要我用我自己的服务赚钱,那么我就必须与其他吸纳我服务的人一起生活。