我使用ProGuard 4.7对我的应用程序进行了模糊处理。之后,我使用Dex2Jar解压缩了我的应用程序。而且我对混淆的结果感到不满意。我有以下问题:
1 ..如何屏蔽字符串常量?
(可能正在使用此选项:从服务器加载字符串常量。 我知道这会影响表现,但主要是防守)
2 ..如何重命名标准类名?
例如:在混淆后,标准类名保持不变。 (可以复制所有标准类,然后ProGuard会重命名)
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.media.MediaRecorder; import android.telephony.TelephonyManager;
3 .. ProGuard创建了许多新包,但所有工作类都在其中一个包中。 如何将它们放在不同的包装中?
a.a b.a my.package.name // here all working classes of my app b.b c.c
4 ..为什么我班级的某些名字没有改变?
答案 0 :(得分:2)
我可以帮助解决其中的几个问题。
从服务器上抓取一个字符串是一种温和的防御,但是攻击者会看到该URL并抓住内容(或诈骗它)。你已经放慢了应用程序的速度,并将用户绑定到互联网访问,几乎没有收获。 Proguard不能开箱即用,如果你真的想混淆你的字符串,Base64会对它们进行编码。它不会让人失望很多,但至少它并不明显。更多信息:hiding strings in Obfuscated code
说不上
说不上
有许多类和接口需要具有公开可见的名称。服务,活动,AIDL定义是其中的一部分,但如果您想要更好的想法,请发布类/接口名称及其派生自/ implements的类。
答案 1 :(得分:1)
问题2.您无法让ProGuard重命名这些,因为它们是手机的一部分。对于没有混淆的外部类,您不会丢失任何混淆安全性。尝试使用您的应用程序制作本地副本只会导致您走上毁灭之路,您需要手机上的版本。
问题3.这是预期的,并且与问题4有关。包含您的活动(或其他公共入口点)的包的任何部分都需要保持该路径。
所以,如果你有包裹:
com.mycompany.myapp.activities
然后必须完全保留活动包,因为任何活动类都不会被混淆。此外,对于从XML引用的任何项目,必须保留com.mycompay.myapp,以便系统可以正确查找清单中定义的条目。
听起来ProGuard正如你的设置一样正常工作。