如何保护已编译的Java类?

2024-01-09

我知道,这里已经提出了很多类似的问题。我不是在问我是否可以保护我编译的 Java 类 - 因为显然你会说“不,你不能”。我问保护 Java 类免遭反编译的最著名方法是什么?如果您知道该领域的任何研究或学术论文,请告诉我。另外如果您使用过一些方法或软件请分享您的经验?任何类型的信息都会非常有用。谢谢。


首先,如果您“仅”针对 Windows 市场,那么有一个非常容易防止“.class 到 .java”反编译的方法:使用像 Excelsior Jet 这样的工具来转换.jar in an .exe.

这是万无一失的:它是不可能的如果您使用 Excelsior Jet 来取回 .java 文件(对于所有说“不可能阻止反编译的人来说,这是不可能的”).class文件”)。当然,攻击者可以启动SoftIce并尝试追踪你的.exe但这比使用 JAD 反编译要棘手一些.class to a .java它肯定不允许找到.java文件返回。

现在,也许您也瞄准了 OS X 和 Linux,或者您没有足够的钱购买 Excelsior Jet。

我正在编写一个用 Java 编写的商业软件。该软件只有在有互联网连接的情况下才有意义。因此,我们通过在服务器端进行部分计算来“保护”我们的软件:我们有几个.class除非它们是从服务器端生成的,并且我们将它们通过网络发送(而通过网络发送的是always不同:我们正在创造独特的、一次性的.class服务器端的文件)。

这需要互联网连接,但如果用户不喜欢我们软件的工作方式,那么他可以随意购买我们竞争对手的劣质产品;)

反编译不会有多大好处:您需要主动破解该软件(即重现服务器端发生的情况),否则您将无法使用它。

我们使用我们自己的“字符串混淆”before我们使用 Proguard。我们还进行源代码检测(我们也可以进行字节码检测),从代码中删除很多内容(例如我们注释掉的“断言”)并引入一些随机的“代码流混淆”[软件可以采取不同的路径却得到相同的结果,这确实使软件难以追踪])。

然后,我们使用 Proguard(免费)来展平所有 OO 层次结构并混淆已经代码流和字符串混淆的代码。

所以我们的流程是:

  • 字符串混淆
  • 随机代码流混淆
  • Proguard
  • final .jar这取决于.class它们是在服务器端(以不同方式)动态生成的。

除此之外,我们还发布非常定期(和自动)的更新,始终确保稍微修改我们的客户端/服务器保护方案(以便每次发布时,假设的攻击者都必须从头开始)。

当然,认输并思考会更容易:“我无法做任何事情来让攻击者的日子更难过,因为 JAD 无论如何都可以找回 .java 文件”(如果您使用 .class 到 .exe 转换器来保护 .class 不被反编译,这是非常有争议的并且是公然错误的)。

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

如何保护已编译的Java类? 的相关文章

