`
chenming47
  • 浏览: 92631 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

java各种代码混淆方法的优缺点

阅读更多

目前对java代码进行混淆的方式主要有两种:


1、在生成class文件的过程中(即编译过程),通过修改编译器的代码生成过程,对编译器生成的中间代码进行混淆,最后生成class文件。典型的是jocky,但目前最新的jocky为1.0.3版本,不支持jdk1.6


2、在生成class文件后,对class文件进行混淆。典型的是proguard、retroguard。但由于并不是所有的class文件都需要混淆,所以将面临复杂的配置工作(配置哪些类需要混淆,哪些类需要混淆),并且程序一旦修改,配置工作又要重新进行。

 
3、次外还考虑到一种混淆方式(严格意义上已经不算是混淆):对生成class文件进行加密处理,在classloader加载class文件时进行解密操作。

以下是网络上一篇文章的摘要:

写道
目前业界有不少商业的甚或是开源的混淆编译器,但它们普遍存在一些这样或者那样的问题。一般而言,现有的混淆器都是对编译好的 class文件进行混淆,这样就需要编译和混淆两个步骤。而事实上,并不是所有的符号都需要混淆。如果你开发的是一个类库,或者某些类需要动态装载,那些公共API(或者说:那些被publish出来的API)就必须保留符号不变,只有这样,别人才能使用你的类库。现有的混淆器提供了GUI或脚本的方式来对那些需要保留的符号名称进行配置,但如果程序较大时,配置工作将变得很复杂,而程序一旦修改,配置工作又要重新进行。某些混淆器能够调整字节码的顺序,使反编译更加困难,但笔者经历过混淆之后的程序运行出错的情况。
而Jocky与其它混淆编译器最大的不同之处在于:它是直接从源码上做文章,也就是说编译过程本身就是一个混淆过程。
Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,修改了其中的代码生成过程,对编译器生成的中间代码进行混淆,最后再生成class文件,这样编译和混淆只需要一个步骤就可以完成。另外可以在源程序中插入 符号保留指令 来控制哪些符号需要保留,将混淆过程与开发过程融合在一起,不需要单独的配置。

 

分享到:
评论
1 楼 石头茨 2013-07-02  
你好,除了jocky能够比较好的混淆编译器之外,还有没有其他的工具,能够很好的完成这个事情啊?

相关推荐

    淘宝登录java源码-JsPatronum:JavaScript代码混淆器

    代码混淆代码混淆(Obfuscated code)是指将程序代码转换成一种功能上等价,但是难于阅读和理解的形式。 Android 的 apk 就默认使用了代码混淆,使得反编译 APK 变得比较困难。 争议 观点一前端代码公开,没有秘密,...

    java类文件混合加密算法的研究与分析_邹煜.caj

    代码混淆技术、数字水印技术。本文对Java类文件的保护现状及保护技术进行 深入研宄后,在前人研宄的基础上分析总结现有的Java类文件保护技术的主要 算法和优缺点。传统的:Fava类文件加密方式有...

    java面试题目与技巧1

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java面试题及技巧4

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java面试题以及技巧

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java反编译工具

    直接通过exe 即可运行文件,对于混淆的class文件也可进行反编译。 可以指定到一个目录,然后通过文件夹树,查看class 对应的java。 唯一的缺点就是 导出的java文件 代码前面有注释。

    Java理论与实践:修复Java内存模型1

    关于同步和线程安全的许多底层混淆是Java内存模型的一些难以直觉到的细微差别。本文还介绍了JMM有一些严重的缺点,如果正确地编写并发的类太困难的话,那么许多并发的类不能按预期工作,并且这是平台中的一个缺点。...

    java面试题及技巧3

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java面试题以及技巧6

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java8集合源码分析-java8:java8

    1.Java是面向对象的语言,不能像函数式语言那样嵌套定义方法。 2.Java的匿名内部类只能存在于创建它的线程中,不能运行在多线程中,无法充分利用多核的硬件优势。 3.匿名内部类的缺点还有: 3.1 语法相对复杂。 3.2 ...

    几款极品的javascript压缩混淆工具

    有三种版本,.Net,Perl,和WSH版本,Windows平台下WSH脚本比较适合,命令行操作,有详细的说明第三款,Saltstorm出品的ESC这款工具可自定义压缩级别和是否进行混淆,当然缺点也不是没有,压缩效果一般,而且要求每...

    encrypt-decrypt:Java、Go、Python、NodeJS、PHP、JavaScript AESCBCPKCS7Padding 加解密

    简单的加密设计: 用密钥对原文做字节代替、行移动、列混淆、加轮秘钥 优点: 安全、快速(加解密运算速度快、资源消耗少、消耗时间少)、支持二进制 缺点: 发送方和接收方协定秘钥,双方保存好秘钥安全不被泄漏,...

    asp.net知识库

    动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...

    JavaScript高级教程

    第 1 章 JavaScript 是什么...............................................1 3 1.1 历史简述.........................3.5.5 动态原型方法..............................................82 3.5.6 混合工厂方式........

Global site tag (gtag.js) - Google Analytics