3

我对 DexGuard 和 Proguard 很陌生。我正在浏览他们的文档和示例示例。他们有 dexguard_util 可以帮助您检测应用程序是否被篡改,还有助于检测它是否在应该运行的环境中运行。该文件建议使用以下代码对这种篡改和环境检测进行加密 dexgaurd-project.txt。

 -encryptclasses A$D
 -encryptstrings A$D

以下是活动

public class A extends Activity
{


    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        new D().c();
    }

    private class D
    {
        public void c()
        {
            //some code to which detects the tampering and environment and takes action accordingly
        }
    }
}

如果黑客注入这行代码怎么办。

public class A extends Activity
{


    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        //code commented by hacker
        //new D().c();
    }

    private class D
    {
        public void c()
        {
            //some code to which detects the tampering and environment and takes action accordingly
        }
    }
}

然后我的应用程序将在不运行那些我认为是一个大问题的测试的情况下运行。我对逆向工程如何工作的理解是错误的,还是有更好的方法来做到这一点。如果存在,请分享更好的方法。提前致谢。请注意,公共类 A 无法加密,因为它是一个入口点,并且在 progaurd-project.txt 中使用此命令保存

-keep class somepackage.A
4

1 回答 1

1

在防篡改方面,重要的是要记住,他们的目标不是阻止任何和所有潜在的篡改努力,而是将目标的安全标准提高到足以劝阻大多数人的问题攻击者。

话虽如此,

一点切线:

该文件建议使用以下代码对这种篡改和环境检测进行加密 dexgaurd-project.txt。

类加密确实阻止了对应用程序包的基本静态分析,例如简单地解压缩包并将其加载到jd-gui. 但是,正如这个答案所示,规避它是微不足道的:只需挂钩在加载时解密 apk 的静态方法,然后转储它。但这允许提高安全标准。

现在回到你原来的问题:

如果黑客注入这行代码怎么办。

作为攻击者,这将是下一步。但是,这需要重新打包应用程序,并使用黑客的签名密钥对其进行签名。因此,需要结合 Dexguard 的检查 apk 签名等防篡改措施。

DexGuard 篡改和环境检测有用吗?

总之,是的,它有助于提高绝大多数应用程序的标准。但这不是灵丹妙药。

于 2020-04-30T13:36:00.810 回答