从已编译的 类 中推导出公开可用的 Java 代码的版本
Deducing the version of publicly-available Java code from compiled classes
我目前正在使用一个旧的 Java SE 项目,该项目有任何类型的 SLF4J as a dependency (e.g. referring to org.slf4j.Logger), but the relevant classes are packaged in a very strange JAR simply called commons.jar
, and I couldn't find any matching libraries on the Internet which have contents matching this file; Is there any "intelligent" way of finding code which matches the compiled Java class files found inside this JAR file? The file itself has no metadata 版本 — 仅编译 *.class
个文件:
commons.jar
├── apache
│ ├── commons
│ ├── http
│ ├── log4j
├── slf4j
如上面的结构所示,JAR 似乎 "belong" 不适合任何常见的分发者;即使它包含术语 apache、commons、log* 和 slf4j ,好像不是来自Apache Commons,也不是来自SLF4J。
当前方法
目前,我能想到的最好的办法是下载一堆SLF4J版本,解压它们,然后运行例如cmp
来自神秘 JAR 的 org/slf4j/Logger.class
文件和来自每个版本的类似 Logger.class
文件,例如
cmp commons/org/slf4j/Logger.class slf4j-1.7.22/slf4j-api-1.7.22/org/slf4j/Logger.class
然而,这不仅涉及大量工作,而且我相信等效源的编译可能会略有不同,具体取决于相关 JAR 的分发者使用的确切编译器......这意味着他们不会'不能逐字节进行比较。我怎样才能以更智能的方式进行这种搜索?
如何反映所有 public 和私有 类 及其成员,将它们放入字符串中,对字符串进行排序并为每个版本生成一个文本文件。
您将找到与该库的神秘版本完全匹配的一个库版本,或者找到一个较小的范围。
我会调查以下内容:
- 字节码 Java 版本,为您提供有关库构建时间的线索
- 反编译一切...也许你很幸运,找到了一些评论/版本常量,可以为你提供进一步的线索
我目前正在使用一个旧的 Java SE 项目,该项目有任何类型的 SLF4J as a dependency (e.g. referring to org.slf4j.Logger), but the relevant classes are packaged in a very strange JAR simply called commons.jar
, and I couldn't find any matching libraries on the Internet which have contents matching this file; Is there any "intelligent" way of finding code which matches the compiled Java class files found inside this JAR file? The file itself has no metadata 版本 — 仅编译 *.class
个文件:
commons.jar
├── apache
│ ├── commons
│ ├── http
│ ├── log4j
├── slf4j
如上面的结构所示,JAR 似乎 "belong" 不适合任何常见的分发者;即使它包含术语 apache、commons、log* 和 slf4j ,好像不是来自Apache Commons,也不是来自SLF4J。
当前方法
目前,我能想到的最好的办法是下载一堆SLF4J版本,解压它们,然后运行例如cmp
来自神秘 JAR 的 org/slf4j/Logger.class
文件和来自每个版本的类似 Logger.class
文件,例如
cmp commons/org/slf4j/Logger.class slf4j-1.7.22/slf4j-api-1.7.22/org/slf4j/Logger.class
然而,这不仅涉及大量工作,而且我相信等效源的编译可能会略有不同,具体取决于相关 JAR 的分发者使用的确切编译器......这意味着他们不会'不能逐字节进行比较。我怎样才能以更智能的方式进行这种搜索?
如何反映所有 public 和私有 类 及其成员,将它们放入字符串中,对字符串进行排序并为每个版本生成一个文本文件。
您将找到与该库的神秘版本完全匹配的一个库版本,或者找到一个较小的范围。
我会调查以下内容:
- 字节码 Java 版本,为您提供有关库构建时间的线索
- 反编译一切...也许你很幸运,找到了一些评论/版本常量,可以为你提供进一步的线索