Androidアプリのセキュリティ保護の基本戦略(1) ~混乱

序文

逆転学習のすべてのステップを記録します。

難読化メカニズム

現在、難読化はコード難読化とリソース難読化に分類されており、難読化は逆コンパイルの難易度を高めるだけでなく、アプリケーションのインストール パッケージのサイズを削減する方法でもあります。

コードの難読化

コード難読化リファレンス:
Android Studio 難読化に関するメモ
ProGuard の一般的な問題と解決策
Android 難読化: ProGuard の実践

逆コンパイル ツール:
androiddevtools は
通常、jadx を使用します。

リソースの難読化

リソースの難読化には WeChat のAndResGuardプラグインが使用されますが、github の README では Gradle 設定が区別されないことに注意してください。
実際の構成は次のとおりです。
1. プロジェクトのルート ディレクトリの build.gradle に、次のようにプラグインの依存関係を追加します。

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

2. モジュールの build.gradle を次のように構成します。


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. パッケージング コマンドの実行は、Assembly が resguard に置き換えられることを除いて、通常のパッケージング コマンドと変わりません。
例:
元の実行コマンド: gradlew AssemblyRelease
置き換え後: gradlew resguardRelease
パッケージ化後、リリースの下に新しいディレクトリが生成されます。赤いボックスはリソースの混乱です。署名後の APK:
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/fengyulinde/article/details/103703721