保护Android应用程序免受逆向工程真的不可能?

我们知道,Android应用程序是用Java编写的。 在Java中,无论你做什么 ,都不可能保护已编译的代码免受反编译或逆向工程,因为堆栈溢出的问题如何locking已编译的Java类以防止反编译? 提示。

如何保护包含algorithm商业秘密的应用程序免于逆向工程?

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

对于我来说,第一站就是使用ProGuard来优化和混淆代码, ProGuard已知可以使用针对Android的Dalvik VM(通过Dex)的字节代码。 这是一个非常棒的工具,可以在缩小代码覆盖范围的同时,增加“反转”代码的难度(在某些情况下,显着的是:最近的一个小程序从大约600KB降低到大约50KB)。

就像其他人所说的,当你的algorithm的实现被分发给客户端时,你将永远无法获得algorithm细节的100%的安全性。 为此,您需要将代码保存在服务器上。 尝试为客户端代码提供接近100%的安全性,这实际上相当于DRM,并且可以使您的客户端代码在面临networking中断时变得脆弱,而且通常会让(合法)用户感到挫败。

Android开发者博客在“防篡改”Android应用程序方面有一些有用的 文章 (他们推荐使用ProGuard作为整体方法的一部分)。

关于“创造性”的方法:一些开发人员使用debugging器检测技术来防止运行时分析,并将其与二进制代码部分的encryption结合起来(以防止静态分析),但是说实话,一个足够坚定的攻击者可以规避这些,虽然它可以导致合法的用户挫败,如Windows知识库文章游戏:错误消息:debugging器已被检测到:卸载debugging器,然后再试一次 。 这个原因,我的女朋友的“学习驱动”DVD软件不能在VirtualBox下运行,但她当然责备Linux!

OpenRCE和维基百科有关混淆代码的文章可能是一个很好的起点,如果你想进一步研究。 但要注意的是,通过过度热心地使用这些技术,使用户感到挫折的可能性会比通过逆向工程造成的商业秘密损失要大得多。 就像Anton S所说 ,也许最“创新”的方法是调整商业模式,而不是技术。

2010年12月6日最新的Android SDK更新 (与Android 2.3 Gingerbread发布一致):

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

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

保护任何客户端代码免受逆向工程是不可能的。 您可以使用更多或更less的有效方法来混淆您的代码。 经过优化的x86汇编器恰好是一个相当不错的混淆。

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

让它变得如此便宜以至于不会在客户端执行的秘密之上构build您的业务模型。 换句话说,不要分享你的秘密。

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

你不能。 任何scheme都可以被有足够的技巧,时间和动力的人所击败。

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

我的问题是,如何保护包含algorithm商业秘密的应用程序免于逆向工程?

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

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

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

另外,尽量保持你的Android应用程序“愚蠢”,因为在后端服务器上保留所有秘密的业务逻辑,只是让你的应用程序使用某种forms的暴露服务来显示数据。

无论你做什么,也许至less你可以使反编译非常困难,但是:如果在程序中执行/计算了一些东西,那么关于algorithm的信息必须在那里,并且总是有可能找出如何获得这一点(足够的技巧和动机在你的对手身上)。 总是。

我有我的algorithm在服务器上,我从我的智能手机应用程序调用该服务。 犯罪者可以逆向工程我的智能手机应用程序来看我的协议与我的服务器。 我可以保护我的algorithm,但是我无法防止未经授权使用我的服务。 我不得不接受这个现实而没有解决办法。 只要我用我自己的服务赚钱,我就必须满足于自己的要求,那么我就必须忍受其他人潜在的啜饮我的服务。

你需要一个创造性的方法,这是一个。

什么是目前尚未反编译的手机主程序? 收音机固件。 为什么? 它不能在手机的ARM芯片组上运行,而是在智能手机中出现的单独的Qualcomm Hexagon上运行。 它不是x86,它不是ARM,它使用Qualcomm专有的架构和指令。

  • Java反编译很容易。

  • ARM反编译更加困难(Hex-Rays反编译器许可证开始于1129美元…并且二进制文件中的Thumb代码和标准ARM代码之间的混合是一个痛苦)=>您可以尝试使用Android NDK进行编译

  • 目前没有Hexagon反编译器! QDSP规范并不公开,甚至盗版。

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

注意:我不是亲高通,也不是亲闭源。 但是这个线程诉诸于这种解决scheme。

你不能100%从反向工程保护你的android代码。 如果你想保护一些密钥,那么你可以从集成服务器获得帮助,在调用Web服务的同时给你encryption的密钥,并将密钥用于你的代码。