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

时间:2015-05-25 15:59:08

标签: java reverse-engineering code-signing keytool jarsigner

我一直在网上搜索Java Jar签名概念已经有一段时间了解当实际签署他/她的jar文件时实际发生了什么。我已经查看了与此有关的各种文章,但我最终读了一些复杂的术语,不易理解。如果您能用简单的术语解释概念/提供任何参考链接,那将非常有用。

我的主要目标是对已签名的jar文件进行反向工程(通过任何方式,例如在字节码级别编辑jar中的类文件),将其转换为一个有效的,无错误的无符号jar文件。< / p>

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

一般而言,签名包括以下步骤:

  1. 为要签名的数据创建哈希值
  2. 对哈希值执行私钥操作操作
  3. 然后,任何拥有公钥的人都可以验证结果(&#34;签名&#34;)。通常,签名打包在一个数据结构中,该数据结构包含有关用于签名的算法的公钥和信息。

    签名的jar文件 META-INF 文件夹中包含两个附加文件(打开带有7-Zip或任何您希望查看内容的文件存档的jar文件) ,例如:

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

    &#34; .SF&#34;文件包含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=
    
    ...
    

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

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

    jarsigner的文档包含关于这些文件的简短段落,标题为&#34;签名的JAR文件&#34;。

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