Estrategias básicas para la protección de seguridad de aplicaciones de Android (1): confusión

Prefacio

Registre cada paso del aprendizaje reverso.

mecanismo de ofuscación

Actualmente, la ofuscación se divide en ofuscación de código y recursos. La ofuscación no solo aumenta la dificultad de descompilación, sino que también es una forma de reducir el tamaño del paquete de instalación de la aplicación.

Ofuscación de código

Referencia de ofuscación de código:
notas de ofuscación de Android Studio
Problemas y soluciones comunes de ProGuard
Ofuscación de Android: práctica de proguard

Herramienta de descompilación:
androiddevtools
generalmente usa jadx

Ofuscación de recursos

La ofuscación de recursos utiliza el complemento AndResGuard de WeChat . Cabe señalar que el archivo README en github no distingue la configuración de Gradle.
La configuración real es la siguiente:
1. En build.gradle en el directorio raíz del proyecto, agregue las dependencias del complemento de la siguiente manera:

buildscript {
    
    
    
    repositories {
    
    
    	// AS默认的,可忽略
        google()
        jcenter()
    }
    
    dependencies {
    
    
    // 编写文章时的插件版本是1.2.17
        classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.17'
    }
}

2. Configure build.gradle del módulo de la siguiente manera:


android {
    
    
	...省略一千字
}

apply plugin: 'AndResGuard'
andResGuard {
    
    
    // mappingFile = file("./resource_mapping.txt")
    mappingFile = null
    use7zip = true
    useSign = true
    // 打开这个开关,会keep住所有资源的原始路径,只混淆资源的名字
    keepRoot = false
    // 设置这个值,会把arsc name列混淆成相同的名字,减少string常量池的大小
    fixedResName = "arg"
    // 打开这个开关会合并所有哈希值相同的资源,但请不要过度依赖这个功能去除去冗余资源
    mergeDuplicatedRes = true
    whiteList = [
            // for your icon
            "R.drawable.icon",
            // for fabric
            "R.string.com.crashlytics.*",
            // for google-services
            "R.string.google_app_id",
            "R.string.gcm_defaultSenderId",
            "R.string.default_web_client_id",
            "R.string.ga_trackingId",
            "R.string.firebase_database_url",
            "R.string.google_api_key",
            "R.string.google_crash_reporting_api_key"
    ]
    compressFilePattern = [
            "*.png",
            "*.jpg",
            "*.jpeg",
            "*.gif",
    ]
    sevenzip {
    
    
        artifact = 'com.tencent.mm:SevenZip:1.2.17'
        //path = "/usr/local/bin/7za"
    }

    /**
     * 可选: 如果不设置则会默认覆盖assemble输出的apk
     **/
    // finalApkBackupPath = "${project.rootDir}/final.apk"

    /**
     * 可选: 指定v1签名时生成jar文件的摘要算法
     * 默认值为“SHA-1”
     **/
    // digestalg = "SHA-256"
}

3. La ejecución del comando de empaquetado no es diferente del comando de empaquetado normal, excepto que ensamblar se reemplaza por resguard:
por ejemplo:
el comando de ejecución original: gradlew ensamblarRelease
después del reemplazo: gradlew resguardRelease
Después del empaquetado, se generará un nuevo directorio bajo el lanzamiento. El cuadro rojo es una confusión de recursos. APK postfirmado:
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/fengyulinde/article/details/103703721
Recomendado
Clasificación