如何检查二进制文件是否是从特定来源构建的

2023-11-22

我正在处理的遗留项目包括一些二进制 jar 文件形式的外部库。我们决定,为了进行分析和潜在的修补,我们希望接收该库的源代码,使用它们来构建新的二进制文件,并在经过详细且足够长的回归测试后切换到这些二进制文件。

假设我们已经检索并构建了源(我实际上处于计划阶段)。在真正的测试之前,我想执行一些“兼容性检查”,以排除源代表的内容与“旧”二进制文件中的内容显着不同的可能性。

使用javap工具我能够提取用于编译的JDK版本(至少我相信它是JDK的版本)。它说,二进制文件是使用主要版本 46 和次要版本 0 构建的。根据本文它映射到 JDK 1.2。

假设相同的 JDK 将用于源编译。

The question是: 如果这两个二进制文件都是从相同的来源构建的,是否有可靠且可能有效的验证方法?我想知道是否所有方法签名和类定义都相同,以及大多数或可能所有方法实现是否相同/相似。

该库相当大,因此我认为对反编译的二进制文件进行详细分析可能不是一个选择。


我建议采用多阶段过程:

应用之前建议的 Jardiff 或类似工具来查看是否存在任何 API 差异。如果可能,选择一个具有报告私有方法等选项的工具。实际上,Java 中的任何重大实现更改都可能会更改某些方法和类,即使公共 API 未更改。

如果你有API匹配,用指定的编译器编译一些随机选择的文件,反编译结果和原始类文件,并比较结果。如果它们匹配,则对越来越大的代码体应用相同的过程,直到发现不匹配或检查完所有内容。

与实际的类文件相比,反编译代码的差异更有可能为您提供有关差异性质的线索,并且更容易过滤非显着差异。

如果发现不匹配,请进行分析。这可能是由于您不关心的事情造成的。如果是这样,请尝试构建一个脚本来删除该形式的差异并恢复编译和比较过程。如果出现广泛的不匹配情况,请尝试使用优化等编译器参数。如果对编译器参数的调整消除了差异,则继续进行批量比较。此阶段的目标是找到编译器参数和反编译代码过滤器的组合,以在示例文件上产生匹配,并将它们应用于库的批量比较。

如果您无法在反编译的代码中获得相当接近的匹配,则您可能没有正确的源代码。即便如此,如果您有 API 匹配,那么构建您的系统并使用编译结果运行测试可能是值得的。如果您的测试至少与您从源代码构建的版本运行得一样好,请继续使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查二进制文件是否是从特定来源构建的 的相关文章

