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

众所周知,Android应用程序是用Java编写的。在Java中,无论您做什么,都无法保护已编译的代码免于反编译或反向工程,因为堆栈溢出问题如何锁定已编译的Java类以防止反编译?建议。


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


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


九州编程
浏览 415回答 3
3回答

慕婉清6462132

对我而言,第一站是使用ProGuard对代码进行优化和混淆,ProGuard可以与针对Android Dalvik VM(通过Dex)的字节码一起使用。这是一个非常有用的工具,可以增加“反转”代码的难度,同时缩小代码的覆盖范围(在某些情况下,是非常大的:我最近的一个applet从大约600 KB减小到大约50 KB)。就像其他人说的那样,当算法的实现分发给客户端时,您将永远不会获得100%的算法细节安全性。为此,您需要将代码单独保存在服务器上。尝试将客户端代码的安全性提高到100%左右实际上等于DRM,并且在网络中断的情况下会使客户端代码易碎,并且通常会使(合法的)用户感到沮丧。关于“创造性”方法:一些开发人员使用调试器检测技术来防止运行时分析,并将其与二进制代码部分的加密结合起来(以阻止静态分析),但是老实说,有足够的坚定攻击者可以规避这些条件, Windows知识库文章游戏:错误消息:已检测到调试器:卸载调试器,然后重试。由于这个原因,我女友的“学习驱动” DVD软件将无法在VirtualBox下运行,但她当然会归咎于Linux!如果您想进一步研究OpenRCE和Wikipedia关于混淆代码的文章,可能是一个很好的起点。但请注意,与通过逆向工程失去商业机密相比,过度狂热地使用这些使您的用户受挫的技术可能会造成更大的损失。就像Anton S所说的那样,也许最“创意”的方法在于调整业务模型而不是技术。2010年12月6日最新的Android SDK更新(与Android 2.3 Gingerbread版本一致):集成的ProGuard支持:ProGuard现在与SDK工具打包在一起。开发人员现在可以将其代码混淆为发行版本的集成部分。

不负相思意

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

慕桂英4014372

使它变得如此便宜以免打扰,并且不要在客户端执行的秘密之上建立您的业务模型。换句话说,不要分享您的秘密。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Android