标签: dexguard

DexGuard如何加密类?

我想检查一下DexGuard是如何工作的,但它似乎没有免费试用版.

DexGuard可以加密Android应用程序吗?或者只是简单地混淆代码?DexGuard加密如何工作?如果您可以在反编译之前和之后提供使用DexGuard运行的示例应用程序的代码,那就太棒了.

encryption android proguard dexguard

21
推荐指数
1
解决办法
2万
查看次数

Crashlytics的stacktraces在启用Dexguard时将文件名显示为Unknown Source

当我在项目中启用Dexguard时,我遇到了来自Fabric Crashlytics的崩溃报告的问题.

我在项目中启用了Dexguard,效果非常好.然后我按照本页中的说明添加了所提到的配置,以使Fabric对我的堆栈跟踪进行去混淆并显示正确的崩溃报告.以下是我在主模块中应用fabric和dexguard插件的方法build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'dexguard'
apply plugin: 'io.fabric'
Run Code Online (Sandbox Code Playgroud)

以下是我proguard-project.txt文件中的配置:

# Fabric
#############################################################################
-keepattributes *Annotation*,SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
-keepresourcexmlelements manifest/application/meta-data@name=io.fabric.ApiKey
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
#############################################################################
Run Code Online (Sandbox Code Playgroud)

以下是我proguard-project.txt在发布版本中的使用方法:

buildTypes{
    debug{
        proguardFile getDefaultDexGuardFile('dexguard-debug-shrink.pro')
        proguardFile 'proguard-project.txt'
    }
    release{
        proguardFile getDefaultDexGuardFile('dexguard-release.pro')
        proguardFile 'proguard-project.txt'
        proguardFile 'dexguard-project.txt'
        if(new File("$projectDir/../local.properties").exists()){
            signingConfig signingConfigs.release
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当在发布版本中遇到崩溃时,发生崩溃的文件名将丢失,但其他所有内容都正常工作,并且堆栈跟踪几乎是可以理解的.这是一个崩溃报告示例:

未知的源文件名

正如您在崩溃报告中看到的那样,堆栈跟踪中只缺少文件名.行号和方法名称等其他描述完全正常.

虽然使用完整的方法名称ir.X.ui.XMainActivity.throwSomething和前面的行号Unknown Source,但我可以得出错误发生的文件名,我希望我的堆栈跟踪显示文件名并完全描述自己.我尝试了很多选项和许多试验和错误,但问题仍然存在.

有什么我想念的吗?我怎么解决这个问题?

我正在使用8.1.0.7Dexguard版本1.21.7,Fabric插件版本2.9.0 …

android stack-trace dexguard crashlytics-android google-fabric

20
推荐指数
1
解决办法
2056
查看次数

如何用proguard定位kotlin`内部`类?

我想对任何标有kotlin internal可见性修饰符的类进行预测(混淆).

Kotlin internal类在JVM上是公共的,因此它们在Java源代码中是可见的和可用的.我不希望这些类被使用或出现在自动完成中,所以我想对它们进行模糊处理以阻止它们的使用.

我可以将什么样的规则适用于目标internal类?

proguard kotlin dexguard android-proguard

11
推荐指数
1
解决办法
489
查看次数

切换到Gradle:为什么我必须保持自定义视图不被混淆?

我正在将一个项目从Ant转移到Gradle,但有些东西我无法理解.


FACTS

在构建发布APK(即混淆)后,我注意到应用程序崩溃严重.错误可以通过以下方式总结:

java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]
Run Code Online (Sandbox Code Playgroud)

调试(即非混淆)APK工作正常,所以我猜测它与我的ProGuard/DexGuard配置有关.

我试图通过添加以下语句来保持类引用:

-keep class com.mypackage.MyCustomView
Run Code Online (Sandbox Code Playgroud)

因此,发布APK工作得很好.然后我做了一些研究,我尝试了更具体的ProGuard/DexGuard配置:

-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);
}
Run Code Online (Sandbox Code Playgroud)

它也有效,而且与课程无关.


我想知道:

  1. 为什么我不需要处理是在使用Ant时?
  2. 出现错误的确切原因是什么?(按照第一个问题回答)

回答

@Blundell的答案基本上是正确的.结果我错过了build.gradle配置中的一行:

