安卓APP加固是什么意思呢?

安卓APP加固是什么意思呢?
安卓APP一般分为.APK或者.aab后缀格式的安装包,这个其实是一个数据包,可以简单理解为类似ZIP格式的压缩包!
我们可以在本地电脑通过鼠标右键直接将APK安装包进行解压,直接解压就可以获得包内数据结构和代码文件;
也可以通过APP开发工具对包内文件进行破解,反编译,溯源甚至可以得到APP数据通信核心关键,甚至拿到数据库的漏洞或权限。
这样就非常容易受到别有用心之人的恶意攻击
安卓APP加固就可以简单的理解为安卓数据包的加密过程

安卓APP加固的作用是什么?
安卓APP加固之后可以有效的对APP启动项,核心代码,核心数据,数据库通信等关键部分进行加密处理;
可以有效提高APP被破解的难度
可以有效的保护项目安全,隐藏服务器地址等;

APK加固的策略有那些?
常见APK应用加固核心有DEX文件、SDK文件、SO文件加固这3类。

一.DEX加固

上图为DEX加固技术演化,几种方案加固程度不同:

混淆代码:最原始也是最基础的防护措施;

整体DEX加固(加壳);

拆分DEX加固:函数抽取及动态恢复,递增内存Dump的难度;

虚拟机加固:自定义指令虚拟机解释器,指令可混淆;

Java二C加固:将DEX指令转换为native指令执行,可递增混淆、字符串加密功能。

整体DEX加固,拆分DEX加固,均有相应的脱壳机,当前的防护程度几乎为零。

当前性能最强的加固方式是Java二c,将java指令转成c/c++指令,并做虚假控制流、字符串加密等处理,逆向难度最高。

二.SO加固

SO库文件通常存放着主要算法、关键协议等关键信息。

依据so结构特点,在2进制层面进行局部函数加解密。

SO加固前导出函数有三六九个函数,加固后只有四二个函数,其他的都是能够做加密的隐藏的。

三.SDK加固

SDK的加固策略和DEX类似,这里不做细致说明。

安卓apk加固方式有几种?安卓加固是什么意思呢?

常见APK应用加固核心有DEX文件、SDK文件、SO文件加固这3类。

本文介绍三种APK加固的策略。

一.DEX加固

上图为DEX加固技术演化,几种方案加固程度不同:

混淆代码:最原始也是最基础的防护措施;

整体DEX加固(加壳);

拆分DEX加固:函数抽取及动态恢复,递增内存Dump的难度;

虚拟机加固:自定义指令虚拟机解释器,指令可混淆;

Java二C加固:将DEX指令转换为native指令执行,可递增混淆、字符串加密功能。

整体DEX加固,拆分DEX加固,均有相应的脱壳机,当前的防护程度几乎为零。

当前性能最强的加固方式是Java二c,将java指令转成c/c++指令,并做虚假控制流、字符串加密等处理,逆向难度最高。

二.SO加固

SO库文件通常存放着主要算法、关键协议等关键信息。

依据so结构特点,在2进制层面进行局部函数加解密。

SO加固前导出函数有三六九个函数,加固后只有四二个函数,其他的都是能够做加密的隐藏的。

三.SDK加固

SDK的加固策略和DEX类似,这里不做细致说明。

安卓APP证书Android签名证书.keystore文件制作生成

安卓证书是每一个Android开发者应该掌握的基础技巧,这将有助于您将安卓APK安装包做签名归属。在制作安卓证书之前您应该准备一下JRE环境,如果您本地电脑还没有安装JRE环境,那么推荐您部署一下java的环境。

(图:安卓证书JAVA环境)

如果还没有,您可以到java官方去下载,,下载地址:https://www.oracle.com/java/technologies/downloads/

(图:下载java环境部署)

环境部署成功之后,我们进入到win+r启动CMD

(图:安卓证书制作)

开启cmd之后,进入到您java环境安装目录添加到临时环境变量

set PATH=%PATH%;"H:\java环境安装目录\bin"

在制作证书之前我们准备好一些常规设置项

安卓证书常规设置项目,全部为英文格式,国家代码中国为CN

安卓证书密码

安卓证书别名
安卓证书文件名
安卓证书有效期
安卓证书文件密码
开发者姓名
开发者公司名
开发者所在城市
开发者所在省市
开发者所在国家代码

使用命令“keytool -genkey”生成安卓证书

keytool -genkey -alias 自定义别名 -keyalg RSA -keysize 2048 -validity 36500 -keystore 自定义文件名.keystore

-alias 之后 跟随您自定义的别名;请输入英文

-keysize 默认2048

-validity 默认36500,证书有效期100年,您可以根据自己时间节点定义,比如365,代表有效期365天;

-keystore 自定义文件名.keystore 自定义的文件名,请输入英文

完整演示:

keytool -genkey -alias hehetest -keyalg RSA -keysize 2048 -validity 36500 -keystore hehetest.keystore

输入之后在cmd里面回车,会进入下一步

Enter keystore password:  //输入密码
Re-enter new password:   //再次输入密码  
What is your first and last name?  
  [Unknown]:  //输入名字  
What is the name of your organizational unit?  
  [Unknown]:  //输入团队名
What is the name of your organization?  
  [Unknown]:  //输入公司名
What is the name of your City or Locality?  
  [Unknown]:  //输入城市
What is the name of your State or Province?  
  [Unknown]:  //输入省份
What is the two-letter country code for this unit?  
  [Unknown]:  //输入国家,中国为CN
Is CN=XX, OU=XX, O=XX, L=XX, ST=XX, C=XX correct?  
  [no]:  //确认,输入y

Enter key password for <testalias>  
        (RETURN if same as keystore password):  //再次输入密码

之后系统会自动在您CMD所在的文件夹生成好一个.keystore的文件。

这个.keystore结尾的文件就是您的安卓证书了!

安卓证书是可以自定义,随时,无限制,本地生成的,也不需要付费给谷歌公司的,您可以在自己电脑上随时自由的制作安卓证书。

但这种自由随意仅仅建议您在开发阶段发挥,一旦您将安卓证书签名到了apk安装包,一旦您的APK对外发布,无论是分发还是上架应用商店,都不建议您再更换您的安卓证书,您应该明白安卓证书是每一个APP唯一的身份标识,一旦变更安卓证书,会让手机设备、平板设备等安卓系统设备无法再将新证书APK和旧证书APK进行关联。

更换安卓证书任意一项,都会导致在安卓系统桌面生成2个不同的图标,即使这两个APP的其他什么都一样,只变更了安卓证书,也会被系统认为是两个完全不同的APP。

同时也会导致很多第三方开放平台的接口通信受阻,很多三方平台,比如微信开放平台的微信分享、登录、支付等业务,都是绑定了唯一的安卓包名和签名的。大部分开放平台且可只允许输入一个包名和签名。