Android系统Rom与Apk签名工具详解与实践

Android系统Rom与Apk签名工具详解与实践

本文还有配套的精品资源,点击获取

简介:在Android开发和应用发布流程中, Rom 和 Apk 的签名是保证软件安全和完整性的关键环节。本文深入介绍 Rom 和 Apk 签名工具的使用方法与重要性。 Rom 签名旨在验证固件来源和完整性,防止恶意篡改,而 Apk 签名则确保应用的安全性和开发者身份。通过签名工具如 signapk.jar 、 apksigner 等,开发者可以简便地完成签名操作,同时需要注意私钥的管理以确保安全。对于设备制造商,提供安全的签名工具和流程对于用户安全和品牌信誉至关重要。

1. Android Rom签名概念与实践

1.1 理解Rom签名

在Android开发中,Rom签名是保证系统固件完整性和来源可信度的重要手段。它通过特定的数字签名,确保Rom包在传输和安装过程中未被篡改,同时验证其发布者的身份。了解Rom签名的基本概念对于开发者和高级用户而言是必不可少的,以确保他们的设备能够安全且可靠地运行定制固件。

1.2 Rom签名的重要性

Rom签名不仅仅是一个技术要求,更是一种安全标准。它防止了恶意软件的注入,并通过签名的验证来确保系统的稳定性和安全性。对于设备制造商和固件开发者来说,实施签名机制是品牌信誉的重要保障,并且是保护用户免受恶意软件威胁的有效措施。

1.3 实践中的Rom签名

本章将引导读者了解如何在实践中进行Rom签名,包括创建密钥对、生成签名、以及如何在固件构建过程中集成签名。此外,还将探讨使用各种工具进行签名的方法和最佳实践。通过详细的步骤和解释,即使是初学者也能掌握Rom签名的基本技能。

2. Android Apk签名概念与实践

2.1 签名基础原理

2.1.1 数字签名的作用与意义

数字签名是信息安全的关键技术之一,它能够确保消息的完整性、身份认证以及防止否认。在Android Apk签名的语境下,数字签名的作用尤为突出。它不仅保证了应用的安全性,使得用户能够确认应用来源的真实性,而且也确保了应用在发布后无法被他人篡改。一旦Apk被签名,任何对文件的改动都会导致签名无效,这样用户下载安装时可以被系统检测出来,从而保护用户不受恶意软件的侵害。

在Android系统中,数字签名是基于公钥基础设施(PKI)来实现的。每一个Android开发者都需要使用自己的密钥对Apk进行签名,然后才能发布到Google Play或其他应用市场。一旦用户下载安装该Apk,系统会验证签名的完整性和真实性,以此来保证应用的安全性。

2.1.2 Android签名机制详解

Android签名机制是整个Android安全框架的一部分。签名的Apk文件在安装时,系统会通过签名来验证应用的完整性。如果签名匹配,系统会认为该应用是合法的,并且自签名之后未被修改过。签名机制同样定义了如何在开发、测试和发布阶段管理签名密钥。

在Android开发中,签名通常使用Java的密钥库(keystore)和密钥别名(keyalias)。一个keystore可以包含多个keypair,每个keypair包含一对公钥和私钥。开发者需要保护好私钥,因为它是用来对Apk进行签名的关键。公钥则包含在签名的Apk中,供安装时验证使用。

使用JKS(Java KeyStore)格式的keystore是Android开发中最常见的做法。不过,从Android Studio 2.2开始,开发者可以使用Android Keystore系统来生成密钥对,这种密钥对与Android设备的硬件相关联,并且更加安全。

2.2 签名实践操作

2.2.1 使用工具进行Apk签名

在Android开发过程中,开发者通常使用Android Studio或命令行工具jarsigner来对Apk进行签名。首先,需要生成一个keystore文件,并创建一个密钥对。

下面是一个使用jarsigner工具进行签名的示例代码块及其解释:

# 生成一个新的keystore文件,此例中名为my-release-key.keystore,密码为storepassword,两年后过期。

keytool -genkeypair -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 730

# 使用jarsigner工具签名Apk文件,keystore文件名为my-release-key.keystore,别名为my-key-alias,keystore密码为storepassword,Apk文件名为my-app.apk。

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my-app.apk my-key-alias

