android 如何加固,Android应用加固的简单实现方案(二)
Android应用加固的简单实现方案(二)
前言
上一篇文章介绍了基于dex加固方案的两种具体实现。相对于手动加固,基于gradle实现的加固方案效率有了进一步提升。但是,还是需要在壳Module中增加util相关工具类的引用,为进一步减少代码侵入性,在前面方案的基础上,进一步完善插件的功能。
实现原理
为了避免在壳Module中引入脱壳相关的工具类,可以在aar生成后,利用ASM生成需要的class文件,然后修改aar中的classes.jar文件,将我们生成的class文件加入到classes.jar中。而壳Module的启动Application也需要在编译后修改attachBaseContext方法,加入脱壳代码的引用。这块都可以通过修改class中的方法来实现。而脱壳后,实质上还是运行apk中的代码,因此,apk中也需要对应修改以上两处。
基于以上思路,实现可以加固的一个简单插件。
使用步骤
新建项目,再新建一个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);
}
}
主Module需要依赖刚才新建的壳Module,并指定主Module的启动Application为刚才新建的ShellApplication。
项目根目录下的build.gradle中引入插件:
buildscript {
dependencies {
//...
classpath 'com.wangyz.plugins:ShellPlugin:1.0.0'
//...
}
}
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'
}
sync工程
在打包apk前,先执行Build-Clean Project,然后双击gradle面板的app/Tasks/build/assembleRelease,就会在项目根目录/壳Module名称-release/outputs/下生成signed.apk,这个apk就是加固过的apk.
注意事项
这里只是演示加固的思路,对于加密部分,只是用了简单的^操作,具体可以自己换成AES,RSA或者其它加密方式。
插件会用到dx,gralde的命令,因此需要配置这两个的路径
插件会用到ASM,在编译出class后修改class。在生成apk后,没有修改过代码或者没有执行sync的操作后,transform的回调不会走,因此也不会执行修改class的逻辑,因此在每次生成加固apk前,需要执行clean项目的操作。
引入插件后的配置文件一定不能错,重点关注shellModuleName和shellApplication,否则会导致生成的apk无法正常使用。
android 如何加固,Android应用加固的简单实现方案(二)相关推荐
- Android应用加固的简单实现方案
个人博客 http://www.milovetingting.cn Android应用加固的简单实现方案 概述 Android应用加固的诸多方案中,其中一种就是基于dex的加固,本文介绍基于dex的加 ...
- android elf 加固_Android so加固的简单脱壳
Android应用的so库文件的加固一直存在,也比较常见,特地花时间整理了一下Android so库文件加固方面的知识.本篇文章主要是对看雪论坛<简单的so脱壳器>这篇文章的思路和代码的分 ...
- 019 Android加固之APK加固的原理和实现
文章目录 前言 加载Activity遇到的问题 APK的启动过程 替换ClassLoader流程 获取ActivityThread类对象 获取AppBindData类对象mBoundApplicati ...
- 【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )
文章目录 一. 购买加固服务 二. 设置资源加固 三. 设置 SO 文件保护配置 四. 设置 SO 防盗用文件配置 五. 反编译验证加固效果 本博客用于记录下 360 加固保 加固应用流程 ; ( 上 ...
- 华为android加固,app安全加固学习记录
加固保学习 加固前的原包请先用签名工具对该apk进行签名,再加固,并重新签名,保证加固前后都用签名工具签一次名. 注:加固后不签名则可能安装不了. Q:如何查看应用的签名证书? A:目录下找到名为ME ...
- 【Android 安全】Android 应用 APK 加固总结 ( 加固原理 | 应用加固完整的实现方案 | 源码资源 )
文章目录 一. APK 加固原理 1. Android 应用反编译 2. ProGuard 混淆 3. 多 dex 加载原理 4. 代理 Application 开发 5.Java 工具开发 6.Ap ...
- 360加固android app反编译,apk360加固脱壳
360加固保动态脱壳,360加固保带给我们的惊喜,360加固脱壳工具,apk360加固脱壳 360 加固后的 apk,在 arm 设备上首先会将 assets 目录下的 libjiagu.so 拷贝到 ...
- Android studio gradle实现360加固保自动化打包
Android studio gradle实现360加固保自动化打包 随着目前行业竞争越来越激烈,apk加固防逆向应该是标配,而360加固保应该是这方面比较成熟可靠的加固工具了,一次性完成了签名混淆加 ...
- 在Android Studio中实现360加固自动化,进一步提升生产力!
1.概述 Android Studio目前已经成为Android APP开发的首选IDE,其使用Gradle作为构建系统,Gradle使用groovy语言作为DSL可以扩展出随心所欲的功能,让APK构 ...
最新文章
- 《智能数据时代:企业大数据战略与实战》一3.5 步步为营
- 吐血整理:论文写作中注意这些细节,能显著提升成稿质量
- AndroidStudio的几种依赖方式
- EFM32外设模块—USART V1.00
- 简洁又快速地处理集合——Java8 Stream(下)
- java方法不可覆盖_详解Java构造方法为什么不能覆盖,我的钻牛角尖病又犯了.......
- php5.5 反序列化利用工具_Yii框架反序列化RCE利用链2
- EBS 报表输出PDF时中文乱码
- Redis 学习---(5)Redis 命令
- mybatis关联查询之一对多,多对一,以及多对多
- 【Part1】用JS写一个Blog(node + vue + mongoDB)
- 数据挖掘实践(金融风控)——task1:赛题理解
- 机器学习项目实战----信用卡欺诈检测(二)
- 铵钮提交事件PostBack之后,一些动态加载的物件丢失
- ubuntu 上搭建lanp环境
- 手把手教你用R语言制作网络爬虫机器人(一)
- 前端和后端的英文_前端工程师和后端工程师
- 百度员工离职总结:如何做个好员工?(严重推荐)
- go vender 的环境搭建和使用
- java如何控制远程桌面_Java实现屏幕抓图,控制远程桌面