[关闭]
@zhongdao 2019-03-21T19:54:27.000000Z 字数 2906 阅读 3142

Java代码混淆相关调研

代码混淆


前言

为了保护代码不被反编译,看出源代码,代码混淆是一种技术,也有一些开源和商业的工具可以使用。

关于Java反编译

与C ++相比,Java程序的反编译是一项更简单的任务,因此可以完全自动化。类层次结构,高级语句,类名,方法和字段 - 所有这些都可以 从标准编译器发出的类文件中检索javac。任何具有普通编程技能的人都可以 下载Java反编译器,通过它运行应用程序并阅读源代码,就像它是开源的一样。

题外话

就我个人而言,编写软件的人更值得被正确对待,现代的软件工程非常复杂,破解并能阅读代码,进行功能性的修改,是一件不容易的事情。代码开源对所有人都有帮助,往往开源的代码留存下来,保持价值反而是一件有意义的事,封闭的代码或者混淆的代码因为没有人读懂,而意义和价值不大
,有人维护,代码又能读懂反而更值得尊敬。
所以,长久以来,开源代码形成了良好的开源环境,让所有人能在一定基础上进行进一步的开发,对所有人都有好处。

不过,在商业领域,代码混淆,尤其是Java的代码混淆对于想保护自己代码不被逆向工程并人为阅读的话,具有一定的意义和作用。

混淆的意义

在软件开发中,混淆是创建难以让人理解的源代码或机器代码的故意行为。像模糊的自然语言,它可以使用不必要的迂回表达来撰写报告。程序员可能会故意混淆代码以隐藏其目的(通过默默无闻的安全性)或其中嵌入的逻辑或隐含值,主要是为了防止篡改,阻止逆向工程,甚至作为拼图或阅读源代码的人的娱乐挑战。这可以手动完成或使用自动化工具完成,后者是工业上的首选技术。

混淆的优点

自动代码混淆有几个优点,使其在许多平台上流行并广泛使用。在某些平台(例如Java。 Android,和.NET)上,反编译器可以从可执行文件或库中反向设计源代码。自动代码混淆的一个主要优点是,它通过使程序的逆向工程变得困难且经济上不可行来帮助保护软件中包含的商业秘密(知识产权)。其他优点可能包括帮助保护许可机制和未经授权的访问,以及缩小可执行文件的大小。基于传统的加密攻击(称为“中间人”),反编译有时被称为人为攻击”。

混淆的缺点

虽然混淆可能使程序的读取,写入和逆向工程变得困难和耗时,但它不一定会使其变得不可能。一些反病毒软件,例如AVG AntiVirus,也会在用户手持混淆的代码登陆网站时提醒用户,因为混淆的目的之一可能是隐藏恶意代码。但是,一些开发人员可能会采用代码混淆来减少文件大小或提高安全性。普通用户可能不希望他们的防病毒软件提供关于其他无害代码的警报,尤其是来自可信公司的代码,因此这样的功能实际上可能会阻止用户使用合法软件。

混淆软件

存在各种工具来执行或协助代码混淆。这些包括由学者创建的实验研究工具,业余爱好者工具,专业人士编写的商业产品以及开源软件。还存在尝试执行逆向变换的反混淆工具。

虽然大多数商业混淆解决方案通过转换Java 和.NET使用的程序源代码,或平台无关字节码来工作,但也有一些直接在编译的二进制文件上工作。

Java代码混淆

Java后端代码混淆应用实践
https://yq.aliyun.com/articles/285599?spm=5176.10695662.1996646101.searchclickresult.65c74077PSgNeD

成熟的Java混淆工具很多,如下表:

名称 授权 主页
yGuard LGPL http://www.yworks.com/products/yguard
ProGuard GPLv2 https://www.guardsquare.com/en/proguard
Facebook ProGuard分支 GPLv2 https://github.com/facebook/proguard
DashO Commercial https://www.preemptive.com/products/dasho
Allatori Commercial http://www.allatori.com
Stringer Commercial https://jfxstore.com
Java Antidecompiler Commercial http://www.bisguard.com/help/java/
Zelix KlassMaster Commercial http://www.zelix.com

对于开源软件,通过google trends比较,很显然ProGuard更加活跃,我们选择ProGuard。

Java代码混淆:ProGuard

ProGuard是最受欢迎的Java字节码优化器。它使您的Java和Android应用程序缩小了90%,速度提高了20%。ProGuard还通过模糊类,字段和方法的名称来提供对逆向工程的最小保护。

ProGuard可以免费使用,以处理您的应用程序,无论是否商业化。ProGuard代码本身受版权保护,并根据GNU通用公共许可证(GPL)第2版的条款进行分发。用户手册也受版权保护,只能以原始形式与未修改的代码一起重新分发。

ProGuard通过使用无意义的名称重命名类,字段和方法来混淆Java和Android程序,从而使最终应用程序的逆向工程变得更加困难。

用法

要运行ProGuard,只需键入:

  1. java -jar proguard.jar options ...

ProGuard手册

https://www.guardsquare.com/en/products/proguard/manual

参考资料

ProGuard
https://en.wikipedia.org/wiki/ProGuard_(software)
https://www.guardsquare.com/en/products/proguard

混淆软件wiki
https://en.wikipedia.org/wiki/Obfuscation_(software)

Perl 代码混淆实例
https://en.wikipedia.org/wiki/Just_another_Perl_hacker
https://perl.plover.com/obfuscated/

Java 代码混淆软件
https://curlie.org/Computers/Programming/Languages/Java/Development_Tools/Obfuscators

facebook/proguard
https://github.com/facebook/proguard?spm=a2c4e.11153940.blogcont285599.17.1f2218beKYQ5fX

防逆向技术简史:从代码混淆到虚拟机保护技术
https://yq.aliyun.com/articles/213930?spm=5176.10695662.1996646101.searchclickresult.65c74077PSgNeD

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注