在 Android 中使用 R8 和 Proguard 时如何保护数据模型类免受逆向工程的影响?
Posted
技术标签:
【中文标题】在 Android 中使用 R8 和 Proguard 时如何保护数据模型类免受逆向工程的影响?【英文标题】:How to secure data model classes from reverse engineering when using R8 and Proguard in Android? 【发布时间】:2020-04-03 15:47:16 【问题描述】:现在,在对 android 应用程序 APK 文件进行逆向工程时,我可以看到纯文本中的数据模型类,因为我使用了 @keep
注释。如果没有注释,应用程序将崩溃,因为这些文件正在被 R8 删除。
如何确保数据模型文件在逆向工程中不可见?
【问题讨论】:
你能提供更多关于你使用什么样的数据模型类的信息吗?你使用像 GSON 这样的库吗?您在 Proguard 上是否也遇到过同样的崩溃,还是只是在迁移到 R8 后才出现? 数据模型类是 POJO。是的,我使用 GSON 将服务器响应(它们是 json 字符串)反序列化为 java 对象。不,我在使用 Proguard 时没有遇到崩溃。 您最终找到解决方案了吗? 【参考方案1】:最近我遇到了同样的问题,我确定的问题是我有一套过时的 proguard 规则。请注意,2019 年 10 月 4 日,Gson 更新了他们的 proguard 规则以将 R8 考虑在内。希望您必须更新它们。
您可以在https://github.com/google/gson/blob/master/examples/android-proguard-example/proguard.cfg找到它
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** *;
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** <fields>;
# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class *
@com.google.gson.annotations.SerializedName <fields>;
还记得添加您的某些模型类:查看中心的规则,因为它只是一个示例,必须使用您自己的模型进行更改。
【讨论】:
【参考方案2】:将下面的行添加到gradle.properties
文件中。
# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false
【讨论】:
您能解释一下这是如何回答 OP 的问题的吗?以上是关于在 Android 中使用 R8 和 Proguard 时如何保护数据模型类免受逆向工程的影响?的主要内容,如果未能解决你的问题,请参考以下文章