android 录音原始文件_5分钟短文 | Android证书生成,签名,验证,虽然难,但学一次就够了!...

引言

从Android演进开始,APK签名就已经成为Android的一部分,并且android要求所有Apks都必须先签名,然后才能将其安装在设备上。关于如何生成密钥以及如何签名的文章很多。一个Apk,但我们将从安全角度进行研究。在对Apk文件进行反编译或反向工程之后,应查看哪个文件,以获取有关最初对应用进行签名的开发人员的更多信息。

5eccf24ae8d2bf65101a9c025e5f4f03.png

反编译APK文件

解压缩文件或使用apktool后,取决于如何对文件进行反编译,如果解压缩文件,则文件结构将如下所示。

18bfcfbaf1164ef084acea67c4ce6d67.png

我们正在查看META-INF文件夹,

正在查看使用Apktool进行的反编译Apk,它在原始文件夹中包括有关开发人员的证书详细信息以及所使用的哈希算法的类型等,并检查META-INF文件夹。

当您当前仍位于META-INF文件夹中时,使用keytool检查证书。

keytool -printcert -file DROIDRDR.RSA 

根据证书别名的名称,从证书颁发之日和证书设置为过期起,您将看到所有者,国家/地区,颁发者,证书有效性的不同信息。

MD5,SHA1和SHA256中的证书指纹以及所使用的签名算法。

ac16b6304494ba4efe67734407fe6697.png

之前,我谈论了生成证书,让我们从安全角度来看它,在分析您从第三方网站下载的Android应用程序时,您可以反编译该应用程序并查看该证书并将其与原始应用程序进行比较,在使用的哈希算法上,如果应用程序可能已被修改或篡改,则将其进行比较,我不会在谈论分析APK文件,但可能会稍后。

生成Android证书

如果您反编译并重新编译android应用程序,则需要对应用程序进行签名,如果不签名,则该应用程序将不会安装在用户设备上。有多种生成证书的方法,但是,我们将介绍使用keytool生成证书的三种方法。

方法1:

打开您的终端:

keytool -genkey -v -keystore awwal -alias hafsa -keyalg RSA -keysize 2048 -validity 365

其中 awwal —是密钥库名称,hafsa是证书别名,使用后将被添加到META-INF文件夹-keysize 2048中,但是您可以使用4096大小,但是设备存在与此有关的问题或者。但仅使用2048,有效期为几天。

方法2:

使用可在此处下载的apk-signer.jar。这是用Java编写的GUI,可生成证书并进行签名一个APK文件。尽管Playstore中也有一个Android应用程序。

526da6acfc192fcacbcfaa02b4b1d26e.png

签署Android应用程序

在您已经生成了Android应用程序之后,我们将研究如何对应用程序进行签名,运行您的终端:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore awwal medium.apk hafsa

其中-sigalg是使用的签名算法,您可以使用MD5找到一些应用程序,但是在验证应用程序时使用SHA1,因为它将告诉您使用的哈希算法以及使用的算法的弱度。

密钥库— awwal是生成证书时使用的密钥库名称的名称,hafsa是证书的别名,而medium.apk是要签名的应用程序的名称。

注意:如果您使用MD5,则该应用程序将被视为未签名应用程序,因为用于签署应用程序的算法很弱。

验证Android应用程序

使用jarsigner验证应用程序,以查看资源签名列表以及具有keysize的哈希算法。

打开您的终端:

jarsigner -verify -verbose medium.apk

其中仅验证将显示它是签名还是未签名,并使用详细选项查看证书的完整详细信息。

或者,您可以使用Apk签名者来自动完成文件名验证应用。

写在最后

虽然上面我们使用的都是 java 工具链的东西,其实生成的 CERT.RSA 文件内,包含了公钥链,也完全可以使用 openssl 工具打印出 pubkey 证书文件,并可做进一步的指纹校验。

关键是生成签名的方法,这个对于使用不同的工具复现过程很关键。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

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

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

相关文章

WCF跨域 这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP...

尝试向 URI“http://localhost:8001/AccountService.svc”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送 SOAP 相关的…

go语言api源码中文版_Go语言学习——sync.map源码剖析

1.简介 最近看了下Sync包,详读了sync.map源码,感觉源码实现还是比较巧妙的,有不少可以学习的地方;在讲源码前,先看下sync.map的"历史",从网上搜资料,sync.map是Go语言在1.9版本才引入…

怎么成为日上会员直邮_18个日上直邮问题汇总,可以参考一下哦

前段时间发的日上直邮的微头条和视频,很多朋友遇到一些不明白的地方,我把问题汇总了一下,统一回答一下哦其实因为疫情,很多免税店都在做活动,活动方式不太一样,有好多种,我跟大家分享的只是其中…

python中sort返回值_Python函数你真的都学会了吗?来看看这篇Python高阶函数!

二、高阶函数高级函数, 英文叫 Higher-order Function.那么什么是高阶函数呢?在说明什么是高阶函数之前, 我们需要对函数再做进一步的理解!2.1 函数的本质函数的本质是什么?函数和函数名到底是一种什么关系?在python中,一切皆对象&#xff0…

基于数据库的事务消息解决分布式事务方案

转载请注明出处:http://www.cnblogs.com/lizo/p/8516502.html 概述 当单库已不能支撑当前业务的时候,我们往往都考虑进行分库(横向拆分或者纵向拆分)。但分库有个无法回避的问题,就是事务问题。网上有很多分布式事务解…

中service层的作用_浅析Java中dto、dao、service、controller的四层结构

目前我所在的项目组采用的是SpringBoot框架,前端使用BootStrapjQuery。SpringBoot是BS开发框架之一,不用单独开启tomcat服务器,目前比较流行,一般开发大型项目时会将所有的功能细分为许多小模块,每个模块都有dto、dao、…

【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!...

Himi 原创, 欢迎转载,转载请在明显处注明! 谢谢。 原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 终于在11月公司的游戏即将上线了,那么对于iOS游戏来说当今都是内置道具收费属于主流&#xf…

不越狱换壁纸_终于来了!iOS 14.3 正式版,可自动定时换壁纸

嘿嘿,我没有猜错吧!iOS 14.3 正式版会在12月15日凌晨时段发布,在前几天我就有提到,这一天会发布,主要是与新品 AirPods Max 发售时间与iOS 14.3正式版发布时间一致。其次这次发布iOS 14.3正式版更新内容与 iOS 14.3 RC…

Hibernate【inverse和cascade属性】知识要点

Inverse属性 Inverse属性:表示控制权是否转移.. true:控制权已转移【当前一方没有控制权】false:控制权没有转移【当前一方有控制权】Inverse属性,是在维护关联关系的时候起作用的。只能在“一”的一方中使用该属性!Inverse属性的…

中list如何清空_如何根据索引删除 list 中的元素

这个问题很简单, 首先想到的就是a list(range(10)) del a[2]这个就可以很方便的删除掉 a 中的第 3 个元素.如果我想删除多个元素怎么办, 比如我想删除第 3, 4, 5, 6 个元素? 这个也很好办:a list(range(10)) del a[2:6]那么我要删除的元素的索引不连续呢? 比如我要删除第 3…

查询时拼接两列数据_如何用VBA代码查询两列数据差异?

爱就一个字,我只说一次……北京市第三交通委提醒您:代码千万条,注释第一条,命名不规范,修订两行泪……咳,给大家拜晚年了,再提前祝大家元宵快乐……我们今天和大家分享的内容是如何用VBA代码查询…

setTimeout详解

https://www.cnblogs.com/wzndkj/p/7069331.html 一、setTimeout基础 setTimeout(func|code,delay);第一个参数表示将要推迟的函数名或者一段代码,第二个参数表示推迟执行的毫秒数eg: console.log(1); setTimeout(console.log(2),1000); console.log(3);answer: 1 3…

Kappa电商负责人顾皓澜:电商业务一直保持盈利

Kappa电商负责人顾皓澜(TechWeb配图) 【TechWeb报道】10月初,闹得沸沸扬扬的淘宝商城事件吸引了无数互联网用户的目光,处于漩涡中心的淘宝商城当仁不让地挤入话题排行榜,商城上大小卖家的命运也牵动了众多消费者的心。…

Citrix VDI-in-a-Box 第二篇:架构篇

前言:为什么Citrix会收购Kaviza,就是因为其VDI-in-a-Box产品架构比较简单。 本文重点描述其架构和安装要求。 如果你想了解一个东西,首先必须了解其架构。 vdiManager是管理整个架构的工具,所有的虚拟机都运行在Hypervisor上。整 …

看完此文再不懂区块链算我输,用Python从零开始创建区块链

如果你还没有听说过 3 点钟区块链群,说明你还不是链圈的人;如果你还没有加入 3 点钟区块链群,说明你还不是链圈的大佬;如果你还没有被 3 点钟区块链群刷屏,说明你还体会不到什么是“币圈一天,人间一年”。 …

重新加一个window_Activity、View、Window关系,进程间通信,责任链模式,Https,数据存储...

码仔,今天就给大家带来了《每日一道面试题》的第九期:01理解Activity View window的关系 Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)LayoutInflater像剪刀,Xml配置像窗花图纸。 Activ…

排他网关(ExclusiveGateWay)

网关(ExclusiveGateWay) 作者:邓家海2018年3月11日 00:13:25 情景:某一家公司最近在给一个单位做一个财务审批的OA。具体需求是这样的:当部门申请的金额小于一万块的时候,财务部可以直接决策。当部分申请的金额大于一万…

离线安装宝塔lnmp_宝塔LNMP环境 Nginx安装EduSoho教程说明

[toc]宝塔下使用LNMP Nginx安装EduSoho创建站点 宝塔后台 > 网站 > 添加站点 > 输入信息 > 提交填写信息创建完成设置运行目录 宝塔后台 > 网站 > 管理运行目录选择web目录后保存 网站目录 > 运行目录 > 保存修改配置文件 配置文件 > 修改参数 >…

NHibernate初学者指南(10):一级和二级缓存

一级缓存 为了获得更好的性能,NHibernate智能地缓存数据。NHibernate有不同的缓存机制起作用,最重要的就是一级缓存。每个session对象维持一个一级缓存,session对象创建时缓存创建,session对象释放时缓存销毁。 缓存只不过是一个哈…

Freemarker模板引擎

模板引擎的实质就是将页面结构提前写好,然后将数据渲染到模板上生成一个静态页面,这样一来,下次就可以 直接访问静态文件,不用进行额外的获取数据的操作(例如:访问数据库),这样大大提…