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

news2024/12/23 14:49:18

在这里插入图片描述

目录

      • 应用签名未校验风险
      • 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";

    @Override
    protected 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) {

        }
    }

    @Override
    protected View addContentLayout() {
        return getLayoutInflater().inflate(R.layout.activity_start, contentLayout, false);
    }
}

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

8、结尾

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

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

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

在这里插入图片描述

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

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

相关文章

vscode打开多个标签页配置

前言 如果其中一个标签的文件没有修改,再打开一个文件时之前的打开的标签页就会被替换掉。 在工作中使用很不方便。 解决办法 文件-首选项--设置 下图取消勾选 取消之后如下 再去打开标签就会一致显示了

14:00面试,14:08就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

C++ Qt开发:StringListModel字符串列表映射组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QStringListModel字符串映射组件的常用方法及…

【QT Visual Studio环境配置】error MSB8020: 无法找到 v141/v142 的生成工具(完整版)

首先要了解V**平台工具集根据你安装的Visual Studio版本不同而有所区别,知道这个就容易解决问题了,确定你安装的那个版本,需要使用哪个工具集。 v143–>VS2022v142–>VS2019v141–>VS2017v140–>VS2015v120–>VS2013 一、解决…

【网络编程】poll和epoll服务器的设计

文章目录 前言一、poll二、epoll 1.epoll初识2.epoll服务器的设计3.epoll的工作原理4.epoll的优点5.epoll的工作模式总结 前言 poll和select一样,也是一种linux中的多路转接的方案。而poll解决了select的两个问题: 1.select的文件描述符有上限的问题。…

05鸿蒙APP开发之加载网络列表

目录 1、概述2、http请求封装2.1、为什么要封装Http请求?2.2、封装后的网络请求 3、发起请求并渲染列表数据第一步:准备一个目前能用的,测试API地址,如下:第二步:创建对应的实体对象第三步:调用…

10 Vue3中v-html指令的用法

概述 v-html主要是用来渲染富文本内容,比如评论信息,新闻信息,文章信息等。 v-html是一个特别不安全的指令,因为它会将文本以HTML的显示进行渲染,一旦文本里面包含一些恶意的js代码,可能会导致整个网页发…

对大学生创新创业某赛事目前存在的烂尾楼现象的一些研究的分享(1)

经过对”某某网”大学生创新创业大赛国赛第五届-第八届部分金奖项目的研究,进行较为充分的信息溯源、穿透调查,我发现不少项目存在赛事材料画大饼,严重不切合实际,参赛人员并非真正创新创业,赛后迅速销声匿迹、烂尾切割…

2023年全球架构师峰会(ArchSummit北京站2023)-核心PPT资料下载

一、峰会简介 ArchSummit聚焦业界强大的技术成果,秉承“实践第一、案例为主”的原则,展示先进技术在行业中的典型实践,以及技术在企业转型、发展中的推动作用。旨在帮助技术管理者、CTO、架构师做好技术选型、技术团队组建与管理&#xff0c…

机器学习——分类评价指标

【说明】文章内容来自《机器学习——基于sklearn》,用于学习记录。若有争议联系删除。 1、评价指标 对于模型的评价往往会使用损失函数和评价指标,两者的本质是一致的。一般情况下,损失函数应用于训练过程,而评价指标应用于测试过…

Apache Superset如何实现无公网ip实时远程访问本地数据【内网穿透】

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透,实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

CloudCanal x Debezium 打造实时数据流动新范式

简述 Debezium 是一个开源的数据订阅工具,主要功能为捕获数据库变更事件发送到 Kafka。 CloudCanal 近期实现了从 Kafka 消费 Debezium 格式数据,将其 同步到 StarRocks、Doris、Elasticsearch、MongoDB、ClickHouse 等 12 种数据库和数仓,…

[linux]进程间通信-管道pipe的实际用法(写入/读取)

一、需求 现有两个进程A和B,B进程含较为独立且复杂的业务逻辑,A进程为主控进程,现A进程需要控制B进程执行对应的功能,且要保持响应及时。 二、分析 典型进程间通信案例,因此使用linux下的管道方法(pipe&…

大创项目推荐 深度学习 机器视觉 人脸识别系统 - opencv python

文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 人脸识别系统 该项目…

在RT-Thread中使用SystemView进行调试分析

一、SystemView SystemView is a toolkit for visual analysis of any embedded system. SystemView gives complete insight into an application, to gain a deep understanding of the runtime behavior, going far beyond what a debugger is offering. This is particula…

maven学习和maven聚合工程搭建

1.学习maven maven的概念 项目管理工具 ,对jar进行依赖管理,编译,打包,单元测试,安装,部署,贯穿整个项目 为什么要学maven 要解决的问题: 不同的开发工具开发出来的项目目录结构…

元旦厦门游--ChatGPT/GPT4科研实践应用与AI绘图技术

2023年我们进入了AI2.0时代。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车,就有可能被淘汰在这个数字化时代,如何能高效地处理文本、文献查阅、PPT…

马蹄集第37周

1、最小子串覆盖 考点:双指针 代码: def judge(s,t,l,r):m [0] * (256)for i in t:m[ord(i)] 1for i in range(l,r1):if s[i] in t:m[ord(s[i])] - 1for i in m:if i > 0:return Falsereturn Truedef main():result "No"s input()t i…

EMNLP 2023 亮点回顾:大模型时代下的 NLP 研究

作为自然语言处理(NLP)领域的顶级盛会,EMNLP 每年都成为全球研究者的关注焦点。2023 年的会议在新加坡举行,聚集了数千名来自世界各地的专家学者,也是自疫情解禁以来,中国学者参会最多的一次。巧的是&#…