美文网首页
Android应用加固的简单实现方案(二)

Android应用加固的简单实现方案(二)

作者: milovetingting | 来源:发表于2020-04-04 19:06 被阅读0次

个人博客

http://www.milovetingting.cn

Android应用加固的简单实现方案(二)

前言

上一篇文章介绍了基于dex加固方案的两种具体实现。相对于手动加固,基于gradle实现的加固方案效率有了进一步提升。但是,还是需要在壳Module中增加util相关工具类的引用,为进一步减少代码侵入性,在前面方案的基础上,进一步完善插件的功能。

实现原理

为了避免在壳Module中引入脱壳相关的工具类,可以在aar生成后,利用ASM生成需要的class文件,然后修改aar中的classes.jar文件,将我们生成的class文件加入到classes.jar中。而壳Module的启动Application也需要在编译后修改attachBaseContext方法,加入脱壳代码的引用。这块都可以通过修改class中的方法来实现。而脱壳后,实质上还是运行apk中的代码,因此,apk中也需要对应修改以上两处。

基于以上思路,实现可以加固的一个简单插件。

源码地址:https://github.com/milovetingting/Shell

使用步骤

  1. 新建项目,再新建一个Android Library类型的Module作为壳Module,名称随意,以"shell"为例,在壳Module中新建继承自Application的类,以"ShellApplication"为例,在ShellApplication中重写attachBaseContext方法,这个方法需要调用super.attachBaseContext(base)方法:
public class ShellApplication extends Application {

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

}
  1. 主Module需要依赖刚才新建的壳Module,并指定主Module的启动Application为刚才新建的ShellApplication。

  2. 项目根目录下的build.gradle中引入插件:

buildscript {
    dependencies {
        //...
        classpath 'com.wangyz.plugins:ShellPlugin:1.0.0'
        //...
    }
}
  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. 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无法正常使用。

相关文章

  • Android应用加固的简单实现方案(二)

    个人博客http://www.milovetingting.cn Android应用加固的简单实现方案(二) 前言...

  • Android应用加固的简单实现方案

    个人博客http://www.milovetingting.cn Android应用加固的简单实现方案 概述 An...

  • Android 数据安全

    代码混淆 & apk的加固 常用加固平台:爱加密、360加固、腾讯加固、梆梆加固 Android应用加固原理 网络...

  • Android加固方案 之 类方法抽取指令

    前言 以前我们介绍了加密dex文件的加固方案Android最初的加固[https://www.jianshu.co...

  • 2019-03-06

    Android 定时开机方案 此方案用于实现Android主板的定时开机与Watchdog功能,应用于一些特殊产品...

  • android apk 加壳原理与实现

    请参考Android中的Apk的加固(加壳)原理解析和实现Android中的Apk加固原理解析和实现第2篇也是参考...

  • iOS 代码混淆

    讲代码混淆我们先来理解加固: 加固 什么是加固 加固是为了增加应用的安全性,防止应用被破解、盗版、二次打包、注入、...

  • AndroidLinker与SO加壳技术之上篇

    1. 前言 Android 系统安全愈发重要,像传统pc安全的可执行文件加固一样,应用加固是Android系统安全...

  • App应用加固方案

    可能面临的风险 网络方面 1.窃听风险(eavesdropping):第三方可以获知通信内容。2.篡改风险(tam...

  • Android逆向编程

    一、加固 APP应用加固 | 几维安全 联系我们--安天 智者安天下 你不知道的Android SDK安全测试 -...

网友评论

      本文标题:Android应用加固的简单实现方案(二)

      本文链接:https://www.haomeiwen.com/subject/kjfsphtx.html