【问题标题】:Is proguard enough to pass penetration testing?proguard 是否足以通过渗透测试?
【发布时间】:2018-05-09 02:55:00
【问题描述】:

对于我们的 android 移动应用,我们必须选择一个混淆工具,这样我们的应用才能通过渗透测试用例。 Proguard 是否足够,还是我们应该使用 Dexguard?

【问题讨论】:

  • 如果不知道正在进行什么样的渗透测试,就不可能回答这个问题。测试将涵盖哪些内容?它是一个自动化工具吗?即使您提供了尽可能多的有关测试的详细信息,您也希望得到的最好结果是有根据的猜测。

标签: android proguard android-proguard penetration-testing


【解决方案1】:

ProGuard 是 Java 字节码的通用优化器。 DexGuard 是一款专门用于保护 Android 应用程序的工具。

ProGuard 提供针对静态分析的基本保护。 DexGuard 保护应用程序免受静态和动态分析。

ProGuard 提供最小的混淆。 DexGuard 应用了多层加密和混淆。

ProGuard 专注于字节码。 DexGuard 处理应用程序的所有组件。

来源:DexGuard vs. ProGuard

【讨论】:

  • 注意:DexGuard 是付费的。
【解决方案2】:

混淆不足以通过渗透测试

适当的渗透测试将分析应用的静态和运行时行为,因此运行时行为根本不会仅通过混淆来覆盖

但也仅考虑您将要进行的静态分析,您远非安全

我将为您提供一个简单实用的示例,因为您建议的两种工具之间的差异已经在另一个答案中报告了

假设您有一个原始的未经混淆的MainActivity,由:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //...

    // lines for adding the shortcut in the home screen
    appPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    isAppInstalled = appPreferences.getBoolean("isAppInstalled", false);

    if(isAppInstalled == false)
        addShortcut();

地点:

private void addShortcut() {
    //Adding shortcut

    // ...

    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    // ...

    SharedPreferences.Editor editor = appPreferences.edit();
    editor.putBoolean("isAppInstalled", true);
    editor.commit();
}

这些是被 ProGuard 混淆并通过online Java decompiler 获取的合作伙伴

结论:

1) 如您所见 - 尽管有 proguard 混淆 - 您处于攻击者可以轻松修改代码流的位置 [e.g.将if (!this.f2293p) 转换为if (this.f2293p)] 并轻松理解您必须做什么才能修改应用程序中的值,尽管存在混淆。在这种情况下,这是一个简单的愚蠢的“isAppInstalled”偏好,但当然它可能更敏感,例如:

public boolean appIsPurchased(){
    return settings.getBoolean(keyPurchase,false);
}

PS 存储未加密的共享首选项 [尤其是在包含敏感数据的情况下] 是一种非常糟糕的做法,这只是一个用于演示目的的快速示例。在有根设备中检索此文件就等于浏览到系统文件夹并搜索 xml 文件

2) 此外,通常这种纯粹的混淆不会隐藏任何硬编码的内容。我们已经看到了:

editor.putBoolean("isAppInstalled", true);

被转化为:

this.f2293p = this.f2292o.getBoolean("isAppInstalled", false);

另一个简单的例子可以是:

if (barcode.equals("123456")) {
    return "Hat";
}
if (barcode.equals("234567")) {
    return "Jumper";
}
if (barcode.equals("345678")) {
    return "Pants";
}
return "Troubles detecting the new item";

混淆后生成:

return str.equals("123456") ? "Hat" : str.equals("234567") ? "Jumper" : str.equals("345678") ? "Pants" : "Troubles detecting the new item";

对于那些意图破坏您的纯混淆应用程序的人来说,这些字符串是厚颜无耻的暗示。例如,任何人都可以使用您的端点字符串

因此,您需要像 DexGuard 这样的工具或其他能够产生比简单混淆更复杂的商业解决方案的工具

这是 ProGuard + 第三方安全工具的最终结果示例 [我没有 DexGuard,我使用另一个通过拖放原始未受保护的 apk 自动应用保护的工具]

这是新的onCreate() 方法:

protected void onCreate(Bundle bundle) {
    //...
    this.f1859o = PreferenceManager.getDefaultSharedPreferences(this);
    this.f1860p = this.f1859o.getBoolean(k09kcah9u6scvhh4ab059fbmtq.itg7jcg3c4din73t0cib8n7eau("~"), false);
    if (!this.f1860p) {
        m3099j();
    }
}

虽然这是第二个使用硬编码字符串的示例,这些字符串已经完全隐藏在黑客的视野中:

public String m3101a(String str) {
    PrintStream printStream = System.out;
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append(k09kcah9u6scvhh4ab059fbmtq.itg7jcg3c4din73t0cib8n7eau("}}"));
    stringBuilder.append(str);
    String stringBuilder2 = stringBuilder.toString();
    return str.equals(k09kcah9u6scvhh4ab059fbmtq.itg7jcg3c4din73t0cib8n7eau("}|")) ? k09kcah9u6scvhh4ab059fbmtq.itg7jcg3c4din73t0cib8n7eau("}s") : str.equals(k09kcah9u6scvhh4ab059fbmtq.itg7jcg3c4din73t0cib8n7eau("}r")) ? k09kcah9u6scvhh4ab059fbmtq.itg7jcg3c4din73t0cib8n7eau("~{") : str.equals(k09kcah9u6scvhh4ab059fbmtq.itg7jcg3c4din73t0cib8n7eau("~z")) ? k09kcah9u6scvhh4ab059fbmtq.itg7jcg3c4din73t0cib8n7eau("~y") : k09kcah9u6scvhh4ab059fbmtq.itg7jcg3c4din73t0cib8n7eau("~x");
}

这是您通过渗透测试所需的保护程度

最后 - 作为一项额外的安全措施 - 这种专业工具还可以检测受保护的“不可读”代码中的修改,并在检测到对受保护版本的篡改操作时停止应用执行。而且,与简单 [但美观] ProGuard 不同,它实现了对模拟器、root 设备和其他潜在危险场景的检测

请注意代码是如何通过这些步骤强化的。没有人是 100% 免受黑客攻击的。你的工作只是让事情变得尽可能困难,仅此而已

【讨论】:

  • 能否请您指定您用来加固代码的第三方工具?谢谢。
  • @Aayush:我使用了一个名为 Quixxi 的商业解决方案
  • 你如何看待市场上大量的 whatsapp mod 版本?
  • ciao @TejasPandya,在最新的 Whatsapp apk 中存在混淆,因此您肯定会提高可破解性栏,但您并没有将其设置在顶层,尤其是在注定/暴露在这样​​的群众面前。使用专业的解决方案,您可以真正阻止对应用程序的代码修改。当然有人也可以重写你的应用程序,你会被发现。安全意味着硬化到极限,没有人能保证100%的安全。在客户方面,任何来自黑市的东西都是 [巨大的] 风险,在“更好的应用程序”下可能存在隐藏的活动
  • 免责声明:我的 whatsapp 分析非常快速,并且基于我在他们的反编译代码中看到的内容,所以我不能排除这一点——尤其是在最新版本中——他们实施了我没有实施的更深层次的安全控制浏览时查找
猜你喜欢
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多