保护我的应用程序免受反汇编器攻击

4
所以我最近测试了一下我的一个Android应用程序的反汇编,令我惊讶的是,代码非常容易读懂。更糟糕的是,我所有的变量名都完好无损!我以为它们会在编译时被压缩成不可读的东西。该应用程序被触发在一定时间后过期。然而,现在对我来说很容易找到我的名为checkIfExpired()的函数和变量"expired"。有没有什么好方法使潜在的黑客难以干扰我的应用程序?
在有人提出明显的观点之前:是的,这只是通过模糊手段来保证安全。但显然这是我的唯一选择,因为用户始终可以访问我的所有代码。这对所有应用程序都是一样的。我的停用功能的细节并不重要,重要的是我不希望反汇编工具能够理解我做的某些事情。
附加问题:为什么变量名没有被压缩?如果我不再使用非常长的变量名,是否可能使程序运行更快,就像我的习惯一样?

我不明白你是如何将dex文件反编译成Java的? - Ömer
2个回答

3
一个混淆器是最好的解决方案。
这里有一个我没有实际尝试过但看起来很有前途的: http://proguard.sourceforge.net/FAQ.html#android ProGuard是一个免费的Java类文件缩小器、优化器、混淆器和预验证器。它检测并删除未使用的类、字段、方法和属性。它优化字节码并删除未使用的指令。它使用短而无意义的名称重命名剩余的类、字段和方法。最后,它为Java 6或Java Micro Edition预验证处理过的代码。

我真的需要深入研究一下。如果堆栈跟踪的“反混淆”起作用,那么这可能就是答案!你有没有亲自在Android上使用过这个? - pgsandstrom
不幸的是,我没有使用Proguard的经验。但是,它们确实包括了特定的Android示例。我期待着在本月底发布我的下一个应用程序时使用它。 - Brad Hein

0

Proguard 是你所需要的一切。
我在所有的应用程序中都使用它,它非常好用,可以将应用程序大小减小约30%。
问题是,我不得不编写一个自定义的bash构建脚本,因为你不能将Proguard插入到现有的Android ant构建过程中。也许我应该开个博客写一下。 :)


如果你这样做了,我会订阅你的博客 :) - Brad Hein
我会成为你的第二个订阅者 :) - pgsandstrom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接