首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >保护Android应用程序免受逆向工程的影响真的是不可能的吗?

保护Android应用程序免受逆向工程的影响真的是不可能的吗?
EN

Stack Overflow用户
提问于 2010-12-02 23:30:59
回答 10查看 32.2K关注 0票数 62

正如我们所知,Android应用程序是用Java编写的。在Java语言中,无论what you do如何,都不可能像堆栈溢出问题所建议的那样,保护编译后的代码不受反编译或逆向工程的影响。

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

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

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-12-03 01:26:47

对我来说,第一站是使用ProGuard优化和混淆代码,这是众所周知的,它可以处理针对安卓Dalvik VM的字节码(通过Dex)。它真的是一个很棒的工具,可以增加“反向”代码的难度,同时缩小代码的占用空间(在某些情况下,我最近的一个applet从大约600 KB减少到了大约50 KB)。

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

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

关于“创造性”的方法:一些开发人员使用debugger detection techniques来阻止运行时分析,并将其与部分二进制代码的加密(以阻止静态分析)相结合,但老实说,足够坚定的攻击者可以circumvent这些方法,而这可能会导致合法用户沮丧,如Windows知识库文章所示。出于这个原因,我女朋友的“学习驾驶”DVD软件不能在VirtualBox下运行,但她当然要归咎于Linux!

如果您想进一步了解这一点,OpenRCEWikipedia's article on obfuscated code可能是很好的起点。但请注意,与通过逆向工程丢失商业秘密相比,过度热衷于使用这些技术可能会使您的用户感到沮丧,从而损失更多。像Anton S says一样,也许最“有创意”的方法在于调整商业模式,而不是技术。

2010年12月6日发布的最新安卓SDK update (与安卓2.3姜饼同时发布):

集成开发工具包支持: ProGuard现在与ProGuard工具打包在一起。开发人员现在可以将他们的代码混淆为发布构建的集成部分。

票数 73
EN

Stack Overflow用户

发布于 2010-12-02 23:34:19

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

票数 14
EN

Stack Overflow用户

发布于 2010-12-02 23:33:55

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4336637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档