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!
OpenRCE和Wikipedia关于混淆代码的文章可能是一个很好的起点,如果你想进一步研究这个问题.但要注意,通过过度热衷于使用这些技术来挫败您的用户,您可能会因为通过逆向工程丢失商业机密而失去更多.就像Anton S所说,也许最"创造性"的方法在于调整商业模式而不是技术.
2010年12月6日的最新Android SDK更新(与Android 2.3 Gingerbread版本一致):
集成的ProGuard支持:ProGuard现在与SDK工具一起打包.开发人员现在可以将其代码混淆为发布版本的集成部分.
让它变得如此便宜,并且不要在客户端执行的秘密之上构建您的业务模型.换句话说,不要分享你的秘密.
不可能保护任何客户端代码免受逆向工程的影响.您可以使用更高效或更低效的方式来混淆代码.优化的x86汇编程序恰好是一个非常好的混淆.
因此,如果您有算法秘密,请将它们放在服务器端.
归档时间: |
|
查看次数: |
31053 次 |
最近记录: |