CN112131536B - 一种防止Java程序被反编译的方法 - Google Patents

一种防止Java程序被反编译的方法 Download PDF

Info

Publication number
CN112131536B
CN112131536B CN202010424628.XA CN202010424628A CN112131536B CN 112131536 B CN112131536 B CN 112131536B CN 202010424628 A CN202010424628 A CN 202010424628A CN 112131536 B CN112131536 B CN 112131536B
Authority
CN
China
Prior art keywords
client
password
class
server
executable file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010424628.XA
Other languages
English (en)
Other versions
CN112131536A (zh
Inventor
蔡维德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianmin Qingdao International Sandbox Research Institute Co ltd
Beijing Tiande Technology Co ltd
Original Assignee
Tianmin Qingdao International Sandbox Research Institute Co ltd
Beijing Tiande Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tianmin Qingdao International Sandbox Research Institute Co ltd, Beijing Tiande Technology Co ltd filed Critical Tianmin Qingdao International Sandbox Research Institute Co ltd
Priority to CN202010424628.XA priority Critical patent/CN112131536B/zh
Publication of CN112131536A publication Critical patent/CN112131536A/zh
Application granted granted Critical
Publication of CN112131536B publication Critical patent/CN112131536B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明提出一种防止Java程序被反编译的方法,可以使Java程序安全运行,防止通过反编译被窃取源代码。方法内容涉及:(1)可执行文件远程加载;(2)可执行文件网络密文传输(3)随机密码(4)随机跳转链(5)反编译工具检查与禁用。

Description

一种防止Java程序被反编译的方法
技术领域
本发明涉及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),若该跳转类包含密码数据,则进入下一步;
(7)客户端获取到密码后,向服务端发送执行文件获取请求,服务端返回使用密码加密后的可执行文件;
(8)客户端将获取到的可执行文件解密,并通过类加载器加载到JVM运行,程序启动完毕。
进一步地,所述步骤(4)中的临时密码,每次客户端启动后服务端都将生成新的临时密码,该密码只可被一个客户端使用一次,一旦被使用,立即失效,不同客户端之间不可进行密码共享。
进一步地,服务端在可执行文件发送完毕后或客户端启动成功后销毁临时密码,保证密码仅使用一次。
进一步地,所述步骤(5)中,服务端为每个客户端每次启动请求生成的跳转链长度和顺序都是不固定的。即服务端向客户端发送跳转类的次数不定,每个跳转类有可能指向新的跳转类或直接返回密码,若指向新的跳转类,则每个跳转类具体的指向对象也不固定。例如,在某实施例中,可能存在跳转顺序为Goto-1跳转至Goto-7跳转至Goto-3然后返回密码,也可能存在跳转顺序为Goto-7跳转至Goto-2然后返回密码。
本发明提出一种防止Java程序被反编译的方法,使得客户端的JVM成为安全黑盒,class文件存放在服务端,保证源代码的安全,黑客无法对其进行反编译。本发明提出的方法能够有效的解决Java程序可能存在的源代码反编译和源代码泄露问题,保证了程序开发者的合法权益。
附图说明
图1为本发明提出的一种防止Java程序被反编译的方法流程示意图;
图2为本发明实施例中客户端和服务端的简化交互示意图。
具体实施案例
在以下的叙述中,为了使读者更好的理解本申请而提出了许多技术细节,但是,本领域的普通技术人员可以理解,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也是本申请各权利要求所要求保护的技术方案。
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的实施方式作进一步地详细描述。
如图2一种典型的客户端/服务端架构模式,Java编译好的字节码class被存放在服务端,当有需要的时候客户端会进行远程加载并运行。加载过程中服务端向客户端传送密文的class文件和密码,一个服务端可以同时服务于多个客户端,每个客户端可以运行在物联网上任何地方。
流程如下:
(1)服务端进行初始化,缓存好需要的提供用于下载的class,并封装;
(2)客户端启动程序,开始向服务端申请远程代码,服务端返回一个类加载器,该加载器不仅仅用于远程加载代码,还嵌入了反反编译代码、反后门代码等;
(3)反反编译代码运行,检测运行环境是否包含反编译代码和工具,扫描检测是否包含后门程序窃取源码。如果包含其中一项则立即结束程序运行;
(4)客户端和服务端进入跳转链阶段,该阶段是为了迷惑黑客使用程序代理类加载器骗取密码,所以跳转链被设置成不规律的且程度不固定的多个跳转类,直到最后才能获取真正的密码并交付给客户端;
(5)当步骤(4)顺利完成后此时类加载器已经成功获取了本次远程加载的密码,可以开始进行远程代码加载,服务端会返回一个使用了密码加密后的class文件包,客户端的类加载器获取后使用密码进行解密,再加载到JVM中运行;
(6)完成以上全部步骤后服务端销毁本地存储的密码,并且此时中内存中已经存在可运行的class,客户端可正常运行。

