Android App程序应用未校验签名证书——————《风险等级高》

在这里插入图片描述

目录

      • 应用签名未校验风险
      • 1、检测目的
      • 2、风险等级
      • 3、检测依据
      • 4、风险描述
      • 5、检测步骤
      • 6、结果描述
      • 7、解决方案
        • 7.1、Android 检验 APK 是否签名的代码
        • 7.2、检验APK签名
      • 8、结尾

应用签名未校验风险

1、检测目的

检测App程序启动时是否校验签名证书。

防止App的盗版率。未进行签名证书的App,可能被反编译后进行二次打包。

重新打包签名的应用,可能导致App被仿冒盗版,影响其合法收入,甚至可能被添加钓鱼代码、病毒代码、恶意代码,导致用户敏感信息泄露或者恶意攻击。

2、风险等级

高。

3、检测依据

《GBT28448-2019 信息安全技术 网络安全等级保护测评要求》,【移动应用管控】测评单元 (L3-CES3-04):应只允许指定证书签名的应用软件安装和运行。

【移动应用软件开发】测评单元 (L3-CMS3-04):应保证开发移动业务应用软件的签名证书合法性。

中国信息安全测评中心旗下“国家信息安全漏洞库“关联漏洞编号:CNNVD-201307-154;CVE-2013-4787《DL/T 2031-2019 电力移动应用软件测试规范》9.2.2.8.1 c)基于Android开发的移动应用应对签名信息进行安全校验。

4、风险描述

签名证书是对App开发者身份的唯一标识,开发者可利用签名证书有效降低App的盗版率。

未进行签名证书的App,可能被反编译后进行二次打包。

重新打包签名的应用,可能导致App被仿冒盗版,影响其合法收入,甚至可能被添加钓鱼代码、病毒代码、恶意代码,导致用户敏感信息泄露或者恶意攻击。

5、检测步骤

  1. 对应用APK包进行重新签名打包。
  2. 然后执行命令安装到android设备上,查看是否安装成功,同时启动重新签名的应用,根据运行日志和执行任务栈分析是否可以成功启动且未弹出任何警告信息,是,则存在风险;否,则安全

6、结果描述

如果App程序未对签名证书进行校验,被其他证书重新签名后可以照常启动。

日志信息:

--------- beginning of main
--------- beginning of system
12-19 09:21:57.693   113   304 I ActivityManager: START u0 {flg=0x10000000 cmp=com.harry.demo/.activity.WelcomeActivity} from uid 2000 on display 0
12-19 09:21:57.713   113   496 I ActivityManager: Start proc 16142:com.harry.demo/u0a58 for activity com.harry.demo/.activity.WelcomeActivity
12-19 09:21:58.476   113   496 I ActivityManager: Start proc 16183:com.harry.demo:ipc/u0a58 for service com.harry.demo/io.rong.imlib.ipc.RongService
12-19 09:21:58.518   113   495 I ActivityManager: Start proc 16205:io.rong.push/u0a58 for service com.harry.demo/io.rong.push.rongpush.PushService
12-19 09:21:59.048   113   134 I ActivityManager: Displayed com.harry.demo/.activity.WelcomeActivity: +1s346ms (total +1m43s74ms)
12-19 09:22:00.617   113   495 I ActivityManager: START u0 {cmp=com.harry.demo/.activity.WelcomeGuideActivity} from uid 10058 on display 0
12-19 09:22:00.998   113   134 I ActivityManager: Displayed com.harry.demo/.activity.WelcomeGuideActivity: +375ms

7、解决方案

App自行增加签名证书的校验代码或使用第三方签名校验保护功能,降低应用被二次打包的风险。

7.1、Android 检验 APK 是否签名的代码

在 Android 开发中,我们常常需要验证 APK 文件是否被正确签名。

APK 签名是一种保障应用安全性的重要方式,通过验证签名可以确保 APK 文件的完整性和来源。

下面将介绍如何在 Android 中使用代码来检验 APK 是否签名。