随机推荐

  • 从 np.fft 计算幅度

    我似乎使用 np fft fft 计算原始波的不正确振幅 显示了 fft 的图 您可以看到显示的幅度约为 3 和 1 5 但如果您查看代码 我将使用幅度 7 和 3 来生成信号 该图应该有两个尖峰 在 x 13 处达到 y 3 在 x 15
  • 浏览器历史记录管理

    我正在尝试找到一种干净的解决方案 以最有效的方式处理浏览器历史记录 我正在使用 GWT 但这个问题确实比这更普遍 这是我的情况 我认为这是相当标准的 我有一个 Web 应用程序 它有几个不同的页面 位置 位置 无论你想怎么称呼它 我会显示这
  • SIP ACK 对话框为空

    我正在使用 JAIN SIP 在 java 中创建 SIP 客户端 我已经成功注册并发送 INVITE 但是当将 ACK 发送回服务器时 我收到错误消息 Cannot Create ACK no remote Target 我检查了 Dia
  • 断言失败:运行时反射宇宙中的不安全符号 DeveloperApi

    我正在 Java 8 程序中运行以下几行 SparkConf sparkConf new SparkConf sparkConf setAppName testJob sparkConf setMaster spark blahblah 7
  • 仅使用一次计时器

    我只想在主窗体初始化后 1 秒使用计时器一次 我以为下面会有一个消息框只显示一次 Hello World 但实际上每秒都会有一个新消息框显示 Hello World 为什么这样 我已经把t Stop 在勾选事件中 另外 我是否需要以某种方式
  • 任务并行库 - 如何立即返回但有一个并行步骤

    我有以下工作流程 需要以非阻塞并行处理方式进行 我想要方法DoStuff 立即返回 所以我正在使用任务并行库 DoStuff Do some setup Parse an Excel file then for each row Fill
  • 随后启动两个 WebClient.UploadStringAsync 调用

    当调用 WebClient UploadStringAsync 两次 而不等待 WebClient UploadStringCompleted 事件时 将引发以下异常 WebClient 不支持并发 I O 操作 显然 这是不支持的 想要启
  • Silverlight 4 BitmapImage - bmp 文件支持

    MSDN 提到了对 PNG 和 JPG 的支持 但许多人正在尝试 setSource file bmp 并抱怨 灾难性失败 有人可以澄清一下 是否支持 bmp 吗 如果没有 在 silverlight 中显示 bmp 的最佳方式是什么 Si
  • 如何在javatechig示例中添加Recycler项目SetOnClickListener

    我正在尝试添加onclick监听器为了这RecyclerView但我尝试了一切 但它不起作用 饲料项目 public class FeedItem private String title private String thumbnail
  • Chrome 中的 Mailto 链接会打开新选项卡

    您好 我的页面上有一个 mailto 链接 该链接在其他浏览器中运行良好 在 Chrome 中 它会打开一个新选项卡 其中 URL 为 mailto 链接 有什么办法可以抑制Web开发人员的行为吗 从我读到的内容来看 这似乎是 chrome
  • 在两个单独的 Angular 应用程序之间进行更改时,AngularJS e2e 测试会挂起

    我有一个令人沮丧的问题 我想为复杂的角度应用程序编写端到端测试 问题是登录屏幕是一个单独的应用程序 最初的想法是 它将根据登录凭据进行分支 以分离我们生态系统中的其他角度应用程序 它就像一个魅力 对于测试来说 这是一场噩梦 测试按预期工作
  • Visual Studio 2015 - ASP.Net 应用程序只有重新启动 Visual Studio 后才会启动

    有时 当我尝试启动 ASP Net 应用程序 调试 时 应用程序将无法启动 Visual Studio 看起来应用程序正在运行 状态栏的颜色变为橙色 浏览器打开并 永远 加载 IIS Express 正在运行 并且该站点显示在 IIS 尝试
  • django 使用动态列名称进行注释

    我在 django 应用程序中有一个模型 其结构如下 class items models Model name models CharField max length 50 location models CharField max le
  • 如何在不使用 10 次方表示的情况下将双精度数转换为字符串 (E-05)

    如何在不使用 10 次方表示的情况下将双精度数转换为字符串 E 05 double value 0 000099999999833333343 string text value ToString Console WriteLine tex
  • 为什么在 for 循环中检查 HashMap 是否具有特定值需要很长时间才能执行?

    我正在研究 Double DES 上的中间相遇攻击 我已经实现了 DES 加密 解密并完成了加密 现在我想对 Double DES 执行 MITM 攻击以找到密钥 我尝试实现此目的的方法是在 for 循环中将中间密码存储为 HashMap
  • 正则表达式停止搜索特定字符串

    我试图在重复的特定模式之后获取任何字符 但我需要在特定字符串处停止搜索 例如 anything anything anything pattern string anything anything anything pattern anot
  • 从 Swift 中的字符串中删除“\”(反斜杠)

    我有以下代码 let refreshedToken FIRInstanceID instanceID token var encriptat3 String ope sql para UPDATE xw usuarios SET IDFIR
  • 删除特殊字符VBA Excel

    我正在使用 VBA 阅读一些标题 然后将该信息复制到 PowerPoint 演示文稿中 问题是标题有特殊字符 但我正在处理的图像文件没有特殊字符 例如 标题构成将 JPEG 加载到图片容器的路径的一部分P k jpg 但标题叫p k 我希望
  • DirectLineJS 接收机器人回复的副本

    我使用 DirectLineJS 通过网站进行自定义网络聊天进行通信 我使用的是 Microsoft github 发布的格式https github com Microsoft BotFramework DirectLineJS http
  • 如何保护已编译的Java类?

    我知道 这里已经提出了很多类似的问题 我不是在问我是否可以保护我编译的 Java 类 因为显然你会说 不 你不能 我问保护 Java 类免遭反编译的最著名方法是什么 如果您知道该领域的任何研究或学术论文 请告诉我 另外如果您使用过一些方法或