App安全检测实践基础——客户端程序安全 01

目录

安装包签名

反编译保护

应用完整性校验

程序可被任意调试

程序数据任意备份

资源文件保护


App安全检测实践基础——客户端程序安全


注明:影响范围  Android所有版本


安装包签名

1、描述

每个Android应用程序想要安装运行,必须经过签名.所以开发者在发布安装包时,必须对安装包进行签名.签名信息中包含的组织信息,将便于用户识别安装包的真伪.部分手机杀毒软件也是基于签名信息进行查杀的.因此一个完整详细的签名信息,有助于提高用户分辨真伪安装包.

2、过程

  • 使用签名工具或者jeb查看签名和证书信息,查看签名是否符合以下标准格式。CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)。
  • jarsigner -verify -verbose -certs xxx.apk

    检测发现如下信息——不符合规定要求。

 

3、建议

  • 将安装包进行签名并检测安装包签名的异常。
  • 完善企业签名组织信息
  • 在应用发布时使用企业签名对安装包进行签名

反编译保护

1、描述

Android应用程序是使用Java进行开发,运行于Java虚拟机(Dalvik)的应用程序.通过反编译工具可以很方便地得到Dalvik虚拟机所执行的Smali代码和Java代码.便可对Android应用程序进行分析,修改,重打包.若没有任何加固保护措施,应用程序的逻辑将完完整整地暴露给分析者.

2、过程

  • 使用Jeb、AndroidKiller_v1.3.1等反汇编工具加载目标Apk,检测Apk是否经过混淆或者加固

经过检测发现情况如下:

代码没有经过混淆或者加固,攻击人员可以通过攻击反编译.直接在源码层次进行攻击.

3、建议

  • 对客户端代码进行代码混淆
  • 对客户端进行加壳加固处理

应用完整性校验

1、描述

由于Android系统固有的缺陷,Android应用分发渠道管理机制等问题,导致Android客户端程序很容易被反编译篡改/二次打包,经任意签名后可在各个渠道或论坛中发布,这不仅损害了开发者的知识产权,更可能威胁到用户的敏感信息及财产安全,因此对客户端自身进行完整性校验尤为必要.

2、过程

  • 只用apktool工具解包然后在重新打包apk,检测apk能否正常使用
apktool d apk
apktool b dir -o out.apk
重签名apk

如果app没有对dex或者签名进行校验的话,可以随意修改smali代码和资源文件.比如可以修改图标.下图展示了把某证券类应用图片替换为手电筒应用. 

更改之前:

更改之后:

发现变成其他头像了;还是可以打开的;

改过之后,进行签名设置

执行命令:java -jar signapk.jartestkey.x509.pem testkey.pk8 原apk文件名 新apk文件名

安装APK;

若没有进行自校验,则可以正常打开软件,则测试不通过,说明存在漏洞风险

若应用进行了自校验,则无法启动软件,测试通过;不存在;

3、建议

  • 增加签名验证逻辑
  • 增加完整性校验逻辑

程序可被任意调试

1、描述

当在AndroidManifest.xml文件中设置android:debuggable="true"时,应用程序可以以调试模式启动,并被任意调试器附加调试.

2、过程

  • 使用Jeb加载apk客户端文件
  • 检查manifest文件的application节点是否设置android:debuggable="true"

如果客户端把android:debuggable属性设置为true.可以试用adb命令对客户端进行调试,方便进行逆向分析;存在漏洞风险

3、建议

  • 不设置android:debuggable属性,或设置该属性的值为false;

程序数据任意备份

1、描述

当在AndroidManifest.xml文件中未设置android:allowBackup属性值或,设置android:allowBackup="true"时,可对应用程序私有目录下的所有数据进行备份.

2、过程

通过检测发现AndroidManifest.xml中存在备份的设置为真;

3、建议

  • 设置AndroidManifest.xml中的android:allowBackup的属性值为false

资源文件保护

1、描述

Android apk中的资源主要分为assets资源和res资源两类.Assets资源存放在APP的assets目录下,该类文件是一些原始文件,APP打包时并不会对其进行编译,而是直接打包到APP中,对于这一类资源文件的访问,应用层代码需要通过文件名对其进行访问.Res资源则存放在APP的res目录下,该类资源在APP打包时大多会被编译,变成二进制文件,并会为每个该类文件赋予一个resource id.对于该类资源的访问,应用层代码则是通过resource id进行访问的.Android apk开发过程中公司大都提倡命名规范化,因此通过文件名称非常容易理解其含义,这样有利于开发者理解和维护应用,但是同时也给应用破解者提供了方便,破解者通过这些命名很容易便可找到他们需要的文件位置,并理解这些文件的意图.

2、过程

普通app没有经过资源保护的res文件夹如下:

经过混淆后的res文件夹如下

还可以通过——隐藏的方式对资源文件进行保护.经过加固隐藏后的res文件夹

隐藏了一些比较重要的文件

经过混淆后的res文件夹如下

文件夹中有各种的后缀做混淆:如:.a     .iso    .d    .conf   等

 

普通app没有经过资源保护的assets文件夹

如果代码经过混淆,或者有加壳措施,不能完整恢复源代码的,都可以认为此项安 全。

3、建议

  • 使用加固工具或者AndResGuard对资源进行混淆保护


参考链接:

https://www.cnblogs.com/ffrs/p/11352485.html

https://blog.csdn.net/ssjjtt1997/article/details/98947034

https://blog.csdn.net/cc20032706/article/details/70670163

https://www.cnblogs.com/Durant0420/p/13397665.html

猜你喜欢

转载自blog.csdn.net/weixin_43650289/article/details/109115127
今日推荐