public class ApkSignatureVerifier {public static String md5(byte[] bytes) {try {MessageDigest md5 = MessageDigest.getInstance("MD5");byte[] digest = md5.digest(bytes);StringBuilder sb = new StringBuilder();for (byte b : digest) {sb.append(String.format("%02x", b & 0xff));}return sb.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}
}
7.2、检验APK签名

获取到 APK 的签名信息后,我们可以将其与预先保存的正确签名进行比较,来验证 APK 是否被正确签名。

public class WelcomeActivity extends BaseActivity {private static final String VALID_SIGNATURE = "69D4D6B18331A2B645286CC80435D605";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);hideTitleBar();getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);try {String pkgName = getPackageName();PackageInfo mPkgInfo = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);Signature[] signatures = mPkgInfo.signatures;for (Signature sign : signatures) {String md5 = ApkSignatureVerifier.md5(sign.toByteArray());Log.e("WelcomeActivity >>>", md5);assert md5 != null;// 不区分大小写if (md5.equalsIgnoreCase(VALID_SIGNATURE)) {// APK 签名正确Log.e("APK Signature", "正确");                 } else {// APK 签名不匹配Log.e("APK Signature", "不匹配");ToastUtils.showShort(WelcomeActivity.this,"App签名不匹配");finish();}}} catch (Exception e) {}}@Overrideprotected View addContentLayout() {return getLayoutInflater().inflate(R.layout.activity_start, contentLayout, false);}
}

在以上示例代码中,我们将获取到的签名信息与一个预先保存的有效签名进行比较。如果签名匹配,则说明 APK 签名是有效的;如果签名不匹配,则说明 APK 签名是无效的。

8、结尾

通过以上代码示例,我们可以在 Android 开发中使用 Java 代码来检验 APK 是否签名。这样可以确保 APK 文件的完整性和来源,从而提高应用的安全性。

在实际开发中,我们可以将验证签名的逻辑应用在应用启动时或者下载 APK 文件后进行检验,以确保应用的安全性。

以上是关于 Android 检验 APK 是否签名的代码示例,希望能对你有所帮助!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Set A Light 3D Studio for Mac - 构建逼真的照明场景!

Set A Light 3D Studio 是一款专业的照明设计和模拟软件,旨在帮助摄影师、电影制片人和视觉艺术家创建逼真的照明场景。无论你是在拍摄电影、广告、时尚杂志还是其他视觉艺术项目,这个软件都能帮助你实现你的创意想法。 Set A Light 3D Studio Mac版 ✨…

【C++入门到精通】 原子性操作库(atomic) C++11 [ C++入门 ]

阅读导航 引言一、原子性操作库简介二、原子变量1. 原子类型2. 原子类型函数3. 使用示例 三、总结温馨提示 引言 当谈及并发编程时,确保数据的安全性和一致性是至关重要的。在C11中引入的原子性操作库(atomic)为我们提供了一种有效且可靠的方…

2004年AMC8数学竞赛中英文真题典型考题、考点分析和答案解析

今天距离2024年的AMC8美国数学竞赛举办已不足一个月了,赶紧利用周末的时间刷刷真题,查漏补缺吧!如果您有任何关于AMC8比赛的任何问题都可以问我,关于题目的解析也可以交流。 今天六分成长继续和您一起,从历年的真题中来…

Ubuntu 常用命令之 man 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 man命令在Ubuntu系统中是一个非常重要的命令,它用于查看系统的手册页。手册页是Linux和Unix系统中的一种在线文档,用于描述系统中的命令、函数、配置文件等的详细信息。 man命令的基本格式是 man [选项] …

FPC柔性线路板使用UV胶水的优势有哪些?

UV胶水在FPC柔性线路板的装配中具有明显的优势: 快速固化 UV胶水在紫外线照射后10秒左右迅速固化,因此它能够在短时间内完成连接。这非常有助于实际工业作业中提高生产效率,特别是在需要大批量生产的情况下。 精确控制固化时间 UV胶水的固…

pip 常用指令 pip cache 命令用法介绍

📑pip 常用命令归类整理 pip cache 是一个用于管理pip缓存的命令。pip是Python的包管理器,用于安装和管理Python包。当你使用pip安装一个包时,pip会首先在其缓存中查找该包。如果在缓存中找到,pip将从缓存中安装该包,…

【ARM 安全系列介绍 3.4 -- 安全证书介绍】

文章目录 安全证书安全证书的主要组成部分安全证书的应用场景证书使用举例 证书格式PEM (Privacy Enhanced Mail)DER (Distinguished Encoding Rules)PKCS#7/P7B (Public Key Cryptography Standards #7)PKCS#12/PFX (Public Key Cryptography Standards #12)P7B 和 PFX/P12 的…

Vue 在同一个项目中,判断pc端和移动端,显示不同风格的页面(附pc端移动端显示效果图)

实现思路 1、修改index.html页面的meta 2、增加pc端移动端的判断 3、设置路由&#xff0c;根据不同的端&#xff0c;调用各自的路由&#xff0c;显示不同的页面 index.html 修改如下 <meta name"viewport" content"widthdevice-width,initial-scale1.0,minim…

51单片机模数转换ADC原理与代码一

51单片机模数转换ADC原理与代码一 1.概述 这篇文章是模数转换的入门文章&#xff0c;这篇文章主要介绍模数的概念、原理、核心指标、专业术语&#xff0c;以及一个模数转换的实例代码实现检测电位器的数值变化。 2.ADC介绍 2.1.ADC概念 ADC(Analog-to-Digital Converter)是…

tomcat和nginx自定义404错误页面

nginx 编辑nginx配置文件 vim /www/server/nginx/nginx.conf server{listen 80;error_page 404 /404.html;location /404.html{root /home/liu/html/error-html;} }在家目录下创建一个html/error-html目录&#xff0c;用于存放错误页面 在error-html目录下创建404.html&a…

node.js mongoose index(索引)

目录 简介 索引类型 单索引 复合索引 文本索引 简介 在 Mongoose 中&#xff0c;索引&#xff08;Index&#xff09;是一种用于提高查询性能的数据结构&#xff0c;它可以加速对数据库中文档的检索操作 索引类型 单索引、复合索引、文本索引、多键索引、哈希索引、地理…

ubuntu20 安装缺失的字体

在/usr/share/fonts创建文件夹winfonts sudo mkdir winfonts 下载缺失的字体后&#xff0c;复制命令到对应的文件夹。 刷新字体库 sudo mkfontscale sudo mkfontdir sudo fc-cache

十二、W5100S/W5500+RP2040之MicroPython开发<MQTT旧版OneNET示例>

文章目录 1. 前言2. 平台操作流程3. WIZnet以太网芯片4. 示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 烧录验证 5. 注意事项6. 相关链接 1. 前言 在这个智能硬件和物联网时代&#xff0c;MicroPython和树莓派PICO正以其独特的优势引领着嵌入式开发…

人工智能_机器学习070_SVM支持向量机_软间隔及优化_硬间隔_衡量间隔软度_引入松弛变量_理解隔离参数---人工智能工作笔记0110

我们继续说,之前说的C是什么意思? 我们在这个软间隔优化中就可以引出C 可以看到之前我们讨论的问题,都是基于样本点的,完全的线性可分的问题,我们称为硬间隔 可以看到这种,一分就可以,分开,简单分割就可以分开的数据,我们称之为硬间隔 但是可以看到上面这种情况,无论怎么分,都…

智能硬件(6)之通用引脚(GPIO)

小编带领大家学习的四大开源硬件和智能模块&#xff0c;他们之间是如何通信的&#xff0c;主控芯片是如何控制智能模块&#xff0c;做某些事情呢&#xff1f;有没有小朋友发起疑问呢&#xff1f; 这里&#xff0c;涉及到了特别重要的知识点&#xff0c;就是通用引脚&#xff0c…

Apache Flink 进阶教程(六):Flink 作业执行深度解析

目录 前言 Flink 四层转化流程 Program 到 StreamGraph 的转化 StreamGraph 到 JobGraph 的转化 为什么要为每个 operator 生成 hash 值&#xff1f; 每个 operator 是怎样生成 hash 值的&#xff1f; JobGraph 到 ExexcutionGraph 以及物理执行计划 Flink Job 执行流程…

华为端口隔离简单使用方法同vlan下控制个别电脑不给互通

必须得用access接口&#xff0c;hybrid口不行 dhcp enable interface Vlanif1 ip address 192.168.1.1 255.255.255.0 dhcp select interface interface MEth0/0/1 interface GigabitEthernet0/0/1 port link-type access port-isolate enable group 1 interface GigabitEther…

【大模型实践】基于文心一言的对话模型设计

文心一言&#xff08;英文名&#xff1a;ERNIE Bot&#xff09;是百度全新一代知识增强大语言模型&#xff0c;文心大模型家族的新成员&#xff0c;能够与人对话互动、回答问题、协助创作&#xff0c;高效便捷地帮助人们获取信息、知识和灵感。文心一言从数万亿数据和数千亿知识…

机器学习笔记 - 音频信号处理基础知识

一、音频处理基础 音频处理是指使用各种技术和算法对音频信号进行操作和修改。 它涉及对音频数据应用数字信号处理 (DSP) 方法,以增强、修改或分析声音。音频处理广泛应用于各种应用中,包括音乐制作、电信、语音识别、音频压缩等。 1、信号类型 连续信号:连续信号或连续时间…

构建创新学习体验:企业培训系统技术深度解析

企业培训系统在现代企业中发挥着越来越重要的作用&#xff0c;它不仅仅是传统培训的延伸&#xff0c;更是技术创新的结晶。本文将深入探讨企业培训系统的关键技术特点&#xff0c;并通过一些简单的代码示例&#xff0c;展示如何在实际项目中应用这些技术。 1. 前端技术&#…