精华内容
下载资源
问答
  • 数字签名

    2017-09-08 10:01:55
    数字签名是个啥目的:证明你收到的是我发的,且没有被篡改过情景1: 我给你写信,让你给我打100块钱,账号:123456 他拦截了我的,把账号改成:654321 Duang~~~钱没了 解决方案1: 我有两把钥匙priKey和...

    数字签名是个啥

    目的:证明你收到的是我发的,且没有被篡改过

    情景1:

    我给你写信,让你给我打100块钱,账号:123456

    他拦截了我的信,把账号改成:654321

    Duang~~~钱没了

    解决方案1:

    我有两把钥匙priKey和pubKey,priKey加密的信只能用pubKey解密

    我把pubKey发给你

    我把我的信Hash一下,把Hash的结果用priKey加密,得到的就是数字签名

    我把数字签名加到信里一起发给你

    你用我的pubKey解密数字签名

    你把收到的信Hash一下,和解密后的数字签名做对照

    如果一样,是我发的,且没有被篡改;否则,就不是

    情景2:

    我发给你的pubKey被他拦截了

    他把他的pubKey发给你

    他把他篡改的信Hash一下,把Hash的结果用他的priKey加密,得到的就是数字签名

    他把数字签名加到信里一起发给你

    你用他的pubKey解密数字签名

    你把收到的信Hash一下,和解密后的数字签名做对照

    是一样

    Duang~~~钱又没了

    解决方案2:

    我去申请一个数字证书,证书用知名机构的priKey加密,里有我的pubKey

    我把我的信Hash一下,把Hash的结果用priKey加密,得到的就是数字签名

    我把数字签名和数字证书加到信里一起发给你

    你用知名机构的pubKey解密,得到我的pubKey

    你用我的pubKey解密数字签名

    你把收到的信Hash一下,和解密后的数字签名做对照

    如果一样,是我发的,且没有被篡改;否则,就不是

    情景3:

    他篡改了知名机构的pubKey



    no!!!

    知名机构的pubKey内置在浏览器里,他改不了:)

    好了,现在你收到的是我发的,且没有被篡改过

    展开全文
  • 本文将详细介绍什么是数字签名,并采用Signtool工具对EXE文件进行签名,后续深入分析数字签名的格式及PE病毒内容。这些基础性知识不仅和系统安全相关,同样与我们身边常用的软件、文档、操作系统紧密联系,希望这些...

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~

    作者前文介绍了宏病毒相关知识,它仍然活跃于各个APT攻击样本中,具体内容包括宏病毒基础原理、防御措施、自发邮件及APT28样本分析。本文将详细介绍什么是数字签名,并采用Signtool工具对EXE文件进行签名,后续深入分析数字签名的格式及PE病毒内容。 这些基础性知识不仅和系统安全相关,同样与我们身边常用的软件、文档、操作系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。本文参考了参考文献中的文章,并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。

    从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!

    接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~

    作者的github资源:

    前文分析:

    声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)


    一.PE文件的数字签名

    1.概念普及

    (1) PE文件
    PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)。后续文章会详细分析PE文件格式。


    (2) 为什么要对PE文件进行数字签名呢?

    • 防篡改:通过对数字签名的验证,保证文件未被非法篡改。
    • 降低误报:安全软件通过验证文件是否有正规厂商的数字签名来降低误报。

    (3) PE文件数字签名及验证过程
    签名:

    • 软件发布者使用散列算法(如MD5或SHA)计算PE文件的散列值。
    • 软件发布者使用私钥对散列值进行签名得到签名数据。
    • 将签名私钥对应的公钥和签名数据等以证书的形式附加在PE文件之中,形成经过数字签名的PE文件。
    • 软件发布者将经过数字签名的PE文件进行发布。

    验证:

    • 从PE文件证书中提取软件发布者的公钥、使用的散列算法、签名算法、原始散列值的签名数据。
    • 使用提取的公钥和对应签名验证算法将签名数据还原为原始PE文件的原始散列值。
    • 对现有PE文件使用同样的散列算法计算出对应的散列值。
    • 对比两个散列值是否一致,从而判断数据是否被破坏和篡改。

    在这里插入图片描述


    (4) PE文件数字签名的总体结构
    PE文件数字签名信息存放在Certificate Table位置,同时PE文件可选文件头DataDirecotry第5项记录文件偏移及大小。

    下一篇文章作者尝试详细讲解PE文件结构及签名解析。

    在这里插入图片描述

    使用PEView查看签名前后对比图,可以看到Certificate Table存储相关签名信息。

    在这里插入图片描述


    (5) PE文件数字签名查看
    这里以Zoomit.exe程序为例,我们可以看到经过数字签名后的PE文件还会多出一个“数字签名”的属性,点击详细信息可以查看对应的证书。
    在这里插入图片描述

    对应的证书信息及证书路径如下图所示,包括签名算法、哈希算法、有效期、颁发者信息等。

    在这里插入图片描述


    (6) 微软数字签名证书查看
    接着,我带领大家看看Windows证书。运行中输入“certmgr.msc”,可以看到这里面有5个系统默认的ECC签名的根证书,如下图所示。

    在这里插入图片描述

    我们随意导出其中一个根证书,导出直接选择Base64编码那个就行。

    在这里插入图片描述

    可以看到导出的ECC密钥证书如下图所示,包括证书的有效期等信息。这就是微软在实现椭圆曲线加密(ECC)算法的数字证书,位于CryptoAPI.dll文件,也是被我们利用来伪造可信任来源的签名漏洞。

    在这里插入图片描述


    (7) 数字签名常用算法及应用领域
    数字签名常用算法包括:

    • RSA数字签名算法
      基于大整数分解问题,MD5、SHA
    • DSA数字签名算法
      基于离散对数问题
    • ECDSA椭圆曲线数字签名算法
      ECC+DSA,椭圆加密算法,属于DSA的一个变种,基于椭圆曲线上的离散对数问题

    其应用领域包括:

    • PE文件数字签名
    • HTTPS数字签名
    • 电子邮件数字签名
    • Office文档数字签名
    • 代码数字签名

    2.Github网站证书验证过程

    接着看看Github网站进行微软证书验证的过程。

    • 在Windows系统访问一个网站(例Github.com)时,该网站会向Windows系统发送由第三方权威机构(CA)签署的网站证书。

    在这里插入图片描述

    • Windows系统则会验证该证书是否由CA颁发,若验证通过,则Windows系统与网站成功建立TLS链接。

    在这里插入图片描述

    • 为了方便下一次更快的访问,Windows将验证成功的证书放入内存中一块Certificate Cache(证书缓存)中。在下一次校验时,如果该证书存在于缓存中,则直接取缓存中的值进行校验。这里利用CVE-2020-0601。

    在这里插入图片描述

    • 在成功缓存证书数据后,根据下面描述的Windows证书缓存机制,恶意网站可以伪造虚假的网站(例github.com)证书且通过Windows验证,将自身伪装成合法网站。

    在这里插入图片描述

    • 当 Windows 接收到新的证书时,Windows 将新接收的证书与已缓存证书的证书的公钥进行遍历对比,寻找匹配的值。

    在这里插入图片描述

    • 伪造的恶意证书与Windows系统中的缓存证书有同样的公钥,但Curve项没有在校验范围内,所以可以通过构造自定义Curve来伪造证书。使得证书验证流程依然成立,但通过验证的证书已经不是之前成功验证的安全证书。

    在这里插入图片描述

    在第23篇文章中,我们将详细复现微软证书CVE-2020-0601漏洞。


    二.阮一峰老师告诉大家什么是数字签名

    参考文章:
    数字签名是什么? - 阮一峰
    What is a Digital Signature? - 原始网站

    写到这里,您可能还是很疑惑“什么是数字签名”?下面我通过阮一峰老师的博客进行讲解,个人认为这是一篇讲得比较清晰的原理文章,同时也包含了网络安全中加密解密、信息传输等知识。


    (1) 假设鲍勃有两把钥匙,一把是公钥,另一把是私钥。

    在这里插入图片描述

    (2) 鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。

    在这里插入图片描述

    (3) 苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。

    在这里插入图片描述

    (4) 鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。

    在这里插入图片描述

    (5) 鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。

    在这里插入图片描述

    (6) 然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。

    在这里插入图片描述

    (7) 鲍勃将这个签名,附在信件下面,一起发给苏珊。

    在这里插入图片描述

    (8) 苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

    在这里插入图片描述

    (9) 苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

    在这里插入图片描述

    (10) 复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。

    在这里插入图片描述

    (11) 后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。

    在这里插入图片描述

    (12) 鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。

    在这里插入图片描述

    (13) 苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。

    在这里插入图片描述

    (14) 下面,我们看一个应用"数字证书"的实例:https协议。这个协议主要用于网页加密。首先,客户端向服务器发出加密请求。

    在这里插入图片描述

    (15) 服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。

    在这里插入图片描述

    (16) 客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。

    在这里插入图片描述

    (17) 如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。

    在这里插入图片描述

    (18) 如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

    在这里插入图片描述

    在这里插入图片描述

    数字签名是为了保证数据完整性。通过它可以判断数据是否被篡改,私钥加密完的数据所有知道公钥的都可以解密,这样不安全。私钥加密的作用是为了确认身份,用对应的公钥解密摘要,则证明摘要来自谁,起到签名的作用。


    三.Signtool签名PE文件

    在这里插入图片描述

    该test.exe程序后续文章也会分享,均上传至Github。

    在这里插入图片描述


    第一步,通过makecert.exe生成需要的证书,生成两个文件分别是test.cer和test.PVK。

    cd SignTool
    makecert -$ "individual" -r /sv "test.PVK" /n "CN=Windows,E=microsoft,O=微软" test.cer
    

    在这里插入图片描述

    创建过程中需要输入私钥密码,这里设置为“123456789”。

    在这里插入图片描述


    第二步,查看证书信息,如果未信任需要点击“安装证书”。

    在这里插入图片描述

    安装并信任该证书。

    在这里插入图片描述


    第三步,利用signcode.exe工具进行数据签名,选择需要签名的“test.exe”程序。

    在这里插入图片描述


    第四步,自动选择自定义选项,然后点击从文件中选择test.cer文件,test.cer文件在第一个步骤你生成的目录中,然后下一步。

    在这里插入图片描述


    第五步,点击浏览按钮,添加文件test.PVK,test.PVK文件也是在第一步生成的目录中,点击下一步,哈希算法可以选md5,也可以选sha1,点击下一步。

    在这里插入图片描述


    第六步,默认点击下一步,出现数据描述框,自己可以填写,也可以不填。点击下一步。

    在这里插入图片描述


    第七步,填写时间戳服务器URL:http://timestamp.wosign.com/timestamp,也可以不选添加时间戳,点击下一步,完成,弹出签名成功框。

    在这里插入图片描述


    第八步,此时test.exe文件完成数字签名,打开该exe文件属性,如下图所示,可以看到签名相关信息。注意,该数字签名正常且颁发者为Windows。

    在这里插入图片描述

    最后我们使用PEView软件打开PE文件,可以看到签名前和签名后的结构存在“CERTIFICATE Table”区别。

    在这里插入图片描述

    下一篇文章我们将详细分析数字签名的结构。

    在这里插入图片描述



    四.总结

    文章写到这里,就介绍完毕,希望文章对您有所帮助。这篇文章主要讲解:

    • PE文件数字签名
    • 分享阮一峰老师的博客,告诉大家什么是数字签名
    • 结合SignTool工具对EXE文件进行签名

    作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢小伙伴和师傅们的教导。从网络安全到系统安全,从木马病毒到后门劫持,从恶意代码到溯源分析,从渗透工具到二进制工具,还有Python安全、顶会论文、黑客比赛和漏洞分享。未知攻焉知防,人生漫漫其路远兮,作为初学者,自己真是爬着前行,感谢很多人的帮助,继续爬着,继续加油!

    学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全和系统安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢师傅、实验室小伙伴的教导,深知自己很菜,得努力前行。编程没有捷径,逆向也没有捷径,它们都是搬砖活,少琢磨技巧,干就对了。什么时候你把攻击对手按在地上摩擦,你就赢了,也会慢慢形成了自己的安全经验和技巧。加油吧,少年希望这个路线对你有所帮助,共勉。

    欢迎大家讨论,是否觉得这系列文章帮助到您!如果存在不足之处,还请海涵。任何建议都可以评论告知读者,共勉~

    2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

    (By:Eastmount 2021-02-07 星期天 凌晨夜于贵阳 http://blog.csdn.net/eastmount/ )


    参考文献:
    [1] 武大《软件安全》课程
    [2] (强推) [网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现
    [3] (强推) 数字签名是什么? - 阮一峰
    [4] (强推) What is a Digital Signature? - 原始网站
    [5] (强推) 对Windows 平台下PE文件数字签名的一些研究 - DoveFeng
    [6] (强推) https://docs.microsoft.com/zh-cn/windows/win32/debug/pe-format
    [7] (强推) 哈希 HASH·数字签名 - Phant
    [8] (强推) 恶意文件分析系统中的数字签名验证 - 绿盟科技
    [8] (强推) [翻译]Windows PE文件中的数字签名格式 - 看雪银雁冰大神
    [9] PE文件数字签名工具 - ahuo
    [10] PE文件解析-异常处理表与数字签名 - zhyulo
    [11] Authenticode签名伪造——PE文件的签名伪造与签名验证劫持 - 嘶吼RoarTalk
    [12] 数字签名 - CTF Wiki
    [13] 数字签名算法介绍和区别 - infiniSign
    [14] [求助]关于PE文件的数字签名 - 看雪论坛
    [15] 区块链:数字签名是什么?- ChinaKingKong
    [16] 校验文件数字签名的合法性(VerifyPE) - ahuo
    [17] 数字签名 - shinymood
    [18] 恶意文件分析系统中的数字签名验证 - 百度文库
    [19] 如何判断一个文件是否已经有数字签名 - CSDN论坛


    展开全文
  • 电信设备-在运行时包签名中使用受的、基于硬件的身份认证以使移动通信和高价值交易执行安全的方法.zip
  • ios应用签名

    2020-01-01 18:08:58
    关于iOS应用签名我想一起探讨一下它的原理. https://www.jianshu.com/p/02034d1a91b5, 首先我们需要了解一个东西,叫做数字签名 数字签名(digitally signed) 名词解释:为什么用签名这个词....想要证明数字...

    关于iOS应用签名我想一起探讨一下它的原理. https://www.jianshu.com/p/02034d1a91b5 , 首先我们需要了解一个东西,叫做数字签名

    数字签名(digitally signed)  

    名词解释:为什么用签名这个词.因为老外喜欢用支票,支票上面的签名能够证明这玩意是你的.那么数字签名顾名思义,就是用于鉴别数字信息的方法.

    接下来我们思考一下.想要证明数字信息(也就是二进制数据,计算机里面的任意数据)的有效性,那么使用什么方式最合适呢?
    我们可以想到有"信息指纹"之称的HASH算法,在之前的文章中有讲到HASH算法专门用来做文件数据的识别.那么在网络数据传递的过程中,我们可以将明文数据,和数据的HASH值一起传递给对方.对方可以拿出HASH值来进行验证.
    但是在这个过程中,如何做到数据的保护呢?明文数据和HASH值如果直接传递就有都被篡改的风险.所以这里我们要对数据进行加密.明文数据有时会比较大,不适合使用RSA非对称加密算法,那么数据的HASH值是比较小的.这个数据是用于校验的,它完全可以使用RSA来加密.所以在数据传递的时候,我们将明文数据加上通过RSA加密的校验数据一并传递给对方.那么这个通过RSA加密的校验数据,我们称之为签名.

    数字签名的验证过程  

    当对方拿到数据之后,如何进行验证呢?

    • 首先传递数据时会将原始的数据和数字签名一起发送

    • 对方拿到数据后,先进行校验.拿到原始数据,通过同样的HASH算法得到数据的HASH值.

    • 然后通过非对称加密,将数字签名中的校验HASH值解密出来.

    • 最后对比两个HASH值是否一致.这样可以很好的判断数据是否被篡改!

    代码签名(Code signing)

    名称解释:代码签名是对可执行文件或脚本进行数字签名.用来确认软件在签名后未被修改或损坏的措施。和数字签名原理一样,只不过签名的数据是代码而已.

    简单的代码签名

    在iOS出来之前,以前的主流操作系统(Mac/Windows)软件随便从哪里下载都能运行,系统安全存在隐患,盗版软件,病毒入侵,静默安装等等.那么苹果希望解决这样的问题,要保证每一个安装到 iOS 上的 APP 都是经过苹果官方允许的,怎样保证呢?就是通过代码签名

    如果要实现验证.其实最简单的方式就是通过苹果官方生成非对称加密的一对公私钥.在iOS的系统中内置一个公钥,私钥由苹果后台保存,我们传APP到AppStore时,苹果后台用私钥对APP数据进行签名,iOS系统下载这个APP后,用公钥验证这个签名,若签名正确,这个APP肯定是由苹果后台认证的,并且没有被修改过,也就达到了苹果的需求:保证安装的每一个APP都是经过苹果官方允许的.

    如果我们iOS设备安装APP只从App Store这一个入口这件事就简单解决了,没有任何复杂的东西,一个数字签名搞定.但是实际上iOS安装APP还有其他渠道.比如对于我们开发者iOSER而言,我们是需要在开发APP时直接真机调试的.而且苹果还开放了企业内部分发的渠道,企业证书签名的APP也是需要顺利安装的.
    苹果需要开放这些方式安装APP,这些需求就无法通过简单的代码签名来办到了.那么我们来分析一下,它有些什么需求.

    • 安装包不需要上传到App Store,可以直接安装到手机上.

    • 苹果为了保证系统的安全性,又必须对安装的APP有绝对的控制权

      • 经过苹果允许才可以安装

      • 不能被滥用导致非开发APP也能被安装

    为了实现这些需求,iOS签名的复杂度也就开始增加了,苹果这里给出的方案是双层签名.

    iOS的双层代码签名

    iOS的双层代码签名流程这里简单梳理一下,这也不是最终的iOS签名原理.iOS的最终签名在这个基础上还要稍微加点东西,文末会讲.
    首先这里有两个角色.一个是iOS系统 还有一个就是我们的Mac系统.因为iOS的APP开发环境在Mac系统下.所以这个依赖关系成为了苹果双层签名的基础.

    在Mac系统中生成非对称加密算法的一对公钥\私钥(你的Xcode帮你代办了).这里称为公钥M 私钥M . M = Mac

     苹果自己有固定的一对公私钥,跟之前App Store原理一样,私钥在苹果后台,公钥在每个iOS系统中.这里称为公钥A , 私钥A. A=Apple

    把公钥M 以及一些你开发者的信息,传到苹果后台(这个就是CSR文件),用苹果后台里的私钥 A 去签名公钥M。得到一份数据包含了公钥M 以及其签名,把这份数据称为证书

    在开发时,编译完一个 APP 后,用本地的私钥 M(今后你导出的P12) 对这个 APP 进行签名,同时把第三步得到的证书一起打包进 APP 里,安装到手机上。

      在安装时,iOS 系统取得证书,通过系统内置的公钥 A,去验证证书的数字签名是否正确。

    验证证书后确保了公钥 M 是苹果认证过的,再用公钥 M 去验证 APP 的签名,这里就间接验证了这个 APP 安装行为是否经过苹果官方允许。(这里只验证安装行为,不验证APP 是否被改动,因为开发阶段 APP 内容总是不断变化的,苹果不需要管。)

     有了上面的过程,已经可以保证开发者的认证,和程序的安全性了。 但是,你要知道iOS的程序,主要渠道是要通过APP Store才能分发到用户设备的,如果只有上述的过程,那岂不是只要申请了一个证书,就可以安装到所有iOS设备了?那么为了防止滥用,苹果再加了几个限制.

    描述文件  

    前面的文章我们已经介绍了简单的应用签名但是这种签名方式并不能解决应用滥用的问题,所以苹果又加了两个限制.第一限制在苹果后台注册过的设备才可以安装.第二限制签名只能针对某一个具体的APP.并且苹果还想控制App里面的iCloud/PUSH/后台运行/调试器附加这些权限,所以苹果把这些权限开关统一称为Entitlements(授权文件).并将这个文件放在了一个叫做Provisioning Profile(描述文件)文件中.描述文件是在AppleDevelop网站创建的(在Xcode中填上AppleID它会代办创建),Xcode运行时会打包进入APP内.
    所以我们使用CSR申请证书时,我们还要申请一个东西!! 就是描述文件!!流程如下

    这个描述文件里面就是 可以安装的设备有哪些.. APP的ID是什么.. 权限是些什么!
    在开发时,编译完一个 APP 后,用本地的私钥M对这个APP进行签名,同时把从苹果服务器得到的 Provisioning Profile 文件打包进APP里,文件名为embedded.mobileprovision,把 APP 安装到手机上.

    我们可以利用$security cms -D -i embedded.mobileprovision命令查看Provisioning profile内容,这些Xcode创建的Profile文件都存放在~/Library/MobileDevice/Provisioning Profiles/目录下

    注意! 每次我们新建项目其实会生成一个描述文件!选择运行到手机上!! 我们只需要编译一下!在APP包里面就可以看到.

    那么为了便于我们查看信息! 我们可以通过Xcode来查看!!

    当然,Provisioning profile本身也是通过签名认证的,所以别想着你可以更改里面的东西来达到扩充权限\设备的目的.只有老老实实的去网站向Apple申请一份权限更多\设备更多的profile。

     

    整体的流程

    首先我们总结一下刚才的一些名词

    证书:内容是公钥或者私钥,由认证机构对其签名组成的数据包!我们开发可以使用钥匙串访问看到

    • P12:就是本地私钥,可以导入到其他电脑
    • Entitlements:权限文件,包含了APP一些权限的plist文件
    • CertificateSigningRequest:CSR文件包含了本地公钥的数据文件
    • Provisioning Profile:描述文件,包含了证书/Entitlements等数据,并由苹果后台私钥签名的数据包.

    流程如下:

    • 第 1 步对应的是 keychain 里的 “从证书颁发机构请求证书”,这里就本地生成了一对公私钥,保存的 CertificateSigningRequest 里面就包含公钥,私钥保存在本地电脑里.
    • 第 2 步向苹果申请对应把 CSR 传到苹果后台生成证书.
    • 第 3 步证书下载到本地.这时本地有两个证书.一个是第 1 步生成的私钥,一个是这里下载回来的证书,keychain 会把这两个证书关联起来,因为他们公私钥是对应的,在XCode选择下载回来的证书时,实际上会找到 keychain 里对应的私钥去签名.这里私钥只有生成它的这台 Mac 有,如果别的 Mac 也要编译签名这个 App 怎么办?答案是把私钥导出给其他 Mac 用,在 keychain 里导出私钥,就会存成 .p12 文件,其他 Mac 打开后就导入了这个私钥.

    •  第 4 步都是在苹果网站上操作,配置 AppID / 权限 / 设备等,最后下载 Provisioning Profile 文件。
    • 第 5 步 XCode 会通过第 3 步下载回来的证书(存着公钥),在本地找到对应的私钥(第一步生成的),用本地私钥去签名 App,并把 Provisioning Profile 文件命名为 embedded.mobileprovision 一起打包进去。所以任何本地调试的APP,都会有一个embedded.mobileprovision(描述文件)从App Store下载的没有.

    APP签名的数据

    这里对 App 的签名数据保存分两部分

    1.Mach-O 可执行文件会把签名直接写入文件里

    •  2.其他资源文件则会保存在 _CodeSignature 目录下在APP包里。

     

    展开全文
  • 什么叫方法签名 Java

    万次阅读 多人点赞 2017-02-07 11:22:11
    方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。 注意,方法签名不包括方法的返回类型。不包括返回值和访问修饰符。 常见的问题应用:重载和重写。 重写要求: 前提是继承,两个方法的方法签名...

    方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。
    注意,方法签名不包括方法的返回类型。不包括返回值和访问修饰符。
    常见的问题应用:重载和重写。

    public class A{
    	 protected int method (int a, int b) {
    		 return 0;
    	 }
     }
    class B extends A{
    	private int method(int a,long b){
    		return 0;
    	}
    }


    重写要求:
    前提是继承,两个方法的方法签名相同。至于修饰符,范围相同或者比父类的范围大即可。
    所以 B的method方法根本不是重写的A 的method方法,而是重载。重载要求方法名相同,参数和返回值随便改。

    所以,参数不一定改成long,随便什么都是重载。

    要是重写的话,也不是必须加@override,写@override,这个表示编辑器会给你去父类检查重写的对不对,不写就自己检查呗。

    重写是覆盖,就是子类的替换了父类的,正常用方法,调的是子类的,所以重写完还是一个方法
    重载是写多个同名方法,但可以给的参数不同,功能类似,所以正常调哪个方法,要看参数怎么写的,跟继承无关,区别是重载后变成多个方法。

    虽然简单,但是我确实不知道有方法签名这一说,现在既然知道了,就简单的做个笔记咯。还望众喷子们冷静的路过。


    关于重写和重载,学过Java的都可以说几句,但是说的到底对不对,那还真不好说,最好的办法就是亲自测试一下,用代码说话。

    下面是我关于重写的测试,@override,使用这个注解,编辑器会自动帮你检查你的重写是不是OK的。

    我做如下测试:

    1.关于修饰符的测试

    父类:如果是private,那么子类就不存在重写,只是新建了个方法。

    但是要是protected的话,子类就可以重写。@override是可以OK的。子类是protected或者public。经测试private类型是错误的。直接报错。

    验证上面的修饰符范围相同或者比父类大即可。

    这也间接说明,继承的关系,private是不能被继承的,所以父类private类型的属性是不能到子类去的,也就无从扩展,也就谈不上重写啦。

    2.关于返回类型的测试

    在修饰符条件OK的情况下,来修改返回类型,

    发现如果可继承的要重写的方法要是返回类型不同,编辑器也是会报错的。说是重写的两个方法的返回类型冲突。不相容的,矛盾的返回类型。

    验证,重写的方法的返回类型的关系。

    不信的可以自己测试下。




    展开全文
  • 如果单独只是去除签名,直接就能想到pdf转图片,再将图片合成pdf即可,如果有这个需求直接点击 网盘链接,密码私我 3.单独只是去除签名 需要操作两个文件Main、和ImageToPDF, 3.1 Main: 这个类是将pdf切片成...
  • android studio 签名配置

    千次阅读 2017-08-03 12:26:48
    签署你的应用程序 ...使用Google Play应用程式签名管理您自己的密钥和密钥库 ...生成密钥和密钥库手动签名APK配置构建过程以自动签名您的APK以不同的方式标示每种产品的味签署Android Wear...从构建文件中删除签名信
  • 数字签名与数字证书

    千次阅读 2016-03-04 20:00:14
    前言先看一下百度百科对数字签名和数字证书的解释:数字签名:将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。在数学上保证:只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符。...
  • android 签名

    2012-08-23 11:49:35
    ...为了要签名?... 开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?... 由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,签名
  • 傻瓜签名软件,不是自动出来的,你先在书写板上写下自己的名字或字什么的,然后可以改草书、笔脉、轻笔、连绵、宽度、抑扬、飞白,我试过了,写的再丑,改一改也挺漂亮的。
  • 图解数字签名过程

    千次阅读 2017-11-09 09:32:25
    数字签名是什么? 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥。 2. 鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。 3. 苏珊要给鲍勃写一封保密的。她写完后用鲍勃...
  • android创建签名

    2014-04-10 15:29:50
    1、首先创建一个文件夹Android_keystore用来存放签名,例如在D盘下创建   2、在命令行中输入以下命令: D:\Android_keystore>keytool -genkey -alias my_android.keystore -keyalg RSA -validity 20000 -...
  • 什么是数字签名

    2020-09-22 22:23:02
    数字签名 数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造...相信我们都写过,在写信的时候落款处总是要留下自己的名字,用来表示写信的人是谁。我们签的这个字就是生活中的签名: 而数字签
  • 数字签名和数字证书

    2013-05-11 19:21:20
    用图文的方式对数字签名和数字证书之间的关系进行一个详细说明、希望大家看后恍然大悟。我目前正在用C#做证书和签名这块,但进展十分不畅,如果哪位朋友有好的方法或者示例,请私联系
  • 数字签名过程

    千次阅读 2015-02-25 16:55:13
    1,用户A将明文通过hash运算(散列)生成数字摘要1,用户A用自己的私钥对摘要进行加密生成数字签名1. 2,用户A将明文+数字签名1+A用户的公钥(证书),准备将这些信息发到B用户,但是这个过程中,用户A明文是不安全...
  • 仿淘宝其中的一种签名认证方式,可以有效的防止参数网络篡改,实现统一接口调用,代码简单易懂,适合新手学习签名认证,本人接触签名认证的时间也不长,有什么问题可以发私一起交流
  • 签名证书、数字签名和数字信封

    千次阅读 2013-01-18 11:12:43
    签名证书 作为文件形式存在的证书一般有这几种格式:   1.带有私钥的证书  由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件...
  • MIDlet程序自签名方法

    2009-02-05 15:59:01
    解决该问题的通常做法是购买权威认证机构签署的证书进行签名,使程序成为受MIDlet(Trusted MIDlet)。当然,前提是您的手机设备支持该种证书。 但是,权威证书的申请会消耗一定的人力物力,这笔开支对于您兹待...
  • 证书与签名(一):数字签名是什么

    万次阅读 多人点赞 2017-04-21 18:47:26
    用图片通俗易懂地解释了,”数字签名”(digital signature)和”数字证书”(digital certificate)到底是什么。   原文网址:http://www.youdzone.com/signature.html   阮一峰:...
  • 本资源包含:RSA签名算法,格式为PKCS7。RSA签名算法,格式为PKCS7。RSA签名算法,格式为PKCS7。RSA签名算法,格式为PKCS7。 RSA加密算法是一种非对称加密算法。...(积分总会乱掉,实在需要请私我)
  • 数字签名-数字信封

    2019-09-04 18:34:46
    数字签名 什么是数字签名? 只有信息的发送者才能产生的别人无法伪造的一段数字串(是发送者发送信息真实性的一个有效证明) 数字签名解决什么问题? 保证信息传输的完整性、发送者的身份认证、 防止...
  • sudo apt-get update 出现签名无效或者没有数字签名 错误提示 获取:5 http://packages.ros.org/ros/ubuntu bionic InRelease [4,680 B] 错误:5 ...
  • 原文地址: ... 数字签名是什么? 作者: 阮一峰 日期: 2011年8月 9日 今天,我读到一篇好文章。 它用图片通俗易懂地解释了,"数字签名"(digital signature)和
  • http://tjlibaoh.blog.163.com/blog/static/2112264132014259563977/apk签名作用:在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,028
精华内容 9,211
关键字:

信签名