谈谈java程序代码保护及license设计
理论上讲,不存在牢不可破的漏洞,只是时间和成本问题。通常我们认为的不可破解,说的是破解需要难以接受的时间和成本。
对于java程序来说,class文件很容易被反编译,所以理论上而言,对java程序做license限制,无法真正起到保护软件被盗窃的作用。
但是,如果增加被反编译的成本,或者增加被反编译后能读懂源码的成本,也能从一定程度上起到保护软件被盗用的目的。
针对不同的应用程序,可以使用不同的方法。
1. Android应用程序
由于Android应用程序时需要下载才能被安装的,所以用户很容易可以得到程序包,且可以进行反编译。
所以只能通过增加被反编译后读懂源码的成本来达到保护程序被盗用的目的,通常的做法是进行代码混淆。
2. Web应用程序
(1)自己部署
Web应用程序通常部署在服务器端,用户能直接获取到程序源码的风险相对较小,所以就可以避免被反编译。
(2)交付给用户部署
如果想限制软件系统的功能或者使用时间,可以通过license授权的方式实现。但是,license加密和解密验证都必须在服务器端。
########### 理论上没有任何意义,只要web程序提供给用户,同样可以被反编译绕开license验证过程。###########
########### 如果一定要做license限制,一定要对license解密代码进行混淆处理。############
3. 关于RSA加密
公钥加密数据长度最大只能为117位,私钥加密用于数字签名,公钥验证。
通常,不直接使用RSA加密,特别是加密内容很大的时候。
使用RSA公钥加密AES秘钥,再通过AES加密数据。
【参考】
https://www.guardsquare.com/en
http://www.cnblogs.com/cr330326/p/5534915.html ProGuard代码混淆技术详解
http://blog.csdn.net/ljd2038/article/details/51308768 ProGuard详解
http://oma1989.iteye.com/blog/1539712 Java给软件添加License
http://infinite.iteye.com/blog/238064 利用license机制来保护Java软件产品的安全
http://jasongreen.iteye.com/blog/60692 也论java加壳
http://jboss-javassist.github.io/javassist/ Javassist
http://www.cnblogs.com/duanxz/archive/2012/12/28/2837197.html java中使用公钥加密私钥解密原理实现license控制
http://ju.outofmemory.cn/entry/98116 使用License3j实现简单的License验证
谈谈java程序代码保护及license设计的更多相关文章
- Java程序版权保护解决方案
通常C.C++等编程语言开发的程序都被编译成目标代码,这些目标代码都是本机器的二进制可执行代码.通常所有的源文件被编译.链接成一个可执行文件.在这些可执行文件中,编译器删除了程序中的变量名称.方法名称 ...
- 谈谈Java程序员进阶的那些知识和方向
谈谈Java程序员进阶的那些知识和方向 记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackover ...
- 最近开始研究PMD(一款采用BSD协议发布的Java程序代码检查工具)
PMD是一款采用BSD协议发布的Java程序代码检查工具.该工具可以做到检查Java代码中是否含有未使用的变量.是否含有空的抓取块.是否含有不必要的对象等.该软件功能强大,扫描效率高,是Java程序员 ...
- Kotlin 喧嚣过后,谈谈 Java 程序员未来的出路
http://blog.jobbole.com/111422 Java 生态圈 Java 的生态环境开放.自由,在Sun/Oracle.Google.Apache.Eclipse基金会等各大厂商,还有 ...
- 谈谈JAVA程序的反编译
如今JAVA语言在全世界范围正如火如荼般的流行,它广范地应用在INTERNET的数据库.多媒体.CGI.及动态网页的制作方面.1999年在美国对JAVA程序员的需求量首次超过C++! 最近分析一些 ...
- 《Java程序性能优化》之设计优化
豆瓣读书:http://book.douban.com/subject/19969386/ 第一章 Java性能调优概述 1.性能的参考指标 执行时间: CPU时间: 内存分配: 磁盘吞吐量: 网络吞 ...
- 寻找两个数组中的公共元素Java程序代码
package lianxi; import java.util.*; public class UnionSearch { public static void main(String[] args ...
- 在java程序代码中打开文件
class TEST { public static void main(String[] args){ System.out.println("He ...
- 如何保护java程序不被反编译
Java是一种 跨平台的.解释型语言 Java 源代码编译中间“字节码”存储于class文件中.Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如变量名.方法名 等.因此 ...
随机推荐
- 【BZOJ4408】[FJOI2016]神秘数(主席树)
[BZOJ4408][FJOI2016]神秘数(主席树) 题面 BZOJ 洛谷 题解 考虑只有一次询问. 我们把所有数排个序,假设当前可以表示出的最大数是\(x\). 起始\(x=0\). 依次考虑接 ...
- 「SCOI2016」美味 解题报告
「SCOI2016」美味 状态极差无比,一个锤子题目而已 考虑每次对\(b\)和\(d\)求\(c=d \ xor \ (a+b)\)的最大值,因为异或每一位是独立的,所以我们可以尝试按位贪心. 如果 ...
- day20
20.01 IO流(IO流概述及分类) 1.IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 字节流:字节流可以操作任何数据,计算机中任何数据都 ...
- Go 语言 HTTP Server 源码分析
http://www.codeceo.com/go-http-server-code.html
- poj3630 Phone List
spy on一下,发现是trie裸题,结果一交就T... 然后把cin改成scanf就A了... trie的空间一定要开足,要不然RE #include <cstdio> #include ...
- 【P2303】Longge的问题
题目大意:求\[\sum\limits_{i=1}^ngcd(n,i)\] 题解:发现 gcd 中有很多是重复的,因此考虑枚举 gcd. \[\sum\limits_{i=1}^ngcd(n,i)=\ ...
- win32: WM_PAINT 实现双缓冲缓图
相关参考资料: GDI下实现双缓冲 - http://jingyan.baidu.com/article/e73e26c0f8df2424acb6a76e.html <Win32_19>用 ...
- 跟我一起用node-express搭建一个小项目(mongodb)[二]
我的小项目主要是会用到MongoDB. 呵呵,我也是现学现卖. 都说小公司十八般武艺样样稀疏,没有办法啊! 兵来兵挡,将来将挡!自己是个兵呢?还是一个将呢! 没有公司培养,就自己培养自己呗.差的远一点 ...
- (递推)codeVs1011 && 洛谷P1028 数的计算
题目描述 Description 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1. 不 ...
- pstack跟踪进程栈
一:简介 这个命令可以显示每个进程的栈跟踪.pstack命令必须由相应进程的宿主或root运行.可以使用pstack来确定进程挂起的位置.此命令允许使用唯一选项就是进程的PID 这个命令在排查进程问题 ...