保护Android应用程序免受逆向工程真的不可能?
我们知道,Android应用程序是用Java编写的。 在Java中,无论你做什么,都不可能保护已编译的代码免受反编译或逆向工程的影响,因为堆栈溢出问题如何锁定已编译的Java类以防止反编译? 提示。
如何保护包含算法商业秘密的应用程序免受逆向工程?
“如何”不仅指软件技术,还指其他创造性方法。
对我来说,第一站是使用ProGuard优化和混淆代码,ProGuard可以使用针对Android的Dalvik VM(通过Dex)的字节代码。 这是一个非常棒的工具,可以在缩小代码覆盖范围的同时增加“反转”代码的难度(在某些情况下会大幅度降低:最近的一个小应用程序从大约600 KB降低到大约50 KB)。
就像其他人所说的那样,您的算法的详细信息将不会100%安全,而其实施正在分发给客户。 为此,您需要将代码保存在服务器上。 尝试为客户端代码提供接近100%的安全性有效等同于DRM,并且可以使您的客户端代码在面临网络中断时变得脆弱,并且通常会让(合法)用户感到挫败。
Android开发人员博客提供了一些关于“防篡改”Android应用程序的有用文章(并且他们建议使用ProGuard作为整体方法的一部分)。
关于“创造性”方法:一些开发人员使用调试器检测技术来防止运行时分析,并将其与二进制代码部分的加密(以阻止静态分析)相结合,但说实话,足够坚定的攻击者可以规避这些,虽然它可以导致合法用户的挫败感,如Windows知识库文章“游戏:错误消息:检测到调试器”所示:卸载调试器并再次尝试。 由于这个原因,我的女朋友的'学习驾驶'DVD软件不能在VirtualBox下运行,但她当然责怪Linux!
OpenRCE和维基百科关于混淆代码的文章可能是一个很好的起点,如果你想进一步研究这一点的话。 但请注意,通过过度热心地使用这些技术,您的用户可能会失去更多,而不是通过逆向工程造成的商业机密损失。 就像Anton S所说,也许最“创新”的方法在于调整商业模式,而不是技术。
2010年12月6日最新的Android SDK更新(恰逢Android 2.3姜饼版本):
集成的ProGuard支持:ProGuard现在与SDK工具一起打包。 开发人员现在可以将其代码作为发布版本的集成部分进行混淆。
如果这是一种可能性:远程过程调用一个受到良好保护的服务器(服务器有你想要保护的代码)。
保护任何客户端代码免受逆向工程是不可能的。 您可以使用更多或更少的有效方法来混淆您的代码。 经过优化的x86汇编器恰好是一个相当不错的混淆。
所以如果你有算法秘密把它们放在服务器端。
链接地址: http://www.djcxy.com/p/90699.html上一篇: Is it really impossible to protect Android apps from reverse engineering?