如何在Java字节码中自动找到相似之处?

如何在Java字节码中自动找到相似之处?,java,bytecode,Java,Bytecode,不确定标题是否是最具描述性的表达方式,但它是我所能想到的最具描述性的 不管怎样,我还是要回答这个问题。我想知道如何在字节码中找到相似之处。我的意思是很难正确解释(至少对我来说),所以我将给出一个例子 我有aba级和nhf级。这些类是我制作的一个游戏中的模糊类。我提供了这个游戏的一个修改版本,它只是在一些地方有一些小的代码更改,但是因为这个游戏是出售的,所以每次有新的更新,它都会被重新使用。我想通过检查这些类的字节码有多相似来判断哪些类在重新使用时发生了变化。我知道这是可能的,但我不知道如何检查如

不确定标题是否是最具描述性的表达方式,但它是我所能想到的最具描述性的

不管怎样,我还是要回答这个问题。我想知道如何在字节码中找到相似之处。我的意思是很难正确解释(至少对我来说),所以我将给出一个例子

我有aba级和nhf级。这些类是我制作的一个游戏中的模糊类。我提供了这个游戏的一个修改版本,它只是在一些地方有一些小的代码更改,但是因为这个游戏是出售的,所以每次有新的更新,它都会被重新使用。我想通过检查这些类的字节码有多相似来判断哪些类在重新使用时发生了变化。我知道这是可能的,但我不知道如何检查如何做到这一点

是否有一个库、程序或其他东西可以解析字节码并检查它有多相似,或者我必须自己写这个?如果我必须自己写的话,我会很感激有人给我指出正确的方向(或者把我和可能有用的东西联系起来,等等)


此外,我正在考虑使用代码而不是手动执行此操作,以防出现不明显的问题。

可以有一个更简单的解决方案:

我不知道您使用的是什么混淆器(可能是Proguard),但它可能会生成一个映射,将混淆的类名映射到未混淆的类名。(如果没有,您可以切换到Produard,它会生成这样的映射。)

因此,您可以将模糊的类名转换为原始类名(反之亦然),前提是您有版本的映射


因此,您可以通过匹配原始类名从这两个映射生成这样的映射。

您可以开始区分这两个类的
javap
输出。可能忽略符号表(或只是比较它们的大小)。好吧,我想大小是一个开始,但理想情况下,我希望能够识别类、方法和字段(除了一些唯一的字段外,可能没有那么多字段),即使实际功能(不仅仅是字段/方法/类名)发生了一些变化(显然,如果有一半的类被重写了就不会)。我想我会看看大小的问题,希望能实现它,谢谢你的信息!你写的代码对吗?你还不知道答案吗?我举的例子不是我想做的,而是一个例子。我的实际用例比较复杂,这里不需要介绍。@Marcelo Javap不是为处理模糊类而设计的。我建议使用更强大的反汇编程序,比如Krakatau(我写的)。您可以在找到它,不过我建议您等一天,因为我目前正在进行重大更改以改进属性支持。