Java 通过反向工程将已签名jar文件转换为可正常工作的无错误抛出未签名jar文件

Java 通过反向工程将已签名jar文件转换为可正常工作的无错误抛出未签名jar文件,java,reverse-engineering,code-signing,keytool,jarsigner,Java,Reverse Engineering,Code Signing,Keytool,Jarsigner,我已经在网上搜索了一段时间关于Java Jar签名的概念,以了解当一个人实际签名他/她的Jar文件时实际发生了什么。我已经阅读了与此相关的各种文章,但是我最终阅读了一些复杂的行话,这些行话不容易理解。如果你能用简单的术语解释这个概念/提供任何参考链接,这将非常有帮助 我的主要目标是以任何方式对签名jar文件进行反向工程,例如在字节码级别编辑jar中的类文件,将其转换为一个正常工作、无错误抛出的无签名jar文件 如果我的方法不正确或上述过程不可行,请指导我 提前感谢。一般来说,签名包括以下步骤:

我已经在网上搜索了一段时间关于Java Jar签名的概念,以了解当一个人实际签名他/她的Jar文件时实际发生了什么。我已经阅读了与此相关的各种文章,但是我最终阅读了一些复杂的行话,这些行话不容易理解。如果你能用简单的术语解释这个概念/提供任何参考链接,这将非常有帮助

我的主要目标是以任何方式对签名jar文件进行反向工程,例如在字节码级别编辑jar中的类文件,将其转换为一个正常工作、无错误抛出的无签名jar文件

如果我的方法不正确或上述过程不可行,请指导我


提前感谢。

一般来说,签名包括以下步骤:

在要签名的数据上创建哈希值 对哈希值执行私钥操作 然后,任何拥有公钥的人都可以验证签名的结果。通常,签名打包在一个数据结构中,其中包含公钥和用于签名的算法信息

签名jar文件在META-INF文件夹中包含两个附加文件使用7-Zip打开jar文件或任何您希望查看内容的文件归档程序,例如:

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文件包含PKCS7格式的签名和附加信息。文件扩展名取决于密钥算法.DSA、.RSA或.EC

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

的文档包含一段关于这些文件的短文,标题为签名JAR文件


因此,如果要从jar文件中删除签名,只需删除所有.SF和.RSA/.DSA/.EC文件。

这很有帮助。非常感谢