随机推荐

  • MediaController 定位 - 绑定到 VideoView

    关于如何定位 已经有很多讨论了 MediaController大多数答案都是使用setAnchorView 方法 乍一看这个解决方案似乎有效 但就我而言却无效 根据这个Post setAnchorView仅作为初始定位的参考MediaCon
  • 进入 docker 容器,exec 丢失 PATH 环境变量

    这是我的 Dockerfile FROM ros kinetic ros core xenial CMD bash 如果我跑docker build t ros docker run it ros 然后从容器内echo PATH 我去拿 o
  • 使用动态规划将自然数表示为平方和

    问题是找到求和为数字 n 所需的最小平方数 一些例子 min 1 1 1 min 2 2 1 1 min 4 1 2 min 13 2 3 2 我知道拉格朗日四平方定理它指出任何自然数都可以表示为四个平方和 我正在尝试使用 DP 来解决这个
  • 如何在 Process.StandardOutput 中禁用输出缓冲

    这个问题以前已经被问过不止一次了 但我在这些讨论中都没有找到令人满意的答案 我正在启动一个命令行进程 该进程可以对 STDOUT 进行实时测量 大约每秒产生一个新结果 使用 System Diagnostics Process Standa
  • php 和 mongodb 中的时间戳

    我花了三天时间试图解决这个问题但没有成功 我正在使用 MongoDB PHP 库 并且尝试使用 PHP 文档中的示例将时间戳转换为有效日期 但它总是返回 1970 01 17 代码是 utcdatetime new MongoDB BSON
  • 防止 NuGet 内容和 contentFiles 文件夹中出现重复文件

    我的 NuGet 包需要提供一些相当大的文件来构建输出目录 在旧的 NuGet 模型中 此类文件必须存储在content的文件夹 nupkg 当在一个NuGet 3 3 中引入的新模型 此类文件必须存储在contentFiles folde
  • Phonegap - 忽略 Android 上的字体大小显示设置

    通过配置更改字体大小显示设置时 我在某些 Android 设备上遇到问题 在网络浏览器中 我的应用程序很简单 忽略这一点 对于其他一些手机也是如此 但对于某些特定的手机 如摩托罗拉 G 或 X 更改此配置也会影响我的 Phonegap 应用
  • C# 字符串格式化和填充

    看起来这应该是一件简单的事情 但我一直没能做到正确 我看过http idunno org archive 2004 14 01 122 aspx以供参考 例子 我想打印一个双精度值表 每个双精度输出具有 3 位小数精度 并占用 10 个空格
  • Babel 6 CLI:意外的令牌导出?

    我正在尝试使用它的 CLI 来运行 Babelbabel node但我不断得到Unexpected token export错误 我知道 Babel 6 都是关于插件的 我需要通过设置插件 babelrc但它似乎不能正常工作 这是我的问题
  • Boost序列化库升级

    我怎么知道我可以安全升级Boost序列化库在生产系统上而不破坏与现有数据的兼容性 我是否应该执行任何测试 以确保新版本能够成功读取以前版本的库以二进制格式存储的所有数据 Boost Serialization 库本身是否保证版本之间的某种兼
  • 如何触发对 Jackson 中实现 JsonSerialized 的类的 .serializeWithType() 的调用?

    这是杰克逊 2 2 x 我有一堂课实施JsonSerializable 该接口有两种实现方法 serialize and serializeWithType 我想测试这个类的序列化 并且我可以触发对serialize 容易地 然而 并非如此
  • 使用 pandas 创建日期范围列表

    我得到了包含 start date 和 end date 列的 DataFrame start date finish date 0 2019 06 16 2019 06 23 1 2019 05 29 2019 06 05 2 2019
  • DynamicResource 颜色不适用于边框上的 BorderBrush - Bug?

    Visual Studio 2010 NET WPF 4 0 我认为这可能是一个 WPF 错误 但我似乎找不到有关它的错误报告 为了弥补我错过了一些明显的东西的可能性 我转向 stackoverflow 寻求答案 考虑这个 xaml 代码隐
  • 如何编写响应过滤器?

    有没有办法只处理过滤器中的响应 下面写的代码正确吗 public void doFilter request response chain code to handle request chain doFilter request resp
  • C# MongoDB 驱动程序仅返回 100 个结果

    我正在编写邮寄标签 需要为每个文档打印一个标签 我的 Collection 中有 829 个文档 但是当我检索它们时 我只得到 100 个文档 我有这个 LINQ 代码 IMongoCollection Pessoa Pessoa data
  • 使用 Firebase firestore 进行分页 - swift 4

    我正在尝试使用 firestore 对数据进行分页 无限滚动我的表格视图 我已经尽我所能集成了谷歌提供的分页代码 但在正确加载数据方面仍然遇到问题 初始数据集根据需要加载到表视图中 然后 当用户点击屏幕底部时 下一个 x 数量的项目将被加载
  • 使用正则表达式替换坏词

    我正在尝试创建一个坏词过滤器方法 我可以在每次插入和更新之前调用该方法来检查字符串中是否有任何坏词并替换为 Censored 我有一个 SQL 表 其中有一个坏词列表 我想将它们带回来并将它们添加到列表或字符串数 组中 并检查已传入的文本字
  • 当表单重新显示失败值时,输入验证错误到文本框

    我问过一个question要知道为什么在我的应用程序中 当我使用模型绑定来验证模型时 文本框被突出显示 即红色边框和粉红色阴影背景应用于文本框 尝试更新模型 但当我手动验证时则不然 模型状态 AddModelError 到现在已经2天了 没
  • woocommerce 通知 Product_type 被错误调用。不应直接访问产品属性

    将 WooCommerce 版本更新到 3 0 后 我在商店页面上的所有产品上都会收到此通知 注意 product type 被调用 不正确地 不应直接访问产品属性 请参阅 WordPress 中的调试以获取更多信息 此消息是在 3 0 版
  • 如何检查二进制文件是否是从特定来源构建的

    我正在处理的遗留项目包括一些二进制 jar 文件形式的外部库 我们决定 为了进行分析和潜在的修补 我们希望接收该库的源代码 使用它们来构建新的二进制文件 并在经过详细且足够长的回归测试后切换到这些二进制文件 假设我们已经检索并构建了源 我实