混淆R.id类,带或不带proguard



我知道在Proguard中,建议您保留R内部类的字段名,如ID。因为Proguard不处理布局xml文件。你将以断开的链接结束

但是,是否可以通过其他方式混淆R$id等类,即使这涉及到在通过Ant将其传递给ProGuard之前进行混淆。

我之所以这么问,是因为如果你有一个id为btnSaveArticle的按钮,对于黑客来说,通过查看名称就很容易掌握周围的代码在做什么。

是否可以将所有源代码(包括资源文件)复制到另一个文件夹,并使用ant运行regex来更改R.id的名称,以及更改它们在布局xml文件中的位置,然后以某种方式运行generate来重新创建R类?

或者你可以创建翻译类,例如TR,然后将其映射到R.class 中的字段

例如。

TR.btnSaveArticle = R.id.DHTXM; 

其中DHTXM是一些可以在布局XML中使用的无意义单词。但在代码中,您总是引用TR.btnSaveArticle,这将被proguard混淆。

有没有办法做到这一点,还是我在浪费时间?

只需使用以下内容,将其添加到Proguard配置文件中

-keepclassmembers class **.R$* {
public static <fields>;}

我之所以这么问,是因为如果你有一个id为btnSaveArticle的按钮,对于黑客来说,通过查看名称就很容易掌握周围的代码在做什么。

使用层次结构视图,无论你给它起什么名字,他们都需要不到30秒的时间来确定"保存文章"按钮的实际ID。我可以设想使用一些自定义工具的更快的解决方案。

我在浪费时间吗?

IMHO,是的。

使用Android的默认配置,ProGuard会完全删除R类,除非您的代码对它们进行内省。在后一种情况下,ProGuard还会保留字段的原始名称,以免破坏内省。

也就是说,资源名称也可以从资源XML文件中检索,ProGuard保留这些文件不变。

通过Ant可以设置不同的gen和res文件夹。

因此,您所做的是将原始文件复制到这些文件夹,然后使用regex编辑文件以更新为新名称。

你需要一个像这样的翻译类(例如D)来将其映射到R.class中的字段,这样在你的代码中你就可以使用非模糊名称。

public final class D{
  public static final class id{
    D.btnSaveArticle = R.id.btnSaveArticle //DHTXM; 

然后,您还需要创建一个不同的src文件夹,并从原始文件夹进行复制。在那里,你运行一个任务来编辑D类,使其成为

   D.btnSaveArticle = R.id.DHTXM;

我不得不创建一个通过ant运行的java程序,将名称交换为模糊名称。

如果你对字符串做了类似的操作,并且在apk中对你的XML进行样式设置,结果会是这样的:

<TextView
        android:id="@+id/GnvCMa"
        android:text="@string/OVuCbd"
        style="@style/ZOVkuu.MGTRgZ" />

设置起来有点耗时,但一旦实现,就可以用于其他项目。

相关内容

  • 没有找到相关文章

最新更新