java保护源代码,源代码保护方案

如何防止JAVA程序源代码被反编译

我们都知道JAVA是一种解析型语言,这就决定JAVA文件编译后不是机器码,而是一个字节码文件,也就是CLASS文件。而这样的文件是存在规律的,经过反编译工具是可以还原回来的。例如Decafe、FrontEnd,YingJAD和Jode等等软件。下面是《Nokia中Short数组转换算法》

成都创新互联自2013年起,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站建设、外贸网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元河西做网站,已为上家服务,为河西各地企业和个人服务,联系电话:18980820575

类中Main函数的ByteCode:0 ldc #162 invokestatic #185 astore_16 return其源代码是:short [] pixels = parseImage("/ef1s.png");

我们通过反编译工具是可以还原出以上源代码的。而通过简单的分析,我们也能自己写出源代码的。

第一行:ldc #16

ldc为虚拟机的指令,作用是:压入常量池的项,形式如下ldc index这个index就是上面的16,也就是在常量池中的有效索引,当我们去看常量池的时候,我们就会找到index为16的值为String_info,里面存了/ef1s.png.

所以这行的意思就是把/ef1s.pn作为一个String存在常量池中,其有效索引为16。

第二行:2 invokestatic #18

invokestatic为虚拟机指令,作用是:调用类(static)方法,形式如下

invokestatic indexbyte1 indexbyte2

其中indexbyte1和indexbyte2必须是在常量池中的有效索引,而是指向的类型必须有Methodref标记,对类名,方法名和方法的描述符的引用。

所以当我们看常量池中索引为18的地方,我们就会得到以下信息:

Class Name : cp_info#1

Name Type : cp_info#19

1 和19都是常量池中的有效索引,值就是右边中的值,再往下跟踪我就不多说了,有兴趣的朋友可以去JAVA虚拟机规范。

这里我简单介绍一下parseImage(Ljava/lang/String;)[S 的意思。

这就是parseImage这个函数的运行,我们反过来看看parseImage的原型就明白了

short [] parseImage(String)

那么Ljava/lang/String;就是说需要传入一个String对象,而为什么前面要有一个L呢,这是JAVA虚拟机用来表示这是一个Object。如果是基本类型,这里就不需要有L了。然后返回为short的一维数组,也就是对应的[S。是不是很有意思,S对应着Short类型,而“[”对应一维数组,那有些朋友要问了,两维呢,那就“[[”,呵呵,是不是很有意思。

好了,调用了函数,返回的值要保存下来吧。那么就是第三行要做的事情了。

公司的源代码应该怎么保护,防止泄密呢?

首先要明确,哪些数据是核心机密数据,不能让普通员工轻易接触到的,即使是研发型公司的代码,也是会划分等级的,要在保证员工的工作效率的前提下,对代码实施保护措施。

下面简单谈一下我的看法,讲讲如何防止员工的代码泄露。

首先要明确以下两点:

1、不影响被防范的成员(比如新程序员)工作。让其能正常运行、调试、查看日志等。

2、对核心代码封死,需要保护的部分不可见。

再来看看有哪些具体做法:

签署保密协议

对源代码分级,清楚知道什么是需要保护的

为版本管理服务器上的工程设置读取密码

源码版本控制,按照职责和权限进行划分

确保架构做分层

屏蔽USB和光驱

每人两台电脑,分别连接不同网络

封闭式开发、禁止上互联网

使用加密软件

使用加水印功能

使用云桌面技术

实施网络隔离

……

当然,每个公司会根据自身的实际情况来选择一种适合的方法,前提是不影响员工工作效率,不能让员工产生抵触情绪。公司的价值都是员工创造的,所以一定要秉着以人为本的原则,让员工对公司忠诚,减少离职,这才是利益最大化的方法。

在以上这些方法中,个人较为推荐的是使用云桌面或者实施网络隔离,通过云桌面实现数据不落地,防止被拷贝;实施网络隔离可以有效阻断数据的外泄。之前看过《企业网络隔离建设指南》,感觉还不错,推荐给大家参考一下。

Java项目源码为什么要做代码混淆

一般走代码混淆就是为了保护源代码,让别人不至于通过反编译轻易的获得源代码

java程序能不公开源代码吗

Java程序的源代码很容易被别人偷看,只要有一个反编译器,任何人都可以分析别人的代码。本文讨论如何在不修改原有程序的情况下,通过加密技术保护源代码。

一、为什么要加密?

对于传统的C或C++之类的语言来说,要在Web上保护源代码是很容易的,只要不发布它就可以。遗憾的是,Java程序的源代码很容易被别人偷看。只要有一个反编译器,任何人都可以分析别人的代码。Java的灵活性使得源代码很容易被窃取,但与此同时,它也使通过加密保护代码变得相对容易,我们唯一需要了解的就是Java的ClassLoader对象。当然,在加密过程中,有关Java Cryptography Extension(JCE)的知识也是必不可少的。

有几种技术可以“模糊”Java类文件,使得反编译器处理类文件的效果大打折扣。然而,修改反编译器使之能够处理这些经过模糊处理的类文件并不是什么难事,所以不能简单地依赖模糊技术来保证源代码的安全。


分享标题:java保护源代码,源代码保护方案
文章分享:http://pwwzsj.com/article/hshdeh.html