上述命令中, -genkeypair 用于生成密钥对, -v 表示详细输出模式, -keystore 指定keystore文件路径, -alias 指定密钥别名, -keyalg 指定使用的密钥算法, -keysize 指定密钥长度, -validity 指定密钥有效期。

接下来,使用 jarsigner 对已生成的keystore进行签名操作。其中, -sigalg 指定签名算法, -digestalg 指定摘要算法。

2.2.2 Rom签名过程详解

Rom签名的过程与Apk签名类似,但关注点有所不同。Rom签名通常用于定制的Android操作系统,而不是单一的应用程序。Rom签名的目的是确保设备启动时加载的系统软件未被篡改。在Android设备中,通常会有专门的bootloader来加载和验证Rom签名。如果签名不符,设备将不会启动或显示错误消息。

下面是一个基于传统Android Rom签名过程的简化版说明,实际过程可能根据具体设备和Rom的不同而有所差异:

graph LR

A[开始签名过程] -->|提取固件| B[获取未签名的Rom]

B --> C[生成签名密钥]

C --> D[使用签名密钥对Rom进行签名]

D --> E[合并签名到Rom镜像中]

E --> F[测试签名的Rom]

F --> G{签名有效?}

G -->|是| H[完成签名,准备发布]

G -->|否| I[返回修正签名错误]

在上述流程中, 提取固件 是获取设备上当前运行的固件的步骤, 生成签名密钥 是为Rom签名创建特定的密钥对, 使用签名密钥对Rom进行签名 涉及到具体的签名操作, 合并签名到Rom镜像中 则是将签名信息加入到Rom的特定位置。最后, 测试签名的Rom 是验证签名是否被正确应用的必要步骤。

完成签名的过程需要开发者具备对Android设备硬件和固件的深入了解,以及对签名过程的精准控制。这通常是一个高风险的过程,因为错误的签名可能导致设备无法启动。因此,这个过程需要谨慎操作,并对出现的问题有快速准确的故障排除能力。

3. Rom签名工具介绍

3.1 工具选择与对比

3.1.1 各类工具的功能特性

在Android开发和自定义Rom的构建过程中,Rom签名是一个不可或缺的步骤,它确保了固件的完整性和安全性。随着Android开源项目(AOSP)的不断发展,众多开发者和企业推出了各自的Rom签名工具。这些工具在功能上各有侧重点,有的强调操作简便,有的注重安全性,还有的提供批处理等高级功能。以下是几个广泛使用的Rom签名工具及其功能特性:

Magisk : Magisk是一个用于Android系统的通用型框架,它允许用户获取root权限,同时保持与Google Play服务的兼容性。它的签名工具主要用于在不触发Google SafetyNet的情况下对Rom进行签名,特别适合需要root权限的用户。

heimdall : Heimdall是一个开源的命令行工具,用于与Samsung设备进行通信,进行固件的烧录。虽然它主要用于固件的刷写,但它也包含了签名功能,用于确保固件的完整性。

fastboot : Android SDK中的fastboot是一个广泛使用的工具,它允许用户通过USB与设备的bootloader进行通信。fastboot包括了Rom签名的功能,但它的主要作用是刷写和恢复设备。

每个工具都有其特定的使用场景和用户群体。Magisk在root用户中尤为流行,heimdall在Samsung设备用户中占有一席之地,而fastboot则几乎是所有Android开发者必备工具之一。

3.1.2 选择适合的签名工具

选择适合自己的Rom签名工具主要考虑以下几个因素:

兼容性 : 确保所选工具支持你的设备类型。不同的设备可能需要不同的签名工具或参数。

功能需求 : 根据个人或项目的需求选择功能最匹配的工具。例如,如果你需要进行大量的Rom测试,可能需要一个支持自动化签名流程的工具。

易用性 : 对于新手开发者来说,一个用户界面友好,文档详细的工具能更快地帮助他们上手。

社区支持 : 一个拥有活跃社区的工具往往能够提供更多的帮助和更新,从而保证了工具的持续可用性和安全性。

3.2 工具使用教程

3.2.1 常用Rom签名工具操作指南

在本小节,我们将详细探讨Magisk和heimdall这两种Rom签名工具的具体使用方法。

使用Magisk进行Rom签名

