如何保护 Java/Javafx 代码不被最终用户看到?

2024-03-06

我一个人在一家公司做一个项目已经两年多了。该项目是一个非常大的项目,使用 rxtx 与硬件设备进行通信。我使用 Java 8 和 JAVAFX 作为 UI。现在它几乎完成了,我开始搜索如何交付公司将分发给其客户的最终用户应用程序。

问题是,我正在合作的公司希望当软件在最终客户手中时代码无法访问,因为 Java 代码包含一些极其敏感的信息,如果最终客户碰巧知道这些信息,可能会给公司带来非常糟糕的后果。客户实际上可以执行他们无权执行的操作。

因此,经过(大量)搜索并相对于我的案例进行思考后,我明白对 JAR 进行混淆并不是解决方案。然后,我尝试生成一个 JAR,然后将其转换为 EXE,但我成功的只是将 JAR 包装到 EXE 中,这并不妨碍提取 JAR,然后轻松查看所有代码。最后,我发现我应该使用 AoT 编译(如 GCJ 编译器)从我的 Java 代码生成本机二进制 exe,但在这里我陷入困境,因为在观看视频和阅读文章等之后,我没有找到一种清晰的方法来生成本机二进制文件EXE文件。

我现在很困惑,因为我不知道我是否走在正确的道路和良好的方向上,或者我是否完全错误,并且还有另一种保护代码的方法(至少对于非专业黑客来说,我知道这是不可能的)使其100%安全,但我只是在寻找一种合理且好的方法)。我应该如何管理工作的最后一步?


我目前在一家公司工作,为了客户的安全以及(不太重要的)法律原因,我们不希望任何人访问该公司的代码。 ;-)

您可以考虑的一种可能的解决方案是将您认为最敏感的代码重写到 C/C++ 库中。可以将其编译为相应操作系统的 .so/.dll/.dylib 文件,这将使其变得困难,不是完全不可能,而是难以反编译。

麻烦来自于学习如何从 Java 访问本机代码,因为许多文档没有帮助或者根本不存在。这将利用 Java 本机接口 (JNI),它允许 Java 与本机(编译的 C/C++)代码进行交互。这使得创建一个 Jar 文件成为可能,该文件将有效地成为一个 Java 库,供您在项目的其余部分中访问。然而,本机代码仍然需要在运行时加载,但这是学习 JNI 如何工作的一部分。我发现 JNI 的一个有用链接是http://jnicookbook.owsiak.org/ http://jnicookbook.owsiak.org/(只要它仍然是一个功能链接)。

我工作的一个客户有一个用 Java 编写的项目,需要实现我们的代码,不幸的是,这些代码都是用 C 编写的。因此,我们需要一种从 Java 访问此 C/C++ 代码的方法。这就是我们解决这个问题的方法,而无需用 Java 重写代码。但我们有一个好处(?):我们的代码已经用 C 编写了。

这种在最后一刻用我可能熟悉也可能不熟悉的另一种语言编写一堆额外代码的解决方案听起来并不是特别有趣。

我很想知道其他人可能会看到这个解决方案出现什么问题。

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