Claims (1)

1.一种防止Java程序被反编译的方法,其步骤为:
(1)需要运行软件一方作为客户端,软件的可执行文件保存在服务端,其中所述可执行文件为JAR包和/或class文件;
(2)所述客户端启动后向所述服务端发送启动请求程序,所述服务端生成类加载器实例并返回给所述客户端;
(3)所述客户端启动所述类加载器实例,并激活所述类加载器实例中的反反编译程序,进行反编译工具检查与禁用,其中所述步骤(3)包括:
(3a)禁用Java虚拟机的内存监控,防止通过恶意拷贝内存文件方式获取可执行文件进行反编译;
(3b)禁止所述反编译工具的运行;
(3c)解析所述客户端的程序是否被恶意改写或存在恶意代码,若有则中断所述客户端的启动;
(4)所述客户端向所述服务端发送获取密码请求,所述密码用于解密所述可执行文件,为一次性临时密码,由所述服务端生成,每次所述客户端启动后,所述服务端都将生成新的所述一次性临时密码,所述一次性临时密码只可被一个所述客户端使用一次,一旦被使用,立即失效,不同的所述客户端之间不可进行密码共享;
(5)所述服务端向所述客户端发送随机的跳转类,所述跳转类可能指向下一个所述跳转类,形成跳转链,也可能包含用于解密所述可执行文件的密码;
(6)所述客户端接收所述跳转类,若所述跳转类指向下一个所述跳转类,则继续向所述客户端发送跳转请求并重复步骤(5),若所述跳转类包含所述密码,则进入下一步;
(7)所述客户端获取到所述密码后,向所述服务端发送所述可执行文件的获取请求,所述服务端返回使用所述密码加密后的所述可执行文件;
(8)所述客户端将获取到的所述可执行文件解密,并通过所述类加载器加载到Java虚拟机运行,所述Java程序启动完毕;
其中,每次所述客户端启动后,所述服务端都将生成新的密码,所述服务端在发送完毕所述可执行文件后或所述客户端启动成功后销毁临时密码,保证所述密码仅会被使用一次;所述服务端为每个所述客户端每次所述启动请求程序生成的所述跳转链的长度和顺序都是不固定的,即所述服务端向所述客户端发送跳转类的次数不定,每个所述跳转类指向新的跳转类或直接返回所述密码,若指向新的所述跳转类,则每个所述跳转类具体的指向对象不固定。
CN202010424628.XA 2020-05-19 2020-05-19 一种防止Java程序被反编译的方法 Active CN112131536B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010424628.XA CN112131536B (zh) 2020-05-19 2020-05-19 一种防止Java程序被反编译的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010424628.XA CN112131536B (zh) 2020-05-19 2020-05-19 一种防止Java程序被反编译的方法

Publications (2)

Publication Number Publication Date
CN112131536A CN112131536A (zh) 2020-12-25
CN112131536B true CN112131536B (zh) 2021-07-20

Family

ID=73851784

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010424628.XA Active CN112131536B (zh) 2020-05-19 2020-05-19 一种防止Java程序被反编译的方法

Country Status (1)

