[发明专利]一种防止Java程序被反编译的方法有效
申请号: | 202010424628.X | 申请日: | 2020-05-19 |
公开(公告)号: | CN112131536B | 公开(公告)日: | 2021-07-20 |
发明(设计)人: | 蔡维德 | 申请(专利权)人: | 北京天德科技有限公司;天民(青岛)国际沙盒研究院有限公司 |
主分类号: | G06F21/14 | 分类号: | G06F21/14 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 102488 北京市房山区阎富*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 防止 java 程序 反编译 方法 | ||
本发明提出一种防止Java程序被反编译的方法,可以使Java程序安全运行,防止通过反编译被窃取源代码。方法内容涉及:(1)可执行文件远程加载;(2)可执行文件网络密文传输(3)随机密码(4)随机跳转链(5)反编译工具检查与禁用。
技术领域
本发明涉及Java源代码安全领域,特别涉及一种让Java程序可以安全运行,不会被反编译以窃取源码的方法设计。
背景技术
Java是一种面向对象编程的高级语言,活跃的Apache社区拥有最完善的技术框架,其高效、开源、易维护等特性成为大多项目的最佳选择。但也因为Java程序包容易被反编译的问题,许多非开源的商业软件在上线后被黑客恶意反编译,获取到源码后进行盗版使用,极大损害了软件开发者的利益,在源代码保护要求较高的项目中不占优势。
如何保证Java源码不被窃取,传统实现分两种方式。
第一种方案,给Java代码编译后得到class文件进行加密,客户获取的是一个密文的可执行JAR文件包,这样就能防止反编译工具反编译class文件。此方案并非绝对安全,由于是一个密文的JAR文件包,那么客户需要运行程序,必须得到对应的解密密码,获取密码有两种方式:
(1)把密码隐藏在JAR文件包里面的一个类加载器中,当客户运行JAR文件时,类加载器解密class文件得出正确的字节流,再生成类对象。
(2)在方案(1)上继续改进,将密码存放在远程服务器上,当类加载器运行时从远程服务上下载密码进行解密。
以上两种方案,都可以对类加载器进行反编译或者重写截获密码,一旦获取到密码,便可以对整个JAR文件进行反编译得到源代码。
第二个方案是对JAR文件进行代码混肴,此方案并没有对防止反编译起到任何作用,相反此方案可以允许被反编译,只是反编译出来的源代码是混乱的,不容易读懂,但是对于资深的技术专家也可以轻松通过重构获取源代码。
以上的两种方案虽然能在一定程度上阻碍了反编译操作,但对于技术专家或者黑客仍然没有一点效果。
因此本发明提出一种防止Java程序被反编译的方法,让Java程序可以安全地运行,同时保护程序的源代码不被其他人窃取。
发明内容
本发明提出一种防止Java程序被反编译的方法,主要解决Java class文件被反编译导致源代码泄露的问题。
本发明的方法步骤如下:
(1)需要运行软件一方作为客户端,软件的可执行文件如JAR包、class文件等保存在服务端;
(2)客户端启动后向服务端发送程序启动请求,服务端生成类加载器实例并返回给客户端;
(3)客户端启动类加载器,并激活类加载器中的反反编译程序,进行反编译工具检查与禁用,例如:
(3a)禁用JVM(Java Virtual Machine,Java虚拟机)内存监控,防止通过恶意拷贝内存文件方式获取可执行文件进行反编译;
(3b)禁止反编译工具运行;
(3c)解析客户端程序是否被恶意改写或存在恶意代码,若有则中断客户端的启动;
(4)客户端向服务端发送获取密码请求,该密码用于解密可执行文件,为一次性临时密码,由服务端生成;
(5)服务端向客户端发送随机跳转类Goto-n,该跳转类可能指向下一个跳转类,也可能包含用于解密可执行文件的密码;
(6)客户端接收跳转类,若该跳转类指向下一个跳转类,则继续向客户端发送跳转请求并重复步骤(5),若该跳转类包含密码数据,则进入下一步;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京天德科技有限公司;天民(青岛)国际沙盒研究院有限公司,未经北京天德科技有限公司;天民(青岛)国际沙盒研究院有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010424628.X/2.html,转载请声明来源钻瓜专利网。