Magisk工具主要通过其图形界面和命令行接口实现签名功能。以下是通过命令行使用Magisk签名的基本步骤:

首先,需要安装Magisk的最新版本,并确保你的设备已经获取root权限。

将需要签名的Rom包复制到设备上。

启动Magisk Manager应用,并选择“安装”选项。

在弹出的菜单中选择“从存储设备安装”。

在文件选择界面中找到并选择你的Rom包。

Magisk会自动处理签名过程,并显示安装成功的提示。

请注意,使用Magisk进行签名前,确保对原生Rom或任何第三方Rom的完整性有所了解,以免违反设备的保修条款或安全政策。

使用heimdall进行Rom签名

heimdall工具一般通过命令行来使用。以下是通过heimdall进行签名的基本步骤:

安装heimdall工具。根据你的操作系统下载并安装对应的版本。

获取三星设备的下载模式驱动,并正确安装。

使用heimdall命令行工具对Rom进行签名。以下是签名过程中的基本命令格式:

bash heimdall flash --type zip --sign /path/to/key/release-rsa.pem /path/to/your-rom.zip

其中, release-rsa.pem 是你签名密钥的路径, your-rom.zip 是你需要签名的Rom包。

请注意,使用heimdall前,确保你的设备处于下载模式,并已正确连接到计算机。此外,对设备进行刷写和签名前,请确保备份了重要数据,以防数据丢失。

3.2.2 签名工具的高级设置

当基本使用变得得心应手后,用户往往需要探索一些高级设置来进一步提升工作流程的效率和安全性。由于Magisk和heimdall的高级设置范围较大,这里只简述几个通用的高级设置点,供读者参考:

自定义签名密钥 : 用户可以创建自定义的密钥对(公钥和私钥)进行签名,以增强安全性。

脚本自动化 : 配置脚本来自动化签名过程,尤其适合需要批量处理Rom的场景。

日志记录 : 开启详细的日志记录功能,帮助分析在签名过程中可能出现的问题。

调试模式 : 使用调试模式来检查和解决签名过程中出现的错误。

高级设置往往涉及深入的技术知识和对工具的深入理解,因此建议在掌握基础操作后,逐步学习和尝试。记住,在尝试高级配置时要格外小心,因为不当的配置可能会导致设备无法启动或其他严重问题。

4. Apk签名工具介绍

4.1 工具功能与特点

4.1.1 Apk签名工具的分类

在Android应用开发中,Apk签名是一个核心步骤,它确保了应用的安全性和完整性。为了完成这一任务,开发人员可选择多种签名工具,它们各有特色,可以满足不同的需求。主要可以将这些工具分为以下几类:

命令行工具: 如 jarsigner 和 apksigner ,这些工具通常通过命令行执行,允许用户自定义签名过程。它们广泛适用于脚本操作和自动化构建环境。

集成开发环境(IDE)插件: 例如Android Studio的插件,这些工具集成在开发环境中,允许开发者在不离开IDE的情况下完成签名。

图形界面工具: 如 Apktool 和 Android Debug Bridge (ADB) ,它们提供了图形用户界面(GUI),使得签名操作对不熟悉命令行的用户来说更加直观。

在线签名服务: 如Google Play的内建签名服务和其他第三方服务,它们提供云基础的签名解决方案,简化了签名流程,但可能需要上传私钥。

4.1.2 比较分析各签名工具优劣

每种类型的签名工具都有其独特的优势与局限性。下面是几种常见签名工具的比较分析:

jarsigner

优点: 标准Java工具,随JDK安装,无需额外下载。 支持所有Java应用程序。

缺点:

签名速度较慢。 功能相对简单,对于复杂的应用可能需要额外的配置。

apksigner

优点: 是Google官方推荐的命令行工具,专为Android设计。 支持V2/V3签名方案,提供更高的安全性。

缺点:

相对较新,不是所有环境都兼容。 需要Android SDK 24.0.3或更高版本。

Android Studio

优点: 界面友好,易于操作。 可直接在构建过程中集成签名。

缺点:

仅适用于已集成到Android Studio项目。 签名选项可能不如命令行工具灵活。

Apktool

优点: 支持反编译和重新打包Apk,方便修改和理解Apk内容。 兼容性较好,适用于多种Android版本。