如何保护 Java/Javafx 代码不被最终用户看到? 的相关文章

  • 如何在Mac上使用eclipse安装jetty

    我是一个新手 jetty 和 RESTful API 我想使用 Jetty 创建 REST 服务 并希望将嵌入式 jetty 与 eclipse 一起使用 任何人都可以建议我在 Mac OS 中使用 Eclipse 安装 Jetty Jet
  • 使用 JAXB 编组 LocalDate

    我正在构建一系列链接类 我希望能够将其实例编组到 XML 以便我可以将它们保存到文件中并稍后再次读取它们 目前我使用以下代码作为测试用例 import javax xml bind annotation import javax xml b
  • 从剪贴板获取图像 Awt 与 FX

    最近 我们的 Java FX 应用程序无法再从剪贴板读取图像 例如 用户在 Microsofts Paint 中选择图像的一部分并按复制 我不是在谈论复制的图像文件 它们工作得很好 我很确定它过去已经有效 但我仍然需要验证这一点 尽管如此
  • 空 EntityManager/EJB 注入 MDB

    我有一个消息驱动 bean MDB 部署到 WebLogic 12 1 3 我尝试使用 PersistenceContext 注释将实体管理器注入 MDB 但实体管理器为空 我还尝试注入一个简单的无状态会话 bean 它也是空的 但是 Me
  • 安全转义表名/列名

    我在 php 中使用 PDO 因此无法使用准备好的语句转义表名或列名 以下是我自己实现它的万无一失的方法 tn str replace REQUEST tn column str replace REQUEST column sql SEL
  • FFmpeg 不适用于 android 10,直接进入 onFailure(String message) 并显示空消息

    我在我的一个项目中使用 FFmpeg 进行视频压缩 在 Android 10 Google Pixel 3a 上 对于发送执行的任何命令 它会直接进入 onFailure String message 并显示空消息 所以我在我的应用程序 g
  • 如何屏蔽 Protobuf 中的某些字段

    我找不到一种方法来屏蔽 protobuf 结构中的某些字段 我确实阅读了有关 FieldMaskUtil 的内容并尝试了几个示例 但它似乎做了相反的操作 即复制 FieldMask 中提到的字段 这与我想要的不同 这是示例结构和相应的测试代
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 带有面板的 Java Swing JToolbar:外观和感觉

    我有一个JToolbar其中包含多个JPanels 需要 因为我希望每个都有特定的边界 不幸的是 外观管理器无法识别JPanels属于工具栏和JButtons因此 渲染器与普通按钮一样 即没有工具栏上的特殊鼠标悬停效果 更换JPanels
  • 如何在Gradle中支持多种语言(Java和Scala)的多个项目?

    我正在尝试将过时的 Ant 构建转换为 Gradle 该项目包含约50个Java子项目和10个Scala子项目 Java 项目仅包含 Java Scala 项目仅包含 Scala 每个项目都是由 Java 和 Scala 构建的 这大大减慢
  • XSLT:我们可以使用abs值吗?

    我想知道在 XSLT 中我们是否可以使用 math abs 我在某处看到过这个 但它不起作用 我有类似的东西
  • ActiveMQ发送ObjectMessage

    我正在使用 ActiveMQ 在我当前的项目中实现消息系统 我需要发送和接收 Java 对象 而不是简单的文本或二进制消息 Java 对象 我的消息对象 根据需要实现了 Serialized 接口 ActiveMQ 的最新版本添加了一些安全
  • 如何列出所有可用的 LookAndFeel 主题?

    如何列出所有可用的 LookAndFeel 主题 我想在 JComboBox 中显示以供用户选择 这真的很简单 public static UIManager LookAndFeelInfo getInstalledLookAndFeels
  • Hibernate @OneToMany 注释到底是如何工作的?

    我对 Hibernate 还很陌生 我正在通过教程学习它 我在理解到底如何一对多注释作品 所以我有这两个实体类 Student代表一个学生并且Guide代表指导学生的人 因此 每个学生都与一名向导相关联 但一名向导可以跟随多个学生 我想要一
  • 在 netBeans 中运行程序时,字体看起来非常奇怪

    我在我的新 MacBook M1 上设置了 netBeans 和 SceneBuilder 除了运行程序时的字体外 一切正常 它看起来像这样 我不知道为什么 按钮应显示 Click me 标签应显示 Hello 我收到的错误消息是 M rz
  • setKeyListener 将覆盖 setInputType 并更改键盘

    大家好 我在两个设备之间遇到问题 在实践中使用InputType和KeyListener我正在操纵一个EditText让它从数字键盘接收逗号和数字 有关更多背景信息 请检查我之前的question https stackoverflow c
  • java中wav文件转换为字节数组

    我的项目是 阿塞拜疆语音的语音识别 我必须编写一个程序来转换wav文件到字节数组 如何将音频文件转换为byte 基本上如第一个答案中的片段所描述 但不是BufferedInputStream use AudioSystem getAudio
  • 如何使用 SAX Java 解析器读取注释文本

    我只想使用 Java 中的 SAX 解析器读取 XML 文件中对象标记的注释 这是我的文件的摘要
  • java数据结构模拟数据树

    我需要帮助定义使用什么方法 我有一个 SOAP 响应 给我一个 xml 文件 我需要在屏幕上显示 3 个相关列表 当您在第一个列表中选择一个项目时 相应的选择将出现在第二个列表中 依此类推 我只对从 xml 流中提取数据后如何有效地组织数据
  • 条件查询:按计数排序

    我正在尝试执行一个标准查询 该查询返回 stackoverflow 中回答最多的问题 例如常见问题解答 一个问题包含多个答案 我正在尝试使用标准查询返回按每个问题的答案数排序的回答最多的问题 任何人都知道我应该在 hibernate cri

