我的情况和这个相似..。我有一个正在用Java开发的游戏,我已经采取了几个步骤来保护数据安全(比如在保存本地文件时使用加密)。然而,有一件事是我朋友推荐的,那就是混淆代码,使其混乱,而且不可读,这样如果有人决定打开它--这对他们来说几乎是无用的。
我的问题分成几部分..。首先也是最重要的,作为一个普遍的想法,这实际上会降低人们破坏/窃取/复制我的游戏的可能性,还是模糊代码的影响可以忽略不计?第二,如果它是值得做的-有任何的性能影响吗?
编辑-我主要是为了保护代码,防止游戏中作弊,因为客户端的一些文件可以被操纵,以获得不公平的优势。保护实际的二进制文件是我以后必须研究的一个选项;目前,我只是在考虑如何使代码库本身不容易提取和更改。
发布于 2015-06-05 16:30:41
首先,很抱歉我写了这么多的文字。
第二,我完全同意对你链接到的问题的回答
远离代码流改变的“混淆器”。
(我会称它们为“扰码器”,但这将是英语的情况。)
第三,严格地说,纯粹的混淆(如类和成员重命名)通常会产生更短的名称(参见“我的世界”中的a,b,.)比您选择的要短,所以由于类文件较短,加载类可能会稍微快一点,而且由于比较短字符串所需的时间更短,所以成员查找也会稍微快一点,这可能会使非静态方法调用的性能略有提高。
但是,这种改进很可能是可以忽略不计的,而且如果JVM执行任何形式的查找缓存,我根本不会期望性能有任何改善。
但是,只有类和成员重命名,我也不会期望性能下降。
至于它是否能阻止人们做坏事。也许有一点。
非常懒惰的程序员和新手肯定会被吓跑。
然后,这取决于通过破解您的代码可以获得多少收益。
如果黑客个人可以从破解你的游戏(即超速攻击)中获得一些东西,我想说,发生这种情况的可能性要比没有许可证或其他什么的付费游戏的可能性大得多。
这还取决于有多少代码和您需要更改多少代码。
如果您有大约25个或更少的类,我认为对于一个有点高级的开发人员来说,这并不难。
但与“我的世界”一样庞大的应用却是另一回事。
但以“我的世界”为例,我最终学会了在模糊的代码中找到自己的方法,因为每次发布后,去混淆列表的生成时间都会越来越长,我只想保持我的mods更新。
大胆地说,我要说的是,破解一个模糊的java应用程序要比破解它的非混淆要难得多,而且我当然不是唯一一个。
另外,有些混淆器完全随机地选择名称,因此发布更新时可能会有完全不同的名称。
人们可能会认为这会使黑客们望而却步,但一旦您大致了解了哪个类代表了一个版本中的内容,您就可以通过搜索字符串和导入的类或该类的成员,轻松地在下一个版本中找到该类,然后就可以连接到其他混淆类。
(例如,在“我的世界”中,我总是从手工艺管理器开始,因为它有独特的"###"字符串,而且由于它大量使用块和项,所以我可以马上找到许多类。)
但你确实有一件事是站在你这边的:名字碰撞。
再次使用“我的世界”,我意识到有些文件不能仅仅被编译--不是因为反编译程序生成的无效代码,而是因为a被用作类名和字段名,所以字段优先(否则我可以使用a和this.a --注意,只有当您的混淆器移除包并将所有类放在顶层时才能工作!),所以除了反射之外,没有其他方法引用类,这就是我在某些情况下所做的事情。在其他情况下(性能是一个问题),我创建了一个具有不同名称的“假”类,可以对其进行编译,然后修改生成的字节码以更改名称。
因此,尽管这仍然是可能的,但这肯定是一项很大的努力。
如果我必须在数百次碰撞中工作,我很可能很快就会放弃。
另外,我了解到,至少在Oracle的Java实现中,版本6到8中的字节码中的“无效”名称似乎并不是一个问题,至少在某种程度上不是问题。
在我的一个项目中,我需要在运行时创建字节码,并且我需要生成的类包含一个名称不会与类可能包含的任何其他方法发生冲突的方法,所以我第一次尝试使用一个无效字符(*)作为它的名称,到目前为止(它已经发布了两年了),我还没有收到任何关于拒绝它的错误报告。
我不知道是否存在支持无效名称的混淆器,但是有了这样的名称,您当然可以生成代码,这些代码在反编译时不仅看起来很糟糕,而且甚至不能编译。我想就像
Some thing = field.method().whatever.array[index];转化为:
! ? = &.%().+.*[/];看起来很整洁,不是吗?我相信编译器会喜欢的。*邪恶的笑容*
(但即使它奏效了,我也不能推荐它,因为它实在不是很好的练习。)
在这个级别上,您的代码仍然可以破解,但可能不会比机器代码多得多,所以您应该是安全的。
TL;DR
发布于 2015-06-05 14:55:19
代码混淆最容易通过专用工具(如护卫 )自动完成。
根据先前的讨论的说法,使用ProGuard对代码的性能影响可以忽略不计。
https://stackoverflow.com/questions/30669348
复制相似问题