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.hqwc.cn/news/295490.html

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

相关文章

Python3 迭代器与生成器

迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:iter…

C/C++ 基础函数

memcpy:C/C语言中的一个用于内存复制的函数,声明在 string.h 中(C是 cstring) void *memcpy(void *destin, void *source, unsigned n);作用是:以source指向的地址为起点,将连续的n个字节数据,…

微服务之配置中心与服务跟踪

zookeeper 配置中心 实现的架构图如下所示,采取数据加载到内存方式解决高效获取的问题,借助 zookeeper 的节点监听机制来实现实时感知。 配置中心数据分类 事件调度(kafka) 消息服务和事件的统一调度,常用用 kafka …

基于阻塞队列下的生产者消费者模型(多线程)

目录 一、生产者消费者模型1.1 为何要使用生产者消费者模型1.2 生产者消费者模型优点1.3 基于BlockingQueue的生产者消费者模型1.4 C用queue模拟阻塞队列的生产消费模型1.4.1 makefile1.4.2 BlockQueue.hpp1.4.3 LockGuard.hpp1.4.4 Task.hpp1.4.5 main.cc 二、Linux多线程内容…

1854_bash中利用管道进行批量参数传递以及由此实现简单的代码行数统计

Grey 全部学习内容汇总: GreyZhang/bash_basic: my learning note about bash shell. (github.com) 1854_bash中的参数传递以及利用bash进行简单的代码行数统计 有时候需要处理多个文件,把每一个文件作为参数传递给某一个程序。这时候可以用到 xargs&…

XSKY星辰天合星海架构荣获 IT168 “2023 年度技术卓越奖”

近日,"2023 年度技术卓越奖"获奖名单公布,XSKY 星辰天合的星海架构(XSEA,极速全共享架构)获得行业 CIO/CTO 大咖、技术专家及 IT 媒体三方认可,成功入选! “技术卓越奖”评选由国内著…

KMP入门级别算法详解--终于解决了(next数组详解)

对于正常的字符串模式匹配,主串长度为m,子串为n,时间复杂度会到达O(m*n),而如果用KMP算法,复杂度将会减少线型时间O(mn)。 设主串为ptr"ababaaababaa";&#…

双非本科求职_面试经验

前言 继上次发实习面经已经过去一个多快两个月,这期间又面试了不少,但由于赶上秋招因此一直没写后续,今天做个回忆总结。由于菜鸟脑容量本来就不咋地,所以当初没写导致现在忘了好多,因此就写那些印象比较深的吧。交代…

【C++进阶02】多态

一、多态的概念及定义 1.1 多态的概念 多态简单来说就是多种形态 同一个行为,不同对象去完成时 会产生出不同的状态 多态分为静态多态和动态多态 静态多态指的是编译时 在程序编译期间确定了程序的行为 比如:函数重载 动态多态指的是运行时 在程序运行…

变限积分求导(带参,极限)

方法 一般形 带参数方程形 带极限型

IDEA 中 Tomcat 日志乱码

1、服务器输出乱码 修改 File -> settings -> Editor -> General ->Console 中,utf-8改为GBK,反之改成utf-8 2、Tomcat Localhost Log 或者 Tomcat Catalina Log乱码 进入Tomcat 中的conf文件中的logging.properties 哪个有问题改哪个&…

Ubuntu:VS Code上C++的环境配置

使用 VSCode 开发 C/C 程序 , 涉及到 工作区的.vscode文件夹下的3个配置文件(均可以手动创建) : ① tasks.json : 编译器构建 配置文件 ; ② launch.json : 调试器设置 配置文件 ; ③ c_cpp_properties.json : 编译器路径和智能代码提示 配置文件 ; …