随机推荐

  • 在排序表达式中使用聚合函数

    我有一个使用从存储过程返回的数据集的报告 有两个关键列 Name and Value 我将此数据集用于两个 tablixes 第一个只是显示数据的简单 tablix 第二组数据基于Name柱子 我需要根据总和对这些数据进行排序Value c
  • 在 Emacs 中编写“Hello World”?

    我想在 Emacs Lisp 中编写一些 Unix 脚本 但是 似乎没有一种干净的方法来写入 STDOUT 因此我可以将结果重定向到文件或将输出通过管道传输到另一个命令 这print函数在输出字符串周围放置双引号 所以我得到 你好世界 代替
  • Visual Studio 2015 调试器 - 对 SqlCommand 的高性能影响

    从 VS2013 升级到 VS2015 后 我对附加了调试器的 Web 应用程序运行速度如此之慢感到震惊 所以我决定使用 VS2013 和 VS2015 进行比较迷你分析器 http miniprofiler com 分析一个特别慢的页面
  • git 写入和读取访问权限,无需成为服务器用户

    我搜索了一段时间 但找不到合适的解决方案 我的情况 我有一台服务器 上面有一个 git 存储库 只有使用合适的 ssh 密钥才能连接到服务器 是否可以向无法访问服务器的用户授予从此特定存储库写入和读取的权限 是否只能通过在服务器上为用户创建
  • 如何在Python中断言两个列表包含相同的元素? [复制]

    这个问题在这里已经有答案了 在编写测试用例时 我经常需要断言两个列表包含相同的元素 而不考虑它们的顺序 我一直通过将列表转换为集合来做到这一点 有没有更简单的方法来做到这一点 EDIT 正如 MarkDickinson 指出的那样 我可以使
  • 称程序“延迟”的最佳方式是什么?

    有两个过程 A1 和 A2 它们都在其代码中调用函数 B function B boolean begin do other stuff end procedure A1 begin do stuff if b then do stuff
  • 将谷歌地图折线转换为 html 画布线 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我需要将谷歌地图折线显示到 html 画布中 我如何像这样转换坐标 lat 25 5643498 lng 45 34492432 像这样的画
  • 使用 Kotlin 对 Android 10 上的标记进行聚类

    我发现 Google 的开发网站上大多只有 Java 代码示例 Kotlin 的代码示例也很少 这很烦人 所以我不得不在这里问这个问题 我正在尝试设置 ClusterManager 但我没有任何线索说明它应该如何完成 并且没有可以看到的 K
  • 在 Java 中使用 MessageFormat.format() 格式化消息

    我已将一些消息存储在资源包中 我正在尝试按如下方式格式化这些消息 import java text MessageFormat String text MessageFormat format You re about to delete
  • MPI:MPICH2 在 Windows 局域网中安装和编程

    我正在学习MPI 我遵循的第一个教程是here http curveto blogspot in search label Parallel 我在 Windows 7 上使用 MSVC 2010 成功运行的代码是 include mpi h
  • 浏览器支持以双斜杠开头的 URL

    我最近看到一些没有协议的链接 它看起来并不太难理解 我认为这是一个好主意并且非常直观 对于那些不知道的人 请使用类似的 URL example com script js将指向任一http example com script js or
  • 通过反射使用字符串值设置属性

    我想通过反射设置对象的属性 其值为 typestring 因此 举例来说 假设我有一个Ship类 其属性为Latitude 这是一个double 这是我想做的 Ship ship new Ship string value 5 5 Prop
  • 无法连接到远程虚拟机。连接被拒绝。尝试在 Flash Builder 4.7 中调试远程 java 应用程序时

    在某一时刻 远程调试曾经发挥过作用 但对于我的一生 我似乎无法弄清楚是什么破坏了它 我有一个 Flex Java 应用程序 有一个启动 tomcat 服务器的包装器 我修改了wrapper conf文件以包含 Xdebug Xrunjdwp
  • 当波浪号出现在表达式之前时,它有什么作用?

    var attr input textarea indexOf target tagName toLowerCase value innerHTML 我在一个答案里看到过 以前没见过 这是什么意思 is a 翻转其操作数中的所有位 例如 如
  • “pick”函数的 TypeScript 通用类型(结果对象值类型)

    在编写 pick 函数的类型时遇到问题 当仅选择一个键或具有相同类型值的多个键时 一切正常 但是 如果我尝试选择几个键并且它们的值是不同类型 我会收到错误 不太确定我在哪里犯了错误 感谢您的时间 export interface Mappe
  • 传单地图单击更改颜色,然后再次单击时删除

    我正在使用 Leaflet 制作美国地图 并且具有单击功能来放大和更改州的颜色 这可行 但我不能 单击另一个状态时使颜色返回到之前的颜色 目前 每次我点击一个状态 颜色就会改变 并且不会删除之前的颜色变化 这是我的代码 var map L
  • Python - 使用utf-8编码读取和写入csv文件

    我正在尝试读取一个 csv 文件 其标头包含外来字符 并且我遇到了很多问题 首先 我使用简单的 csv reader 读取文件 filename C Users yuval Desktop new resources mk str mkNu
  • 内联表单,缩小以使标签适合左侧

    标题说标签是因为这是我的用例 但显然它可以是任何元素 我想要实现的是以下表单布局 label input another label input third label input 目前我的 HTML 大致如下 省略细节 div overf
  • 将音频样本从 Float32 移位到 SInt16 会导致严重削波

    我对 iOS 及其 C 基础很陌生 但对一般编程并不熟悉 我的困境是这样的 我正在基于复杂 AudioUnits 的应用程序中实现回声效果 该应用程序需要混响 回声和压缩等 但是 只有当我使用特定的时 回声才能正常工作音频流基本描述我的应用
  • 如何保护 Java/Javafx 代码不被最终用户看到?

    我一个人在一家公司做一个项目已经两年多了 该项目是一个非常大的项目 使用 rxtx 与硬件设备进行通信 我使用 Java 8 和 JAVAFX 作为 UI 现在它几乎完成了 我开始搜索如何交付公司将分发给其客户的最终用户应用程序 问题是 我