缺点:

并非专为签名设计,功能偏重于Apk的逆向和分析。

在线签名服务

优点: 易于使用,适合没有复杂签名需求的开发者。 提供了便捷的管理界面和一键签名功能。

缺点:

依赖网络,可能涉及隐私和安全风险。 不适合需要离线签名或对私钥有严格控制需求的场景。

4.2 工具使用方法

4.2.1 常见Apk签名工具操作步骤

下面将展示如何使用几个常见的Apk签名工具:

使用jarsigner进行签名

打开命令行工具。 运行以下命令来签名Apk文件:

shell jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my-application.apk alias_name

其中, my-release-key.keystore 是密钥库文件, my-application.apk 是待签名的Apk文件, alias_name 是密钥库中别名。

系统会提示输入密钥库密码和别名密码,输入后签名过程开始。

使用apksigner进行签名

使用Android SDK中的 apksigner 命令工具:

shell apksigner sign --ks my-release-key.keystore --ks-key-alias my-alias --ks-pass pass:my-key-password --key-pass pass:my-key-password --out signed.apk my-application.apk

该命令包含签名密钥库路径、别名、密钥密码和输出的签名Apk文件名。

此方法支持多种签名算法,增加了签名过程的安全性。

使用Android Studio进行签名

打开Android Studio,加载你的项目。 在菜单栏中选择 Build -> Generate Signed Bundle / APK... 。 按照向导提示输入密钥库信息、别名和密码。 选择输出Apk的路径并完成签名。

4.2.2 工具故障排除与维护

在使用Apk签名工具时,开发者可能会遇到各种问题。例如,在使用命令行工具时可能会出现“keystore password was incorrect”错误,这通常意味着输入的密码不正确或密钥库文件损坏。为了解决这些问题,可以按照以下步骤进行故障排除:

核对密码: 确认输入的密码是否准确无误,并检查复制粘贴操作中是否有隐藏字符。 检查文件完整性: 确保密钥库文件没有损坏。可以通过比较文件的哈希值或使用密钥库工具尝试打开它来验证。 权限问题: 检查你对密钥库文件的读写权限,有时候权限不足也会导致签名失败。 版本兼容性: 确保所使用的签名工具与你的操作系统和JDK版本兼容。

一旦成功排除故障,签名工具的维护包括定期备份密钥库和更新密钥库文件,以防止数据丢失和解决兼容性问题。此外,对于一些企业级的解决方案,还应考虑定期进行安全审计,以确保私钥的安全性和工具的持续可用性。

5. 签名工具使用流程

5.1 签名流程概述

5.1.1 签名前的准备工作

签名过程前的准备工作是确保整个流程顺利进行的关键一步。以下是进行签名前需要完成的一些准备工作:

理解签名要求: 在进行签名前,需要清楚了解目标设备的签名要求和证书规范。这通常包括了证书的类型(比如debug或release)、使用的密钥库格式(如JKS或PKCS#12)以及签名工具的版本要求等。

准备证书和密钥: 如果还没有生成密钥库和证书,需要提前生成。可以使用Java的 keytool 或使用Android Studio自带的签名工具。准备过程中还需要确定密钥库的密码和别名。

下载并安装签名工具: 根据平台选择合适的签名工具并下载安装。确保安装的工具版本与你的开发环境兼容,并且能够支持最新的签名标准。

备份现有数据: 如果对现有应用进行签名,要对原始的Apk或Rom文件进行备份,以防在签名过程中出现错误导致数据丢失。

5.1.2 签名流程详细步骤

签名流程大体上可以分为以下几个步骤:

导入密钥库: 使用签名工具导入之前创建或获得的密钥库文件。这一步通常涉及到工具的用户界面,需要输入密钥库的密码。

签名配置: 在签名工具中设置正确的签名参数,包括别名、密码以及签名证书的详细信息。

执行签名操作: 选定要签名的Apk或Rom文件,运行工具进行签名。这个过程中,签名工具会验证密钥库,并使用其中的密钥进行数字签名。

验证签名结果: 签名完成后,使用适当的验证工具(如 jarsigner )来检查签名的有效性。

打包或发布: 如果一切顺利,最后进行打包或直接将已签名的Apk或Rom部署到设备上,进行测试或发布。

5.2 签名流程中的关键问题

5.2.1 签名过程中的常见问题及解决

签名过程中可能会遇到以下一些常见问题以及相应的解决办法:

问题:密钥库密码错误。 解决: 首先确保使用的密码是正确的。如果忘记了密码,需要创建一个新的密钥库和证书。

问题:签名工具不兼容。

解决: 确保使用的签名工具版本与开发环境以及应用的需求相匹配。

问题:签名工具不支持新标准。

解决: 更新工具到最新版本,或者更换一个支持新标准的签名工具。

问题:签名验证失败。

解决: 检查签名过程中的参数设置是否正确,确认使用的证书与签名工具是否兼容。

5.2.2 流程优化与自动化签名实践

为了提高效率,减少错误,可以对签名流程进行优化和自动化处理:

脚本自动化: 通过编写自动化脚本,比如使用Python脚本结合 jarsigner 或 apksigner ,可以自动完成签名过程中的多个步骤。

持续集成集成(CI): 利用CI/CD工具,如Jenkins或GitLab CI,可以在代码提交后自动触发签名和部署流程。

工具链配置: 对于常用的开发工具,如Android Studio或Eclipse,可以配置签名参数,使得每次构建项目时自动执行签名。

版本控制: 将密钥库和签名配置文件添加到版本控制系统中,并使用权限管理,确保只有授权的人员才能访问和操作。

通过这些实践,可以极大地提高签名过程的效率和可靠性,减少人工错误的发生。接下来,将详细介绍一个签名工具的使用流程,包括具体的代码块和操作步骤。

6. 私钥的生成与管理

6.1 私钥的重要性

6.1.1 私钥在签名中的作用

私钥是数字签名过程中的核心要素,其主要作用是在签名和验证过程中保持身份的唯一性和不可抵赖性。在Android的签名框架中,私钥用于生成唯一的哈希值,该哈希值随后会被加密,生成最终的数字签名。这一过程确保了只有持有相应私钥的人或系统才能创建有效的签名。

在Apk签名中,私钥用于证明发布者的身份,确保应用的真实性和完整性。一旦Apk包被签名,任何修改都会导致签名无效,因为加密的哈希值将不再匹配。这在很大程度上保护了用户免受恶意软件的侵害,并为开发者提供了版权保护。

6.1.2 私钥的安全存储与备份

私钥的保管至关重要,因为它代表了签名者的身份。如果私钥泄露,任何拥有它的人可以代表签名者进行签名,这将导致安全风险和信任问题。因此,私钥必须采取最高级别的安全措施进行存储和备份。

生成私钥后,应在安全的硬件设备(如硬件安全模块HSM)中进行存储,并定期备份到离线存储介质(如加密的USB驱动器),避免在线存储带来的风险。在使用私钥时,还需考虑最小权限原则,确保仅授权给需要使用它的应用程序和服务。

6.2 私钥的管理实践

6.2.1 私钥的生命周期管理

私钥的生命周期从生成开始,经历使用、存档直至最终销毁。在每一个阶段,都有不同的管理策略和安全要求。

生成 : 使用强随机数生成器来创建私钥,确保其不可预测。 使用 : 私钥在使用过程中要保证其在内存中的安全,避免被其他进程访问或窃取。 存档 : 定期备份私钥,并确保备份的安全存储。 销毁 : 私钥不再需要时,要使用安全的方式来彻底销毁,避免残留。

生命周期的管理还需要记录详细的日志,以跟踪私钥的使用情况,这有助于在发生安全事件时迅速采取行动。

6.2.2 多用户环境下的私钥管理策略

在团队环境中,可能会有多个用户需要访问私钥。管理好这些用户的权限和访问日志是避免安全风险的关键。

最小权限 : 给予用户最小的必要权限,尽可能使用角色基础的访问控制模型。 审计 : 定期审计用户的访问记录,确保私钥的使用符合预期。 多因素认证 : 在可能的情况下,采用多因素认证来增加私钥的安全性。

此外,可以使用密钥管理系统来协助管理私钥的整个生命周期。这些系统通常提供自动化操作,并能实现权限的细粒度控制。

示例代码:密钥对生成

openssl genrsa -out private_key.pem 2048

在上述命令中,我们使用 openssl 工具生成了一个2048位的RSA私钥,并保存在 private_key.pem 文件中。私钥文件需要以安全的方式保存,并对敏感操作进行记录。为了确保安全性,可以使用 chmod 命令限制对私钥文件的访问权限。

chmod 400 private_key.pem

上述命令将 private_key.pem 的权限设置为仅所有者可以读取,防止其他用户读取或修改私钥文件。

在进行操作时,应该始终遵循安全最佳实践,并确保整个过程中的每个步骤都符合安全标准。通过这种方式,私钥的管理变得更加可控和可追踪。

7. 设备特定签名考虑因素

7.1 设备特定签名的必要性

7.1.1 设备兼容性问题分析

当为特定设备定制开发ROM或APK时,兼容性问题成为一个不可忽视的因素。由于不同设备的硬件配置、驱动程序和系统定制程度存在差异,一个通用的签名策略可能无法满足所有设备的兼容性需求。

为了解决这些兼容性问题,开发者需要为每个设备生成特定的签名。这种签名考虑到了设备的硬件信息和系统版本,能够确保应用或ROM包能够在特定的硬件环境下稳定运行。

7.1.2 设备特定签名的实现与应用

实现设备特定签名通常涉及到以下几个步骤:

设备识别 :使用特定的设备识别机制,如获取设备的序列号或硬件ID。 签名密钥生成 :根据设备的唯一标识生成签名密钥。 签名应用 :将生成的密钥用于APK或ROM的签名过程。 部署 :将签名后的应用或ROM部署到设备上进行测试。

应用设备特定签名的实践中,开发者必须在确保签名与设备的唯一性匹配的同时,考虑到用户隐私和数据安全的问题。确保在生成和使用签名过程中遵循相关法律法规和最佳实践。

7.2 安全性与品牌信誉维护

7.2.1 签名安全性的重要性

安全性是品牌信誉的核心。不安全的签名可能导致恶意软件的植入,对用户造成损害,进而影响品牌的声誉。因此,签名必须通过严格的安全措施来保护,防止未授权的访问和篡改。

实现签名安全性的措施包括:

使用强密码和高级加密标准。 定期更新签名密钥,并对旧密钥进行撤销。 使用安全的密钥存储机制,如硬件安全模块(HSM)。

7.2.2 维护品牌信誉的策略与措施

维护品牌信誉不仅需要确保签名的安全性,还需要通过一系列策略和措施来保障:

透明度 :向用户提供关于签名和应用安全性的详细信息。 及时响应 :对于安全漏洞和风险,需要有快速的响应和补救措施。 用户教育 :教育用户如何识别安全应用和正确处理应用安装。

通过这些策略的实施,品牌不仅能够增强用户信任,还能在竞争激烈的市场中脱颖而出。此外,当涉及到企业级应用时,维护设备特定签名的安全性和品牌信誉就显得更为重要,因为它直接关系到企业的业务连续性和客户关系。

通过上述内容的分析,我们可以看到设备特定签名在保证应用兼容性、安全性和品牌信誉维护方面发挥着关键作用。随着移动设备和应用市场的不断发展,这些因素将越来越成为企业需要重点关注的领域。

本文还有配套的精品资源,点击获取

简介:在Android开发和应用发布流程中, Rom 和 Apk 的签名是保证软件安全和完整性的关键环节。本文深入介绍 Rom 和 Apk 签名工具的使用方法与重要性。 Rom 签名旨在验证固件来源和完整性,防止恶意篡改,而 Apk 签名则确保应用的安全性和开发者身份。通过签名工具如 signapk.jar 、 apksigner 等,开发者可以简便地完成签名操作,同时需要注意私钥的管理以确保安全。对于设备制造商,提供安全的签名工具和流程对于用户安全和品牌信誉至关重要。

本文还有配套的精品资源,点击获取

相关推荐

率土之滨开7级地要多少兵力 打7级地要多少兵力
BT365账户网址多少

率土之滨开7级地要多少兵力 打7级地要多少兵力

📅 08-31 👁️ 3300
360广告弹窗怎么关闭?彻底关闭360弹窗广告方法(亲测有效)
整形医生徐荣阳权威资料
365速发

整形医生徐荣阳权威资料

📅 07-06 👁️ 191