Android應用加固的簡單實現方案(二)

〃唯美劃指邊發表於2020-04-04

個人部落格

www.milovetingting.cn

Android應用加固的簡單實現方案(二)

前言

上一篇文章介紹了基於dex加固方案的兩種具體實現。相對於手動加固,基於gradle實現的加固方案效率有了進一步提升。但是,還是需要在殼Module中增加util相關工具類的引用,為進一步減少程式碼侵入性,在前面方案的基礎上,進一步完善外掛的功能。

實現原理

為了避免在殼Module中引入脫殼相關的工具類,可以在aar生成後,利用ASM生成需要的class檔案,然後修改aar中的classes.jar檔案,將我們生成的class檔案加入到classes.jar中。而殼Module的啟動Application也需要在編譯後修改attachBaseContext方法,加入脫殼程式碼的引用。這塊都可以通過修改class中的方法來實現。而脫殼後,實質上還是執行apk中的程式碼,因此,apk中也需要對應修改以上兩種。

具體實現可以參考原始碼:

使用步驟

下面主要介紹外掛生成後的使用:

  1. 專案根目錄下的build.gradle中引入外掛
buildscript {

    repositories {
        //...
        maven {
            url uri('E:\\Repository')
        }
        //...
    }
    dependencies {
        //...
        classpath 'com.wangyz.plugins:ShellPlugin:1.0.0'
        //...
    }
}

allprojects {
    repositories {
        //...
        maven {
            url uri('E:\\Repository')
        }
        //...
    }
}
複製程式碼
  1. app模組下的build.gradle引入外掛及配置外掛
apply plugin: 'com.wangyz.plugins.ShellPlugin'

//主要注意shellModuleName和shellApplication的配置
shellConfig {
    //殼Module的名稱
    shellModuleName = 'shell'
    //殼Module中Application的全類名
    shellApplication = 'com.wangyz.shell.ShellApplication'
    keyStore = 'E:\\Code\\Android\\android.keystore'
    keyStorePassword = 'android'
    keyPassword = 'android'
    alias = 'android'
}
複製程式碼
  1. 殼Module中增加繼承自Application的自定義Application,如這裡的ShellApplication,然後重寫attachBaseContext方法
public class ShellApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
    }

}
複製程式碼
  1. sync工程

  2. 在打包apk前,先執行Build-Clean Project,然後雙擊gradle皮膚的app/Tasks/build/assembleRelease,就會在專案根目錄/殼Module名稱-release/outputs/下生成signed.apk,這個apk就是加固過的apk.

注意事項

  1. 這裡只是演示加固的思路,對於加密部分,只是用了簡單的^操作,具體可以自己換成AES,RSA或者其它加密方式。

  2. 外掛會用到dx,gralde的命令,因此需要配置這兩個的路徑

  3. 外掛會用到ASM,在編譯出class後修改class。經過實踐,發現在生成apk後,沒有修改過程式碼或者沒有執行sync的操作後,transform的回撥不會走,因此也不會執行修改class的邏輯,因此在每次生成加固apk前,需要執行clean專案的操作。

  4. 引入外掛後的配置檔案一定不能錯,重點關注shellModuleName和shellApplication,否則會導致生成的apk無法正常使用。

原始碼

原始碼地址:github.com/milovetingt…

相關文章