Country Link
CN (1) CN112131536B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101763257A (zh) * 2009-09-22 2010-06-30 浙江数芳科技有限公司 java类预处理通信***及java类预处理方法
CN102890758A (zh) * 2012-10-11 2013-01-23 北京深思洛克软件技术股份有限公司 一种保护可执行文件的方法及***
CN106796639A (zh) * 2014-09-26 2017-05-31 迈克菲股份有限公司 用于可信执行环境的数据挖掘算法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008186134A (ja) * 2007-01-29 2008-08-14 Takatoshi Yanase オブジェクトをサーバから読込み実行するシステム、プログラム及びこれを記録した記録媒体、前記システムを提供する提供手段を含むサーバ。
CN102004876B (zh) * 2009-12-31 2012-07-18 郑州信大捷安信息技术股份有限公司 可容忍非信任组件的安全终端加固模型及加固方法
CN102346834A (zh) * 2011-11-25 2012-02-08 武汉钢铁(集团)公司 Java应用软件加密保护的方法
CN103218549B (zh) * 2012-01-19 2015-11-25 阿里巴巴集团控股有限公司 一种Java源代码加解密的方法及装置
CN104268444A (zh) * 2014-08-25 2015-01-07 浪潮电子信息产业股份有限公司 一种云OS Java源代码保护方法
CN105184119B (zh) * 2015-10-09 2017-10-24 南京工程学院 一种软件的安全保护方法
CN106250771A (zh) * 2016-07-27 2016-12-21 北京邮电大学 一种针对安卓程序代码的加密方法
CN107103214B (zh) * 2017-04-06 2019-12-10 海信集团有限公司 一种应用于Android***的应用程序反调试方法及装置
CN107229848A (zh) * 2017-06-12 2017-10-03 北京洋浦伟业科技发展有限公司 一种代码加固方法和装置
CN110532737A (zh) * 2019-08-29 2019-12-03 深圳前海环融联易信息科技服务有限公司 Jar包加密管理方法、装置、计算机设备及存储介质
CN110968874B (zh) * 2019-11-28 2023-04-14 腾讯科技(深圳)有限公司 一种漏洞检测方法、装置、服务器及存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101763257A (zh) * 2009-09-22 2010-06-30 浙江数芳科技有限公司 java类预处理通信***及java类预处理方法
CN102890758A (zh) * 2012-10-11 2013-01-23 北京深思洛克软件技术股份有限公司 一种保护可执行文件的方法及***
CN106796639A (zh) * 2014-09-26 2017-05-31 迈克菲股份有限公司 用于可信执行环境的数据挖掘算法

Also Published As

Publication number Publication date
CN112131536A (zh) 2020-12-25

Similar Documents

Publication Publication Date Title
CN107977553B (zh) 移动应用程序的安全加固的方法及装置
US6463538B1 (en) Method of software protection using a random code generator
JP5689472B2 (ja) 悪意ある実行環境内での静的および動的攻撃からJavaバイトコードを保護するシステムおよび方法
US20160203087A1 (en) Method for providing security for common intermediate language-based program
CN110866226B (zh) 一种基于加密技术的java应用软件版权保护方法
KR101391982B1 (ko) 안드로이드 어플리케이션의 디컴파일 방지를 위한 암호화 방법
KR101490047B1 (ko) 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법
US20110276805A1 (en) System and Method for Third Party Creation of Applications for Mobile Appliances
CN111656345B (zh) 启用容器文件中加密的软件模块
US20030097577A1 (en) Software protection method utilizing hidden application code in a protection dynamic link library object
CN102576391A (zh) 嵌入在shell代码中的软件许可
CN110489942B (zh) 一种WebAssembly文件的处理方法及***
CN112100582B (zh) 一种应用强对称加密保护软件分发安全的方法
WO2003090021A2 (en) Security framework for protecting rights in computer software
CN102346834A (zh) Java应用软件加密保护的方法
CN103473488B (zh) 一种android应用程序防盗版的方法及***
CN111159658A (zh) 字节码处理方法、***、装置、计算机设备和存储介质
CN112613037A (zh) 一种代码校验方法及装置
CN112733094A (zh) 一种Java应用程序的安全保护方法
CN112131536B (zh) 一种防止Java程序被反编译的方法
CN117313046A (zh) 一种代码加固方法、代码加载方法、设备及介质
CN114357391A (zh) 数据加、解密方法及计算机存储介质
Xu et al. Toward a secure android software protection system
CN112130863B (zh) 客户端程序防止反汇编保护方法
CN115129361B (zh) 一种Java应用程序的安全加固方法及***

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant