2012-03-08 160 views
0

我使用ProGuard 4.7对我的应用程序进行了混淆处理。之后,我使用Dex2Jar解压我的应用程序。我对混淆的结果并不满意。我有以下问题:关于Proguard的问题

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和3吗?标准库是什么意思,你是指android库还是你添加到项目中的库?你的意思是说,ProGuard创建了新的软件包,但将所有的工作类放入一个,你能提供一些例子吗? – cistearns 2012-03-08 08:40:36

+0

我已更新我的问题 – XXX 2012-03-08 14:57:48

回答

1

问题2.您不能将ProGuard重命名为手机的一部分。外部类没有模糊处理,您不会失去任何模糊处理安全性。试图制作包含在您的应用中的本地副本只会导致您失败,您需要手机上的版本。

问题3.这是预期的,并与问题4有关。包含您的活动(或其他公共入口点)的软件包任何部分都需要维护该路径。

所以,如果你有包:

com.mycompany.myapp.activities 

然后活动包必须完全保留,因为任何活动课不会进行模糊处理。对于从XML引用的任何项目,com.mycompay.myapp也必须保留,以便系统能够正确地找到清单中定义的条目。

听起来像ProGuard正在工作,因为它应该在您的设置。

2

我可以帮助一些这些。

  1. 抓住一个串关你的服务器是一种温和的防守,但随后攻击者会看到该网址,去抓住内容(或者Wireshark的话)。您已经放慢了应用程序的速度,并将用户限制在互联网上,收获甚微。如果你真的想混淆你的字符串,那么Proguard就无法做到这一点,Base64对它们进行编码。它不会减慢很多,但至少不是很明显。更多信息:hiding strings in Obfuscated code

  2. 说不上

  3. 说不上

  4. 有许多问题需要有公开可见的名字的类和接口。服务,活动,AIDL定义是其中的一部分,但如果您想要一个更好的主意,请发布类/接口名称及其从/ implements实现的类。

+1

为了阐明第4点,类名称必须与xml中的内容匹配,例如清单和布局。系统使用xml中的名称来查找应用程序中的各种入口点,因此您不希望这些入口点被混淆。 – cistearns 2012-03-08 09:06:41

+0

了解!谢谢! – XXX 2012-03-08 14:58:59