将java代码编译为exe(例如,使用Launch4Java)是否可以确保代码不能反向工程?

将java代码编译为exe(例如,使用Launch4Java)是否可以确保代码不能反向工程?,java,reverse-engineering,launch4j,Java,Reverse Engineering,Launch4j,经过自己的实验,我确信java代码obfuction在防止反向代码工程方面是不安全的。 因此,我转而使用Launch4J将我的一个核心jar文件绑定到一个EXE文件中。jar文件还包含主条目方法。 这将再次保护代码反向工程吗?如果计算机可以运行它,人类可以对其进行反向工程。应该这样。然而,这将遗漏Java的全部要点。简单地说,您无法阻止代码被反向工程 您已经注意到了模糊处理的好处(实际上没什么好处) 类切片/组合(有目的地混合和匹配各种类以破坏代码的逻辑结构)也不会有多大帮助,尤其是当您必须调

经过自己的实验,我确信java代码obfuction在防止反向代码工程方面是不安全的。 因此,我转而使用Launch4J将我的一个核心jar文件绑定到一个EXE文件中。jar文件还包含主条目方法。
这将再次保护代码反向工程吗?

如果计算机可以运行它,人类可以对其进行反向工程。

应该这样。然而,这将遗漏Java的全部要点。

简单地说,您无法阻止代码被反向工程

  • 您已经注意到了模糊处理的好处(实际上没什么好处)
  • 类切片/组合(有目的地混合和匹配各种类以破坏代码的逻辑结构)也不会有多大帮助,尤其是当您必须调试怪物时
  • 您也不能真正加密/混淆字节码,因为在字节码命中自定义类加载器后,它已经以完全可读的格式返回
即使你能保护代码,它也能被监控。也许在字节码级别上,也许在ASM级别上,这并不重要——重要的是,当一个人可以监控正在执行的代码时,它也可以被反向工程。有些方法确实比其他方法花费更多的时间,但在任何情况下都是不可能的


停止思考,而是开始分析您所面临的真正的安全性等问题,并相应地解决它们。防止逆向工程——即使这不是徒劳的练习——也不会神奇地解决软件的问题。

Launch4J不会将Java代码转换为本机可执行代码,它只提供一个本机启动器,用于查找JDK并将JAR作为资源(是否打包在可执行文件中)。这只是一种方便,而不是安全性。如果您的JAR位于可执行文件的外部,则有人可以像常规Java应用程序一样对您的代码进行反向工程。如果您的JAR打包到可执行文件中,则可能有人编写了将JAR包装到可执行文件中的逻辑,也有人编写了从可执行文件中打开JAR的逻辑可剪切(或使用可从可执行文件中提取资源的多种工具之一)-然后可以像常规Java应用程序一样对代码进行反向工程。

如果将可执行文件从.exe重命名为.zip,则可以查看所有.class文件和类似从.jar重命名为.zip的内容,并且使用类似于反编译器的程序,人们仍然可以查看您的源代码。

我已经对
执行了反向工程>exe
(由
启动4j
生成)在jar上运行。
如果您丢失了
jar
文件并且只有
exe
,请按照以下步骤检查源代码

  • 假设您的exe名称为
    xyz.exe
    将其重命名为
    xyz.exe.zip
  • 转到RAD/eclipse为ex:temp创建一个jave项目
  • 转到文件选择导入,导入窗口将打开
  • 转到“常规”并选择“存档文件”,然后单击“下一步”
  • 在存档文件窗口中,单击浏览并选择您的
    zip
    (例如:xyz.exe.zip)
  • 在“进入”文件夹中,选择目标路径,我在这里选择了created jave project temp并单击Finish
  • 您可以在上面的项目中看到您的所有
    .class
    文件
  • jdgui
    中打开需要检查源代码的
    .class
    文件,可以看到
    src

  • java是一种非常通用和简单的语言。不要认为使用另一种语言可以很容易地提高效率。对于我的应用程序,我不需要“写一次,到处运行”功能。不会。如果人们可以对Windows等进行反向工程以找出如何入侵,他们肯定可以对exe文件进行反向工程。编译的.exe文件需要包含运行程序逻辑所需的信息。如果计算机能够运行它,则人可以读取它。这可能会有点困难(因为字节码比本机程序集简单),但这仍然是可能的。另外,我刚刚在ubuntu上测试过,file roller能够打开exe并给我未触及的JAR。事实上,已经有了一些工具(例如反汇编程序)据我所知,至少从20世纪70年代开始,launch4j就开始帮助反向工程本地代码。顺便说一句:launch4j不会将Java代码编译成exe。它只是将原始jar封装在exe中。这比真正的Java-to-exe编译更容易规避(正如Thorbjørns answer上的@Valentins评论所证明的)如果确实需要隐藏某些内容,请将应用程序联网,并在服务器上运行敏感代码。反向工程几乎所有可执行文件都不是一个很难解决的问题。您为什么担心反向工程?(换句话说,您的业务是什么?)