【问题标题】:Can someone download my code of my mobile application from Play Store?有人可以从 Play 商店下载我的移动应用程序代码吗?
【发布时间】:2015-05-30 17:13:20
【问题描述】:

如果我将我的移动应用程序的代码发布到 Play 商店,有人可以下载它吗?

如果是,我如何保护我的应用程序免受此类攻击?我可以用一些东西来避免它吗?我对安全性一无所知,但我认为让我的应用为此类问题做好准备非常重要。

【问题讨论】:

  • 是的,您的 apk 可以轻松反汇编(它只是一个 .zip),允许其他人获取资源和 .class 文件(也可以轻松反编译回 .java)。我认为推荐的解决方案是使用 Proguard 进行混淆以使事情变得更加困难,但没有完全保护。
  • @trooper 谢谢你的回答!但我不明白为什么会有太多的反对票。我做错了什么?
  • @Error404 你正在投票,因为它离题了。 SO 用于编程问题,这是一个反编译.apk 的问题。

标签: android security


【解决方案1】:

每个人都可以下载您的应用程序,以 apk 文件格式将其保存到他的电脑,然后使用 dex2jarapktool 之类的应用程序获取所有应用程序内容。大约需要1个小时,并不难。您可以使用 proguard 来混淆您的应用程序的代码,以使使用反编译的代码变得更加困难,因为 Example MainActivity.class 将获得 a.class。

在 android studio 中启用 proguard: build.gradle (app):

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

proguard-rules.pro:

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class com.android.vending.licensing.ILicensingService


-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}

-keepclasseswithmembernames class * {
    native <methods>;
}

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

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

【讨论】:

  • 你知道另一种混淆我的代码的工具吗?我从来没有这样做过,我有点困惑。
  • 你是用android studio开发的吗?
  • 是的,我是。为什么?这是个坏主意?
  • Nono,您可以在发布设置中启用 proguard,它会在发布构建过程中为您混淆代码。我编辑了我的问题
  • @qwertz“我编辑了我的问题”应该是“我编辑了我的答案”;)
猜你喜欢
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
相关资源
最近更新 更多