android {
  ...
  buildTypes {
    debug {
      ...
    }
    release {
        proguardFile getDefaultDexGuardFile('dexguard-release.pro') …
Run Code Online (Sandbox Code Playgroud)

android proguard android-custom-view android-gradle-plugin dexguard

10
推荐指数
1
解决办法
1091
查看次数

如何使用DexGuard来混淆我的apk?

如何使用DexGuard来混淆我的apk?我知道如何启用proguard及其自定义.谁能建议一个好的教程?

obfuscation android android-studio dexguard

5
推荐指数
1
解决办法
1万
查看次数

如何在Android中保护呼叫webservice

您好我正在研究Android应用程序,其中我需要执行几个https Web服务,所以我的所有webservice URL和Web API KEY都在代码加服务器的IP地址.当任何人对我的应用程序进行逆向工程时,那个人可以获得我的Web服务URL以及API KEY然后可以使用rest客户端轻松命中它.

如何确保任何攻击者无论如何都无法得到我在其中定义的WEB API KEY strings.xml

<string name="WEB_API_KEY">XXXXXXXXXXXXXXXXXXXXXXXXXXX</string>
Run Code Online (Sandbox Code Playgroud)

提前致谢.

security ssl android proguard dexguard

5
推荐指数
1
解决办法
4616
查看次数

Dexguard / Proguard使应用程序在枚举开关上崩溃

将Dexguard从7.0.12更新到7.1.22后,我在枚举开关上遇到崩溃。

这仅在Dexguard在我们的项目上运行时才会发生(我想这是由Proguard问题引起的)。

如果我使用硬编码值,则不会发生崩溃。

当然,我想避免使用硬编码值。

碰撞

发生的崩溃如下

java.lang.NoClassDefFoundError: Failed resolution of: Lif;
Run Code Online (Sandbox Code Playgroud)

这发生在陈述的行上switch(type) {(见下文)

应用程序崩溃的一些示例代码(假设MyEnum是课程的Enum):

MyEnum type = MyEnum.SomeValue;

switch (type) {
    case SomeValue:
        // Do something
        Log.i("Tag", "Hello world!");
        break;
}
Run Code Online (Sandbox Code Playgroud)

假设的序数值MyEnum.SomeValue为1。

如果我更改case SomeValue:case 1:预期的效果。

我尝试过的

我不知道为什么会发生此崩溃。我试图添加这些Proguard规则。

-keep enum * { *; }
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
Run Code Online (Sandbox Code Playgroud)

但这不能解决问题。

更新

我刚刚检查了映射文件,所有枚举名称都保留了。现在,我对所发生的事情一无所知。

my.identifier.MyEnum -> my.identifier.MyEnum:
    my.identifier.MyEnum SomeValue -> SomeValue
    my.identifier.MyEnum[] $VALUES -> $VALUES
    6:6:my.identifier.MyEnum[] …
Run Code Online (Sandbox Code Playgroud)

enums android proguard dexguard

5
推荐指数
1
解决办法
652
查看次数

Flexjson和Dexguard / Proguard

关于flexjson库,我在使用dexguard时遇到问题。尝试使用JSONDeserializer反序列化时,我不断收到以下错误。

 **09-15 20:46:10.271 10901-11552/** **A/art: sart/runtime/class_linker.cc:3430] Check failed: klass->IsProxyClass()** 
Run Code Online (Sandbox Code Playgroud)

在Android发布apks中进行混淆后,是否有人有适当的规则让flexjson正常工作?

与gson lib类似。

android proguard flexjson dexguard

5
推荐指数
1
解决办法
386
查看次数

Android Studio 3.0中的DexGuard集成

我已将我的Android项目升级为使用最新的Android Studio 3.0功能.从那时起,我在每个Gradle同步上收到以下警告消息:

警告:您使用的其中一个插件支持Java 8语言功能.要尝试Android插件中内置的支持,请从build.gradle中删除以下内容:apply plugin:'dexguard'要了解详情,请访问https://d.android.com/r/tools/java-8-support -message.html

如果我转到链接的网址,我可以看到:

如果Android Studio检测到您的项目使用的是Jack,Retrolambda或DexGuard,则IDE会使用这些工具提供的Java 8支持.

有Jack和Retrolambda的迁移文档,但DexGuard没有.

我的问题是:

  • 我可以删除DexGuard插件,它仍然可以按预期工作吗?
  • 如果不是,我应该如何解决此警告?

我正在运行Android Studio 3.0和DexGuard 8.0.16

dexguard android-studio-3.0

5
推荐指数
1
解决办法
2056
查看次数

Android / Java混淆:R8与(ProGuard或DexGuard)?

我想知道什么是最强大的混淆工具(以避免反向工程):

  • 在R8和ProGuard之间
  • 在R8和DexGuard之间

谢谢。

java android proguard dexguard r8

5
推荐指数
1
解决办法
1770
查看次数