【问题标题】:Java change Bytecode - not workingJava更改字节码 - 不起作用
【发布时间】:2017-03-24 18:36:56
【问题描述】:

首先我想确定,我没有做非法操作来修改软件违反规则(除了更改字节码已经违反规则 - 它是一个免费软件,我想改变一行来改进我的生产力)

  • 我用JDGui反编译代码看懂代码
  • DirtyJoe 编辑字节码(无需反编译和编译)
  • Winrar 将 .class 文件从 JAR 提取到桌面,使用 DirtyJoe 对其进行修改,然后使用 Winrar 再次将修改后的类文件放入 jar 中

问题是,当我在 jar 中更改类文件的字节码时,程序会检测到这一点并且根本不会执行此代码。

我已经尝试过的: 更改类文件的字节码:只需插入空格并再次删除空格(在这种情况下我使用了 windows 编辑器) - 结果:该文件的所有方法根本不会执行。该软件调用一些记录器或事件调度程序。

所以我认为软件会检测到这种修改(即使我刚刚输入了一个空格并再次删除了它)。我已经尝试更改文件元数据中的“修改日期”,但这不起作用。

你们有什么建议我可以尝试吗?

编辑#1:对评论的回答:如何知道软件是检查哈希符号还是使用加密?

编辑 #2:重要图片! : Link to the picture!

【问题讨论】:

  • Afaik 更改字节码本身违反规则。
  • 某些软件使用非对称加密来验证软件的“签名”。在这种情况下,您无能为力。我知道欧洲的大多数 ATM 都有一个 CPU 来验证软件,这样 ATM 就知道它运行的是供应商而不是黑客生产的软件。
  • 如果在类文件中插入“空格”,所有的内部索引都会出错。此外,如果 jar 已签名,则该文件的签名哈希将是错误的。
  • “插入空格”意味着您正在文本编辑器中修改字节码。这可能会破坏二进制文件;有时,即使您只是保存而不修改它,文本编辑器也会破坏它。由此看来,该软件具有某种“检测”的结论是非常牵强的。您应该发布实际的错误消息。
  • 你可以尝试反编译你要修改的class文件,修改反编译的源码,重新打包JAR。如果在原始编译期间保留了调试信息,这会容易得多,但我怀疑如果它是商业应用程序,情况会如此。

标签: java bytecode decompiler


【解决方案1】:

首先 - 如果您尝试修改混淆的 Java 应用程序,切勿依赖重新编译。编译和反编译都是有损的过程,如果能够重新编译反编译的结果,那也只能靠运气了。这并不意味着反编译是无用的 - 它对于理解代码仍然有用。但是,您不应该依赖它来修改混淆代码。

要修改代码,最好使用Krakatau assembler and disassembler。这允许您直接修改字节码,无论应用程序多么模糊(假设它仍然具有有效的类文件)。

所以首先你应该尝试使用反汇编器来编辑代码,它会告诉你问题是否是由于重新编译问题而引起的。但是,应用程序更有可能进行某种完整性检查,在这种情况下,您必须找出检查的位置,然后删除或绕过它。不幸的是,如果没有有关所讨论代码的更具体信息,就没有什么可以说的了。

【讨论】:

  • 感谢您的回复! :) 澄清一下: - 我使用 JDGui 反编译代码以理解代码 - DirtyJoe 编辑字节码(不反编译和编译) - Winrar 将 .class 文件从 JAR 提取到桌面,使用 DirtyJoe 和用 Winrar 再次将修改后的类文件放入 jar 中
  • 我已经添加了被调用方法的图片,请看:)
猜你喜欢
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 2020-04-12
  • 2015-08-06
相关资源
最近更新 更多