CN107944233A - 一种可执行文件的保护方法和装置 - Google Patents
一种可执行文件的保护方法和装置 Download PDFInfo
- Publication number
- CN107944233A CN107944233A CN201711304325.9A CN201711304325A CN107944233A CN 107944233 A CN107944233 A CN 107944233A CN 201711304325 A CN201711304325 A CN 201711304325A CN 107944233 A CN107944233 A CN 107944233A
- Authority
- CN
- China
- Prior art keywords
- additional data
- executable file
- encrypted
- file
- code section
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 22
- 230000001681 protective effect Effects 0.000 claims description 18
- 238000010586 diagram Methods 0.000 description 5
- 239000000243 solution Substances 0.000 description 3
- 230000006378 damage Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000002633 protecting effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6209—Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
Abstract
本申请公开了一种可执行文件的保护方法和装置,其中方法包括:获取可执行文件的附加数据;利用预设的加密代码段对所述附加数据进行加密;将预设的挂钩代码段、所述加密代码段和预设的解密代码段,作为壳代码增加至所述可执行文件中,利用经过所述加密的附加数据替换所述可执行文件中的附加数据;所述挂钩代码段用于在所述可执行文件启动时,利用所述解密代码段对文件中的附加数据进行解密,利用解密后的附加数据替换所启动的可执行文件中的附加数据,在所述可执行文件退出时,利用所述加密代码段对所述附加数据进行加密,利用加密后的附加数据替换所退出的可执行文件中的附加数据。采用本发明,可以提高软件的安全性。
Description
技术领域
本发明涉及软件保护技术,特别是涉及一种可执行文件的保护方法和装置。
背景技术
软件作为一种特殊的产品,由于其数字化的特征,从问世起就一直遭受盗版的困扰。盗版的存在不仅给软件开发者造成了巨大的损失,也极大的阻碍了整个软件行业的发展。
目前的软件保护方式通常是对被保护的程序代码进行处理,以阻止非法用户对程序代码的反编译。例如,加壳作为一种软件保护方式,是将被保护的程序代码转换为虚拟机代码。程序运行时,虚拟机将模拟程序执行,进入和离开虚拟机都有高级代码混淆。该种软件保护方式,通过将虚拟机配合代码混淆可以达到很好的保护效果,尤其是开发者的私有逻辑,同时,采用高级混淆可充分干扰静态分析,并且应用程序的解压缩含有动态密码,可以让一切自动脱壳工具失效,有效的阻止.Net、PE程序的直接反编译。
上述软件保护方式虽然能可以较大程度地阻止软件的非法使用,但是在实际应用中,仍存在数据泄露及破坏的问题。
发明内容
有鉴于此,本发明的主要目的在于提供一种可执行文件的保护方法和装置,可以提高软件的安全性。
为了达到上述目的,本发明提出的技术方案为:
一种可执行文件的保护方法,包括:
获取可执行文件的附加数据;
利用预设的加密代码段对所述附加数据进行加密;
将预设的挂钩代码段、所述加密代码段和预设的解密代码段,作为壳代码增加至所述可执行文件中,利用经过所述加密的附加数据替换所述可执行文件中的附加数据;
其中,所述挂钩代码段用于在所述可执行文件启动时,利用所述解密代码段对文件中的附加数据进行解密,利用解密后的附加数据替换所启动的可执行文件中的附加数据,在所述可执行文件退出时,利用所述加密代码段对所述附加数据进行加密,利用加密后的附加数据替换所退出的可执行文件中的附加数据。
较佳地,所述加密代码段通过调用预设的保护装置对所述附加数据进行加密。
较佳地,所述保护装置为精锐5加密锁。
较佳地,所述获取可执行文件的附加数据包括:
确定所述可执行文件中最后一个区块表的文件偏移和区块表的文件大小;
根据所述文件偏移和区块表的文件大小,计算所述附加数据的起始地址;
读取从所述起始地址开始到文件末尾的文件数据,得到所述附加数据。
本发明还提供了一种可执行文件的保护装置,包括:
附加数据获取单元,用于获取可执行文件的附加数据;
附加数据处理单元,用于利用预设的加密代码段对所述附加数据进行加密;
文件保护单元,用于将预设的挂钩代码段、所述加密代码段和预设的解密代码段,作为壳代码增加至所述可执行文件中,利用经过所述加密的附加数据替换所述可执行文件中的附加数据;其中,所述挂钩代码段用于在所述可执行文件启动时,利用所述解密代码段对文件中的附加数据进行解密,利用解密后的附加数据替换所启动的可执行文件中的附加数据,在所述可执行文件退出时,利用所述加密代码段对所述附加数据进行加密,利用加密后的附加数据替换所退出的可执行文件中的附加数据。
较佳地,所述加密代码段通过调用预设的保护装置对所述附加数据进行加密。
较佳地,所述保护装置为精锐5加密锁。
较佳地,所述附加数据获取单元,用于确定所述可执行文件中最后一个区块表的文件偏移和区块表的文件大小;根据所述文件偏移和区块表的文件大小,计算所述附加数据的起始地址;读取从所述起始地址开始到文件末尾的文件数据,得到所述附加数据。
综上所述,本发明提出的可执行文件的保护方法和装置,将对可执行文件中的附加数据进行加密保护处理,经过保护后的可执行文件运行时,需要先利用壳代码对附加数据进行解密,运行结束时再对附加数据进行加密,如此,可以增加可执行文件的反编译和分析的难度,从而可以大大提高软件的安全性。
附图说明
图1为本发明实施例的方法流程示意图;
图2为Windows系统的PE文件结构示意图;
图3为本发明实施例的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
通过研究分析,申请人发现:对于可执行文件中用来辅助分析可执行文件的至关重要的数据结构——附加数据,现有的软件保护方案并不对其进行处理,比如加壳技术,通常是直接把附加数据放在可执行文件的末尾。这样,附加数据就很容易被编译和分析出来,从而可以分析出执行文件的保护逻辑,造成数据的泄露及破坏。
基于此,本发明的核心思想是:将可执行文件中的附加数据加密后放在文件末尾,这样,经过保护处理后的可执行文件在运行时,需要临时对附加数据解密,可行性文件运行结束时再次对附加数据进行加密,从而增加了反编译和分析的难度,大大提高了软件的安全性。
图1为本发明实施例提供的可执行文件保护方法的流程示意图,如图1所示,该实施例主要包括:
步骤101、获取可执行文件的附加数据。
本步骤中,需要对可执行文件进行分析,获取文件中的附加数据,以便在后续步骤中进一步对附加数据进行加密处理,增加可执行文件的反编译和分析的难度。
具体地,可以采用下述方法获取可执行文件的附加数据:
步骤1011、确定所述可执行文件中最后一个区块表的文件偏移和区块表的文件大小。
本步骤的具体实现方法为本领域技术人员所已知,在此不再赘述。
步骤1012、根据所述文件偏移和区块表的文件大小,计算所述附加数据的起始地址。
具体地,将文件偏移与区块表的文件大小相加即得到文件中附加数据的起始地址。
步骤1013、读取从所述起始地址开始到文件末尾的文件数据,得到所述附加数据。
步骤102、利用预设的加密代码段对所述附加数据进行加密。
本步骤用于对附加数据进行加密处理,以提高可执行文件的安全性,防止非法用户通过对附加数据的编译和分析,分析出执行文件的保护逻辑,造成数据的泄露及破坏。
较佳地,所述加密代码段可以通过调用预设的保护装置对所述附加数据进行加密。
较佳地,所述保护装置可以为加密锁,如精锐5加密锁,但在实际应用中,并不限于此,只要是能对附加数据进行加密的装置即可。
步骤103、将预设的挂钩代码段、所述加密代码段和预设的解密代码段,作为壳代码增加至所述可执行文件中,利用经过所述加密的附加数据替换所述可执行文件中的附加数据。
所述挂钩代码段,用来挂钩访问可执行文件附加数据的代码(如CreateFile和ReadFile)和文件退出代码(如windows下的ExitProcess函数),具体地,用于在所述可执行文件启动时,利用所述解密代码段对文件中的附加数据进行解密,利用解密后的附加数据替换所启动的可执行文件中的附加数据,在所述可执行文件退出时(即检测到文件的退出函数执行时),利用所述加密代码段对所述附加数据进行加密,利用加密后的附加数据替换所退出的可执行文件中的附加数据,以确保可执行文件执行结束后的安全性。
本步骤中,将利用经过加密的附加数据替换可执行文件中的附加数据,同时,将相应的用于在可执行文件启动和退出时,对附加数据进行解密和加密处理的壳代码增加到可执行文件中,以确保可执行文件运行时能正常的使用附加数据,以及运行结束后,能再次对附加数据进行加密。
这里,所述挂钩代码段、加密代码段和解密代码段将作为壳代码增加至可执行文件中,如此,在可执行文件启动和退出时,将利用这些壳代码对文件中的附加数据进行解密和加密处理。通常,这些代码可以增加在文件的尾部。
在实际应用中,所述挂钩代码段、加密代码段和解密代码段,可以采用c代码和部分汇编编写,这部分代码称为壳代码,采用普通编译器进行编译即可,具体编写方法为本领域技术人员所掌握,在此不再赘述。
通过上述方案可以看出,本发明可以实现对可执行文件的附加数据的加密,从而可以提高可执行文件的安全性。在实际应用中,本发明可以和现有的文件保护工具相结合,例如,该可执行文件可以为经过加壳处理后的可执行文件。这样,在此基础上,进一步对附加数据进行保护处理,可以大大提高可执行文件的安全。
下面以微软Windows系统下32位的PB编译的PE文件为例,阐述利用本发明的上述实施例来对可执行文件中附加数据进行保护的具体过程。PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)。PE文件被称为可移植的执行体是PortableExecute的全称,常见的EXE、DLL、OCX、SYS、COM都是PE文件。
PE文件结构如图2所示,主要包括区段(Section)、区段表(Section Table)、PE头部(PE Header)和DOS头部(DOS Header)。PE文件各个部分的详细定义可参阅微软windows系统的联机帮助,在此不做过多介绍。
首先,确定可执行文件中附加数据所在的位置。
根据文件的Dos Header的e_lfanew找到IMAGE_NT_HEADER数据结构,根据IMAGE_NT_HEADER中的IMAGE_FILE_HEADER中的NumberOfSections找到文件中的区块表的数目,根据IMAGE_NT_HEADER中的数据结构IMAGE_OPTIONAL_HEADER32中的ImageBase找到可执行文件的默认装入地址,IMAGE_FILE_HEADER后面为区块表,根据最后一个区块表的文件偏移及区块表的文件大小计算附加数据的起始位置,对于本实施例来说,最后一个区块表的文件偏移为0x6600,区块大小为0x600,因此附加数据的起始地址为0x6600+0x600,即为0x6C00,结束地址为文件末尾。
然后,利用加密代码段,对文件中的附加数据进行加密,本实施例中调用精锐5加密锁进行加密,精锐5加密锁为保护装置。
接下来,将挂钩代码段、加密代码段、解密代码段,作为壳代码注入到原来的可执行文件中,构建成新的经过保护的可执行文件。对于本实施例来说,挂钩代码段所挂钩的访问附加数据的代码为CreateFile和ReadFile等,文件退出的代码为ExitProcess。
经过保护的可执行文件运行时,具体步骤如下:
可执行文件运行启动时,由挂钩代码段通过解密代码段对文件中的附加数据解密,并写入到可执行文件中,可执行文件退出时,挂钩代码段利用加密代码段再次将附加数据加密,写入可执行文件中。
图3为与上述方法实施例相对应的一种可执行文件的保护装置结构示意图,如图3所示,该装置包括:
附加数据获取单元301,用于获取可执行文件的附加数据。
附加数据处理单元302,用于利用预设的加密代码段对所述附加数据进行加密。
文件保护单元303,用于将预设的挂钩代码段、所述加密代码段和预设的解密代码段,作为壳代码增加至所述可执行文件中,利用经过所述加密的附加数据替换所述可执行文件中的附加数据;其中,所述挂钩代码段用于在所述可执行文件启动时,利用所述解密代码段对文件中的附加数据进行解密,利用解密后的附加数据替换所启动的可执行文件中的附加数据,在所述可执行文件退出时,利用所述加密代码段对所述附加数据进行加密,利用加密后的附加数据替换所退出的可执行文件中的附加数据。
较佳地,所述加密代码段通过调用预设的保护装置对所述附加数据进行加密。
较佳地,所述保护装置为精锐5加密锁。
较佳地,所述附加数据获取单元301,用于确定所述可执行文件中最后一个区块表的文件偏移和区块表的文件大小;根据所述文件偏移和区块表的文件大小,计算所述附加数据的起始地址;读取从所述起始地址开始到文件末尾的文件数据,得到所述附加数据。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种可执行文件的保护方法,其特征在于,包括:
获取可执行文件的附加数据;
利用预设的加密代码段对所述附加数据进行加密;
将预设的挂钩代码段、所述加密代码段和预设的解密代码段,作为壳代码增加至所述可执行文件中,利用经过所述加密的附加数据替换所述可执行文件中的附加数据;
其中,所述挂钩代码段用于在所述可执行文件启动时,利用所述解密代码段对文件中的附加数据进行解密,利用解密后的附加数据替换所启动的可执行文件中的附加数据,在所述可执行文件退出时,利用所述加密代码段对所述附加数据进行加密,利用加密后的附加数据替换所退出的可执行文件中的附加数据。
2.根据权利要求1所述的方法,其特征在于,所述加密代码段通过调用预设的保护装置对所述附加数据进行加密。
3.根据权利要求2所述的方法,其特征在于,所述保护装置为加密锁。
4.根据权利要求1所述的方法,其特征在于,所述获取可执行文件的附加数据包括:
确定所述可执行文件中最后一个区块表的文件偏移和区块表的文件大小;
根据所述文件偏移和区块表的文件大小,计算所述附加数据的起始地址;
读取从所述起始地址开始到文件末尾的文件数据,得到所述附加数据。
5.一种可执行文件的保护装置,其特征在于,包括:
附加数据获取单元,用于获取可执行文件的附加数据;
附加数据处理单元,用于利用预设的加密代码段对所述附加数据进行加密;
文件保护单元,用于将预设的挂钩代码段、所述加密代码段和预设的解密代码段,作为壳代码增加至所述可执行文件中,利用经过所述加密的附加数据替换所述可执行文件中的附加数据;其中,所述挂钩代码段用于在所述可执行文件启动时,利用所述解密代码段对文件中的附加数据进行解密,利用解密后的附加数据替换所启动的可执行文件中的附加数据,在所述可执行文件退出时,利用所述加密代码段对所述附加数据进行加密,利用加密后的附加数据替换所退出的可执行文件中的附加数据。
6.根据权利要求5所述的装置,其特征在于,所述加密代码段通过调用预设的保护装置对所述附加数据进行加密。
7.根据权利要求6所述的装置,其特征在于,所述保护装置为加密锁。
8.根据权利要求5所述的装置,其特征在于,所述附加数据获取单元,用于确定所述可执行文件中最后一个区块表的文件偏移和区块表的文件大小;根据所述文件偏移和区块表的文件大小,计算所述附加数据的起始地址;读取从所述起始地址开始到文件末尾的文件数据,得到所述附加数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711304325.9A CN107944233A (zh) | 2017-12-11 | 2017-12-11 | 一种可执行文件的保护方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711304325.9A CN107944233A (zh) | 2017-12-11 | 2017-12-11 | 一种可执行文件的保护方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107944233A true CN107944233A (zh) | 2018-04-20 |
Family
ID=61945448
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711304325.9A Pending CN107944233A (zh) | 2017-12-11 | 2017-12-11 | 一种可执行文件的保护方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107944233A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101447013A (zh) * | 2008-12-29 | 2009-06-03 | 北京飞天诚信科技有限公司 | 软件运行方法、装置及系统 |
CN101447009A (zh) * | 2008-12-29 | 2009-06-03 | 北京飞天诚信科技有限公司 | 软件安装方法、装置及系统 |
CN103065069A (zh) * | 2013-01-28 | 2013-04-24 | 电子科技大学 | 一种基于壳技术的软件保护方法 |
CN103077332A (zh) * | 2012-12-28 | 2013-05-01 | 飞天诚信科技股份有限公司 | 一种运行含有自校验的加壳程序的方法和装置 |
CN104318135A (zh) * | 2014-10-27 | 2015-01-28 | 中国科学院信息工程研究所 | 一种基于可信执行环境的Java代码安全动态载入方法 |
CN105303074A (zh) * | 2015-10-15 | 2016-02-03 | 江苏敏捷科技股份有限公司 | 一种保护Web应用程序安全的方法 |
-
2017
- 2017-12-11 CN CN201711304325.9A patent/CN107944233A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101447013A (zh) * | 2008-12-29 | 2009-06-03 | 北京飞天诚信科技有限公司 | 软件运行方法、装置及系统 |
CN101447009A (zh) * | 2008-12-29 | 2009-06-03 | 北京飞天诚信科技有限公司 | 软件安装方法、装置及系统 |
CN103077332A (zh) * | 2012-12-28 | 2013-05-01 | 飞天诚信科技股份有限公司 | 一种运行含有自校验的加壳程序的方法和装置 |
CN103065069A (zh) * | 2013-01-28 | 2013-04-24 | 电子科技大学 | 一种基于壳技术的软件保护方法 |
CN104318135A (zh) * | 2014-10-27 | 2015-01-28 | 中国科学院信息工程研究所 | 一种基于可信执行环境的Java代码安全动态载入方法 |
CN105303074A (zh) * | 2015-10-15 | 2016-02-03 | 江苏敏捷科技股份有限公司 | 一种保护Web应用程序安全的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10176324B2 (en) | System, method and computer program product for protecting software via continuous anti-tampering and obfuscation transforms | |
CN104463002B (zh) | 一种加固apk的方法和装置以及apk加固客户端和服务器 | |
CN104318135B (zh) | 一种基于可信执行环境的Java代码安全动态载入方法 | |
JP5775738B2 (ja) | 情報処理装置、セキュアモジュール、情報処理方法、および情報処理プログラム | |
US8090959B2 (en) | Method and apparatus for protecting .net programs | |
US8205096B2 (en) | Software license embedded in shell code | |
CN101872404B (zh) | 一种保护Java软件程序的方法 | |
CN105095771B (zh) | 一种共享目标文件的保护方法及装置 | |
US20160275019A1 (en) | Method and apparatus for protecting dynamic libraries | |
US10482221B2 (en) | Protecting a computer program against reverse engineering | |
US8225290B2 (en) | Systems and methods for regulating execution of computer software | |
WO2013170724A1 (zh) | 安卓系统中java应用程序的保护方法 | |
US20170323120A1 (en) | Method and apparatus for dynamic executable verification | |
CN101957903A (zh) | 一种保护类文件的方法和装置 | |
US20110271350A1 (en) | method for protecting software | |
Cappaert et al. | Towards tamper resistant code encryption: Practice and experience | |
CN109858203A (zh) | 一种Android平台应用的安全防护方法、装置及存储介质 | |
Tychalas et al. | SGXCrypter: IP protection for portable executables using Intel's SGX technology | |
Gelbart et al. | CODESSEAL: Compiler/FPGA approach to secure applications | |
CN104504310A (zh) | 基于壳技术的软件保护方法和装置 | |
CN107944233A (zh) | 一种可执行文件的保护方法和装置 | |
JP6215468B2 (ja) | プログラム保護装置 | |
KR101300256B1 (ko) | 동적분석 및 정적분석 방지를 통한 소프트웨어 실행파일 보호 방법, 그리고 그에 따른 소프트웨어 실행파일 보호 프로그램을 기록한 컴퓨터로 판독가능한 기록매체 | |
CN114491425A (zh) | 一种操作系统内核层的Web程序安全加固防反编译方法和装置 | |
CN112434265B (zh) | 一种程序代码的保护方法、装置及存储介质 |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180420 |