首页 / 知识
关于混淆:您是否混淆了商业Java代码?
2023-04-12 06:32:00

Do you obfuscate your commercial Java code?我想知道是否有人在自己的商业产品上使用了商业/免费的Java混淆器。 我只知道一个项目在发布的ant构建步骤中实际上具有混淆步骤。 你会混淆吗? 如果是这样,为什么还要混淆? 这真的是保护代码的一种方法,还是对开发人员/管理人员来说是一种更好的感觉? 编辑:好的,我的意思是确切的:您是否为保护IP(您的算法,产品中投入的工作)而感到困惑? 我不会因为安全原因而混淆,这感觉不对。 因此,我只是在谈论保护您的应用程序代码不受竞争对手的侵害。 @staffan有一个好处:
如果进行混淆,请远离混淆器,这些混淆器会通过更改代码流和/或添加异常块来修改代码,从而使代码难以分解。为了使代码不可读,通常只需更改方法,字段和类的所有名称即可。 避免更改代码流的原因是,其中一些更改使JVM无法有效地优化代码。实际上,它实际上会降低应用程序的性能。 我认为混淆的旧方法(古典方法)正在逐渐失去其意义。 因为在大多数情况下,经典的混淆器破坏了堆栈跟踪(不利于支持客户) 如今,重点不是保护某些算法,而是保护敏感数据:API登录名/密码/密钥,负责许可的代码(盗版仍在这里,尤其是西欧,俄罗斯,亚洲,恕我直言),广告帐户ID等 。
有趣的事实:我们在Strings中拥有所有这些敏感数据。 实际上,字符串大约占我们应用程序逻辑的50-80%。 但是现在,"字符串加密"功能仅在商业混淆器中可用,例如:Allatori,Zelix KlassMaster,Smokescreen,Stringer Java混淆工具包,DashO。
N.B. 我将proguard用于JavaME开发。它不仅非常擅长使jar文件更小(对于移动设备必不可少),而且还可以作为一种更好的方式来执行特定于设备的代码,而无需诉诸于IDE不友好的预处理工具(如天线)。 例如。
这将被编译,混淆,并且类文件最终就像您编写的那样结束:
因此,您可以使用多种代码来解决JVM /库实现中的制造商错误,而无需扩展最终的可执行类文件。 我相信有些商业混淆器在某些情况下也可以将类文件合并在一起。这很有用,因为您拥有的类越多,zip(jar)文件中的开销就越大。 我使用ProGuard并强烈推荐它。尽管混淆确实可以保护您的代码不受偶然攻击者的侵害,但其主要好处是,可以最大限度地减少删除未使用的类和方法并将所有标识符缩短为1或2个字符的影响。 我今年花了一些时间尝试各种Java混淆器,而我发现其中的一个比其他混淆器要先进得多:JBCO。不幸的是,它的设置有点麻烦,并且没有GUI,但是就其产生的混淆程度而言,它是无与伦比的。您尝试将其馈入一个简单的循环,并且如果您的反编译器在尝试加载它时不会崩溃,则会看到以下内容:
您不知道Java拥有goto吗?好吧,JVM支持它们=) 我认为在大多数情况下,混淆是没有意义的:即使使用完整的源代码,通常也很难弄清楚到底是什么意思(假设没有注释,并且没有局部变量的有意义的名称,当重新编??译时就是这种情况) -从字节码生成源)。混淆只是装饰蛋糕。
我认为开发人员,尤其是他们的经理往往会过度夸大有人看到源代码的风险。好的反编译器可以生成漂亮的源代码,但使用它并不是一件容易的事,并且相关的成本(更不用说法律风险)高得足以使这种方法很少有用。我只是反编译用于调试闭源供应商产品的问题(数据库抽象层中的死锁,呃)。 我想这实际上取决于您的Java代码是什么,它如何分布以及您的客户是谁。我们不会混淆任何事情,因为我们从来没有发现过特别出色的东西,而且它往往会带来比其价值更大的麻烦。如果某人可以访问我们的JAR文件,并且具有能够在其中进行嗅探的知识,那么与剥夺我们的源代码相比,他们可以做的事情要多得多。 |
最新内容
相关内容
python中获取路径的三种方法
python中获取路径的三种方法,工作,代码,情况,培训,下来,路径,文件,也就是,桌面,目录,python中获取路径总结下来分为三种情况:1、获取工作目录python中什么是类方法
python中什么是类方法,培训,方法,实例,静态,定义,参数,函数,内部,变量,属性,python中的类方法,指的是在类中定义的函数,函数在类的内部称为方法python怎么调用方法
python怎么调用方法,系统,培训,方法,参数,法名,定义,列表,实例,以上,函数,python调用的方法类的方法的定义1、定义一个类deffun_name(self,..python对象与方法的区别是什么
python对象与方法的区别是什么,地址,数据,培训,对象,函数,类型,字符串,方法,表示,身份,python使用对象模型来存储数据,也就是说构造任何类型的python调用方法必须实例化么
python调用方法必须实例化么,代码,培训,方法,静态,工厂,参数,程序,对象,实例,定义,python类中的实例方法和静态方法,在调用时,是有区别的。静态python有map方法吗
python有map方法吗,培训,位置,数据,函数,列表,序列,参数,元素,方法,使用方法,python中的map:map()会根据提供的函数对指定序列做映射。第一个python有哪些方法可以解压文件?
python有哪些方法可以解压文件?,工具,系统,工作,培训,文件,文件夹,方法,窗体,不同于,以下内容,在Python学习和日常使用中,很容易造成文件过大。python函数与方法的区别是什么
python函数与方法的区别是什么,培训,函数,方法,区别,对象,以上,方式,更多,内容,python中函数和方法的区别1、函数要手动传self,方法不用传selpython如何调用类中的方法
python如何调用类中的方法,培训,入口,名字,文件,方法,参数,路径,函数,文件夹,下面,python调用类中的方法:调用同一个类中的方法首先类中的方法python字符串切片的方法是什么
python字符串切片的方法是什么,培训,字符串,索引,切片,开头,方括号,时候,方法,冒号,首尾,获取Python字符串中的某字符可以使用索引:lang=pythopython子类怎么调用父类方法
python子类怎么调用父类方法,培训,代码,初始化,方法,函数,示例,时调,定义,对象,以上,python中类的初始化方法是__init__(),因此父类子类的初始python类自带方法吗
python类自带方法吗,培训,方法,里面,实例,也就是说,下面,对象,以上,之后,参数,python中的类,创建好之后,里面是没有方法的,也就是说,类并没有自带