通过逆向工程将签名的 jar 文件转换为工作非错误抛出未签名的 jar 文件

Converting a signed jar file to working non-error throwing unsigned jar file by reverse engineering

我在网上搜索 Java Jar 签名概念已有一段时间了,以了解实际签名时实际发生的事情 his/her jar file.I 已经查看了各种相关文章对此,然而,我最终读到了一些复杂的行话,这些行话并不容易理解。如果您能用简单的术语解释这个概念/提供任何参考,那将非常有帮助 link。

我的主要 objective 是对签名的 jar 文件进行逆向工程(通过任何方式,例如在字节码级别编辑 jar 中的 class 文件)以将其转换为工作, 非错误抛出未签名的 jar 文件。

如果我的方法不对或者上述过程无法实现,请指导我。

提前致谢。

一般来说签约包括以下几个步骤:

  1. 在要签名的数据上创建哈希值
  2. 对哈希值做私钥运算

结果 ("the signature") 然后可以由任何拥有 public 密钥的人验证。通常签名被打包在一个数据结构中,该数据结构包含 public 密钥和有关用于签名的算法的信息。

签名的 jar 文件META-INF 文件夹中包含两个附加文件(使用 7-Zip 或无论您喜欢什么文件归档器来查看内容),例如:

META-INF/BCKEY.DSA
META-INF/BCKEY.SF

".SF" 文件 包含 jar 中每个文件的哈希值:

Signature-Version: 1.0
Created-By: 1.5.0_08 (Sun Microsystems Inc.)
SHA1-Digest-Manifest-Main-Attributes: TCwFll9z+7/6t/SlEoKf3a1SEKU=
SHA1-Digest-Manifest: tbYd5vvo/j3yIenDqYs8xdPRv4c=

Name: org/bouncycastle/asn1/ua/DSTU4145BinaryField.class
SHA1-Digest: LwFPLRwMlgwj7TOKYsDtqhS6+lE=

Name: org/bouncycastle/asn1/DEREnumerated.class
SHA1-Digest: DLc3+IOaSG+cgzW+u4KUbgyypWA=

Name: org/bouncycastle/asn1/x509/SubjectKeyIdentifier.class
SHA1-Digest: v08rbVIhc3KGIL/JlpIPqwQTvgI=

...

".DSA" 文件 包含 PKCS#7 格式的签名和附加信息。文件扩展名取决于密钥算法 (".DSA", ".RSA"".EC").

"BCKEY" 只是签名的名称(通常是用于签名的密钥别名的前 8 个字符)。 META-INF文件夹中可能有几对签名文件。

jarsigner 的文档包含关于这些文件的一小段,标题为 "The Signed JAR File"。

因此,如果您想从 jar 文件中删除签名,只需删除所有“.SF”和“.RSA”/“.DSA”/“.EC”文件即可。