当前位置: 首页 > 知识库问答 >
问题:

编译前使文件模糊的程序?

吕德业
2023-03-14

我正在使用ForgeGradle(我的世界锻造改装平台)。

我想在发布之前混淆我的mod,但是Forge平台的性质不允许我在编译后简单地运行像ProGuard这样的程序(使用定义的库)。

为什么?结构是这样的:Mod-

由于Minecraft使用自己的模糊类,并且ForgeGradle编译器不会直接模糊Mod的代码以适应Minecraft的代码,因此不可能使用MC。使用ProGuard时将jar用作库。编译的Forge Mod实际上是由Forge在运行时使用SRG名称解码的。这背后的逻辑不容易解释,所以我只想指出:我不能混淆。jar以适合库的方式。

所以我想-我可以在伪造编译之前,使用mod的代码(.java文件)并重命名所有属于我的字段/方法/类。是否有一个软件,可以让我选择的数量。java文件并以一种不重新命名不属于它们的引用的方式“混淆”它们?

编辑(更多解释):

Mod的代码有三种状态:开发、编译、运行。

我将尝试给出一个例子:假设有一个反编译方法。在布雷艇内。jar及其编译(模糊)版本如下所示:bca。aa(),并且所有包都丢失(展平)。

在mod的代码(.java)开发状态中,为了引用它,我们只需制作:itemswird。onHit()

当我们编译mod时,调用将如下所示(. class): ItemSword.func_ab4234()-这就是我所说的SRG。

现在当mod加载到游戏中时,forge将把“ItemSwarm”翻译成“bca”,把“func_ab4234()”翻译成“aa()”

由于这个原因,我甚至不能添加适当的库-没有。我总是会收到(在ProGuard中)NoClassDefFound警告,我不能忽略它(它会使编译崩溃)。

所以在这个编辑之后——是否仍然有可能与ProGuard混淆(考虑到我不能分配“好”库)?

共有2个答案

段阳夏
2023-03-14

如果我有你的问题,你想混淆你自己的代码,而不是其他任何东西。这就是ProGuard真正擅长的。假设您在packagescom中创建了类。foocom。条形码。您可以使用这个简单的ProGuard命令来混淆您自己的类:

-keep class !com.foo.**,!com.bar.** { *; }

它告诉ProGuard不要混淆任何不属于com的类的成员。foocom。条形码。

如果出现NoClassDef错误,则说明添加了错误的库。我猜您正在使用某种IDE(可能是eclipse)。查看项目引用的库,以找到正确的库类路径(例如jar文件)。您基本上需要找到用于编译代码的类路径,ProGuard也会这样做,而且一切都应该正常。

厉坚
2023-03-14

你试过proguard选项了吗?http://proguard.sourceforge.net/manual/usage.html

e、 g.对于可序列化类和其他内容,请将其放在proguard配置中(如果愿意,还可以保留完整的类):

<!-- With this code serializable classes will be backward compatible -->
<keepnames implements="java.io.Serializable"/>

<!-- or for native access:-->
<keepclasseswithmembernames>
 <method access="native"/>
</keepclasseswithmembernames>

<!--Preserve all public classes, and their public and protected fields and methods.--> 
<keep access="public">
 <field access="public protected"/>
 <method access="public protected"/>
</keep>
 类似资料:
  • 本文向大家介绍Delphi2007编译的程序在Win7下图标模糊的解决办法,包括了Delphi2007编译的程序在Win7下图标模糊的解决办法的使用技巧和注意事项,需要的朋友参考一下 使用Delphi2007编译GUI程序的时候会发现在Win7的状态栏中显示的程序图标非常模糊,如果原始的图标清晰度怎么样。造成这样结果的原因是因为Delphi2007生成的icon图标只符合XP等系统的要求,没有对W

  • 输入一个模块相对来说是一个比较费时的事情,所以Python做了一些技巧,以便使输入模块更加快一些。一种方法是创建 字节编译的文件 ,这些文件以.pyc作为扩展名。字节编译的文件与Python变换程序的中间状态有关(是否还记得Python如何工作的介绍?)。当你在下次从别的程序输入这个模块的时候,.pyc文件是十分有用的——它会快得多,因为一部分输入模块所需的处理已经完成了。另外,这些字节编译的文件

  • 我使用JSF Mojarra 2.2.8和PrimeFaces 5.1。对于文本输入,我使用primeface编辑器,我想用ajax自动上传插入的文本。 编辑器仅支持onChange事件。任何建议,我如何可以让一个模糊事件为编辑器工作,以减少请求数?我尝试了这个解决方案(Primeface Editor和ajax在blur上提交),但事件从未被触发。谢谢。

  • 我想混淆我的web应用程序构建为WAR存档,因为这个敏感的应用程序第一次部署在我们的数据中心之外。我尝试使用Proguard GUI工具来混淆输入war,包括UI应用程序所需的所有服务jar,以及其他外部依赖项。虽然Proguard在一些警告下成功运行,例如库类[javax.servlet.unavailableException]的定义重复,但输出war不包含类,而是包含库jar和web.xml

  • 我知道如何混淆可执行的jar文件,因为它有一个主类。但是我正在尝试创建我的API(已经完成了),我只需要混淆代码。问题是,每当我尝试使用Proguard(一个众所周知的java模糊器)模糊jar文件时,它就会给我一个与“keep”有关的错误。我正在从Proguard运行proguard-gui,在Eclipse中,我将项目导出为一个普通的jar文件(非可执行文件),并试图混淆该jar文件。另外,我

  • 问题内容: 我已经使用构建了一个简单的可执行程序。 我已经将代码编译成静态二进制程序。 我想反编译输出二进制文件并获取Go源代码。 这有可能吗? 问题答案: 没有工具可以执行此操作,并且由于Go程序已编译为机器代码,因此它们所包含的信息不足,无法将其转换回Go代码。但是,仍然可以使用标准拆卸​​技术。