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

And*_*Eve 59 java android decompiling reverse-engineering

众所周知,Android应用程序是用Java编写的.在Java中,无论你做什么,都不可能保护编译代码免受反编译或反向工程,如Stack Overflow问题如何锁定已编译的Java类以防止反编译?提示.

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

"如何"我不仅指软件技术,还指其他创造性方法.

wil*_*roz 72

对我来说,第一站是使用ProGuard对代码进行优化和混淆,ProGuard已知可以使用针对Android的Dalvik VM的字节码(通过Dex).它是一个非常好的工具,可以增加"反转"代码的难度,同时缩小代码的占用空间(在某些情况下显着:我最近的一个applet从大约600 KB下降到大约50 KB).

就像其他人所说的那样,在将算法的实现分发给客户端时,您永远不会获得算法细节的100%安全性.为此,您需要将代码保留在服务器上.尝试将客户端代码的安全性接近100%有效地构成DRM,并且可能使您的客户端代码在网络中断时变得脆弱,并且通常会使(合法的)用户感到沮丧.

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

关于"创造性"方法:一些开发人员采用调试器检测技术来防止运行时分析,并将其与二进制代码部分的加密相结合(以阻止静态分析),但说实话,足够坚定的攻击者可以绕过这些,虽然它可能导致合法的用户沮丧,如Windows知识库文章游戏:错误消息:已检测到调试器:卸载调试器并重试.由于这个原因,我女朋友的'学驾车'DVD软件不会在VirtualBox下运行,但她当然会责怪Linux!

OpenRCEWikipedia关于混淆代码的文章可能是一个很好的起点,如果你想进一步研究这个问题.但要注意,通过过度热衷于使用这些技术来挫败您的用户,您可能会因为通过逆向工程丢失商业机密而失去更多.就像Anton S所说,也许最"创造性"的方法在于调整商业模式而不是技术.

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

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


jco*_*ctx 14

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


Ant*_*n S 7

让它变得如此便宜,并且不要在客户端执行的秘密之上构建您的业务模型.换句话说,不要分享你的秘密.

  • 安东,我不是指对用户进行复制或盗版保护.该应用程序很可能是免费提供的.我的意思是一些公司进行逆向工程...... (6认同)

Cod*_*aos 5

不可能保护任何客户端代码免受逆向工程的影响.您可以使用更高效或更低效的方式来混淆代码.优化的x86汇编程序恰好是一个非常好的混淆.

因此,如果您有算法秘密,请将它们放在服务器端.

  • 这只是关于x86比java字节码更难逆转的一般说法,但仍然可能.而afaik可以用您的Android程序(ARM我猜)发送本机代码,但我不确定这是一个好主意. (3认同)