CN103077333A - 一种Linux系统下软件代码保护方法 - Google Patents

一种Linux系统下软件代码保护方法 Download PDF

Info

Publication number
CN103077333A
CN103077333A CN2013100235816A CN201310023581A CN103077333A CN 103077333 A CN103077333 A CN 103077333A CN 2013100235816 A CN2013100235816 A CN 2013100235816A CN 201310023581 A CN201310023581 A CN 201310023581A CN 103077333 A CN103077333 A CN 103077333A
Authority
CN
China
Prior art keywords
code
address
memory headroom
protecting
array
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.)
Granted
Application number
CN2013100235816A
Other languages
English (en)
Other versions
CN103077333B (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.)
Beijing Institute of Technology BIT
Original Assignee
Beijing Institute of Technology BIT
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 Beijing Institute of Technology BIT filed Critical Beijing Institute of Technology BIT
Priority to CN201310023581.6A priority Critical patent/CN103077333B/zh
Publication of CN103077333A publication Critical patent/CN103077333A/zh
Application granted granted Critical
Publication of CN103077333B publication Critical patent/CN103077333B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Storage Device Security (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及一种在Linux操作系统下代码保护方法,属于软件保护领域。其步骤为:①指定拟保护代码;定义一个数组,记录系统库函数地址;将拟保护代码编译为关键代码库文件;并将其分为m个部分加密后存储于m个数据文件中。②申请一个内存空间m1,并记录该内存空间中第一个完整的内存页的起始地址p。③将内存空间m1中的完整内存页的属性设置为可读并可写并可执行。④当主程序需要调用拟保护代码时,申请一个内存空间m2;读取拟保护代码的密文到内存空间m2,并解密到内存空间m1中以p开始的内存中;把系统库函数地址赋值给内存空间m1中的pF数组;修正内存空间m1中被调用函数的地址。此时主程序调用拟保护代码。本发明提出的方法具有更好的安全性。

Description

一种Linux系统下软件代码保护方法
技术领域
本发明涉及一种在Linux操作系统下代码保护方法,属于软件保护技术领域。
背景技术
在通常情况下,Linux系统下编译器生成的代码以原始机器码的形态存在于可执行文件中,并在执行时由操作系统加载入内存执行。这就造成了安全隐患:一方面,攻击者可以通过调试器动态跟踪程序的执行,找到软件保护判断点,然后在可执行文件中寻找对应的机器码部分进行修改,以永久解除软件的保护;另一方面,攻击者可以通过反编译器对可执行文件中未修改的机器码进行反汇编得到软件的所有汇编代码,然后对其进行静态分析以找到软件的保护判断点,甚至将软件中重要的算法提取出来使用。
代码保护是针对破解软件技术而提出的软件保护方法。无论是动态跟踪还是静态分析,软件破解技术的最后步骤通常需要修改可执行文件中的机器码以永久解除软件保护。代码保护的基本思路是使程序代码不以原始机器码的形式保存在磁盘上,而是执行时在内存中恢复成机器码,使得破解者无法在保护后的可执行文件中找到并修改程序代码,更无法对其进行反编译,从而达到保护软件的目的。
在Linux系统中,每个内存页都是有其内存页属性,所述内存页属性为可读、可写、可执行或者无访问权限中的一种或几种;当具有多种属性时,各属性之间要保证无冲突。如果程序尝试在不允许这些权限的本地内存上操作,它将被SIGSEGV信号(Segmentation fault,段错误信号)终止。
在内存映射完成后,这些内存页属性仍可以被Linux系统中的mprotect系统函数所修改。mprotect系统函数的参数分别为内存空间的起始地址,内存空间的大小,新的内存页属性。所指定的内存空间必须包含整个内存页:区间地址必须和整个系统页大小对齐,而区间长度必须是内存页大小的整数倍。这些内存页的内存页属性被mprotect系统函数中的新的内存页属性替换。
目前在Linux系统,已有的代码保护方法有:软件加壳、自检测等。
目前Linux下代码保护的技术水平不高,无法有效地对抗攻击者的静态分析和动态跟踪。Linux平台下软件保护技术较之Win32平台下落后很多,不仅商用保护产品屈指可数,软件作者自己设计的保护也通常比较简单,这主要表现在缺乏反跟踪手段和代码保护手段。
发明内容
本发明的目的是为了解决目前已有Linux系统下的代码保护方法存在的不足,提出一种新的Linux系统下软件代码保护方法。
本发明的目的是通过以下技术方案实现的。
一种Linux系统下软件代码保护方法,用于对Linux系统下的软件代码进行保护。所述Linux系统下的软件代码包括主程序代码以及1个或多个被调用函数,采用本发明提出的代码保护方法对Linux系统下的软件代码进行保护,其操作过程为:
步骤一、加密和存储拟保护代码,具体为:
第1步:在被调用函数中指定拟保护代码,拟保护代码是以函数为单位的。
第2步:为拟保护代码定义一个数组(用符号pF表示),数组pF中的每个元素分别用来记录拟保护代码用到的一个系统库函数地址。将数组pF中元素的初始值设置为空。然后将拟保护代码用到的系统库函数的地址替换为数组pF中对应的元素值。
第3步:将拟保护代码编译为关键代码库文件。
第4步:将关键代码库文件分为m个部分,m大于等于1;再对m个部分加密后,分别存储于m个数据文件中。
步骤二、通过主程序申请一个内存空间(用符号m1表示),并记录该内存空间中第一个完整的内存页的起始地址(用符号p表示)。
步骤三、将步骤二申请的内存空间m1中的全部完整的内存页的属性设置为可读并可写并可执行。所述内存页的属性包括:可读、可写、可执行或者无访问权限中的一种或几种。
步骤四、当主程序需要调用拟保护代码时,其操作过程为:
第4.1步:通过主程序申请一个内存空间(用符号m2表示);从步骤一中所述m个数据文件中读取拟保护代码的密文到内存空间m2
第4.2步:对第4.1步中所述拟保护代码的密文进行解密,并将解密后的内容拷贝到步骤二中所述的内存空间m1中以p开始的内存中。
第4.3步:把关键代码库文件中用到的系统库函数地址赋值给内存空间m1中的pF数组。
第4.4步:修正内存空间m1中被调用函数的地址,即将当前的被调用函数地址加上p的值。
第4.5步:主程序调用拟保护代码。
经过上述步骤,即可实现Linux系统下的代码保护。
有益效果
本发明提出的方法与已有Linux操作系统下代码保护方法相比较,具有更好的安全性。本发明方法将拟保护代码的加密存储在一个或者多个数据文件中,在磁盘上没有明文的二进制文件,增加攻击的静态分析难度,因此提高了安全性。
具体实施方式
下面结合具体实施例对本发明方法进行进一步详细说明。
本实施例中有5个二进制文件:host、my1、my2、my3和my4,其中host为主程序;my1、my2、my3和my4为被调用函数。采用本发明提出的代码保护方法对Linux系统下的软件代码进行保护,其操作过程为:
步骤一、加密和存储拟保护代码,具体为:
第1步:在被调用函数中指定文件my1、my2和my4为拟保护代码。
第2步:为拟保护代码定义一个长整型数组pF,长度为200,数组pF中的每个元素分别用来记录拟保护代码用到的一个系统库函数地址。将数组pF中元素的初始值设置为空。然后将拟保护代码用到的系统库函数的地址替换为数组pF中对应的元素值。
my1中用到的系统库函数为:printf();scanf()。
my2中用到的系统库函数为:printf();scanf();read();write()。
my4中用到的系统库函数为:printf();scanf()read();lseek()。
长整型数组pF中的第一个元素用来记录printf()的地址;长整型数组pF中的第二个元素用来记录scanf()的地址;长整型数组pF中的第三个元素用来记录read()的地址;长整型数组pF中的第四个元素用来记录write()的地址;长整型数组pF中的第五个元素用来记录lseek()的地址。
第3步:将拟保护代码编译为关键代码库文件,关键代码库文件名为my.bin。
第4步:将关键代码库文件my.bin分为5个部分,再对5个部分加密后,分别存储于5个数据文件中,5个数据文件名分别为A、B、C、D、E。
步骤二、通过主程序host申请一个内存空间m1,并记录该内存空间中第一个完整的内存页的起始地址p。
步骤三、使用mprotect函数将步骤二申请的内存空间m1中的全部完整的内存页的属性设置为可读并可写并可执行,具体代码为:
mprotect(p,n*4096,PROT_READ|PROT_WRITE|PROT_EXEC);
其中,n表示内存空间m1中的全部完整的内存页的数目。
步骤四、当主程序host需要调用my2时,其操作过程为:
第4.1步:通过主程序host申请一个内存空间m2;从步骤一中所述5个数据文件A、B、C、D、E中读取拟保护代码的密文到内存空间m2
第4.2步:对第4.1步中所述拟保护代码的密文进行解密,并将解密后的内容拷贝到步骤二中所述的内存空间m1中以p开始的内存中。
第4.3步:把关键代码库文件my.bin中用到的系统库函数地址赋值给内存空间m1中的pF数组。
第4.4步:修正内存空间m1中被调用函数的地址,即将当前的被调用函数地址加上p的值。
第4.5步:主程序调用拟保护代码my2。
经过上述步骤,即可实现Linux系统下的代码保护。

Claims (1)

1.一种Linux系统下软件代码保护方法,其特征在于:其操作过程为:
步骤一、加密和存储拟保护代码,具体为:
第1.1步:在被调用函数中指定拟保护代码,拟保护代码是以函数为单位的;
第1.2步:为拟保护代码定义一个数组,用符号pF表示,数组pF中的每个元素分别用来记录拟保护代码用到的一个系统库函数地址;将数组pF中元素的初始值设置为空;然后将拟保护代码用到的系统库函数的地址替换为数组pF中对应的元素值;
第1.3步:将拟保护代码编译为关键代码库文件;
第1.4步:将关键代码库文件分为m个部分,m大于等于1;再对m个部分加密后,分别存储于m个数据文件中;
步骤二、通过主程序申请一个内存空间,用符号m1表示,并记录该内存空间中第一个完整的内存页的起始地址,用符号p表示;
步骤三、将步骤二申请的内存空间m1中的全部完整的内存页的属性设置为可读并可写并可执行;所述内存页的属性包括:可读、可写、可执行或者无访问权限中的一种或几种;
步骤四、当主程序需要调用拟保护代码时,其操作过程为:
第4.1步:通过主程序申请一个内存空间,用符号m2表示;从步骤一中所述m个数据文件中读取拟保护代码的密文到内存空间m2
第4.2步:对第4.1步中所述拟保护代码的密文进行解密,并将解密后的内容拷贝到步骤二中所述的内存空间m1中以p开始的内存中;
第4.3步:把关键代码库文件中用到的系统库函数地址赋值给内存空间m1中的pF数组;
第4.4步:修正内存空间m1中被调用函数的地址,即将当前的被调用函数地址加上p的值;
第4.5步:主程序调用拟保护代码;
经过上述步骤,即可实现Linux系统下的代码保护。
CN201310023581.6A 2013-01-22 2013-01-22 一种Linux系统下软件代码保护方法 Expired - Fee Related CN103077333B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310023581.6A CN103077333B (zh) 2013-01-22 2013-01-22 一种Linux系统下软件代码保护方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310023581.6A CN103077333B (zh) 2013-01-22 2013-01-22 一种Linux系统下软件代码保护方法

Publications (2)

Publication Number Publication Date
CN103077333A true CN103077333A (zh) 2013-05-01
CN103077333B CN103077333B (zh) 2016-01-20

Family

ID=48153862

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310023581.6A Expired - Fee Related CN103077333B (zh) 2013-01-22 2013-01-22 一种Linux系统下软件代码保护方法

Country Status (1)

Country Link
CN (1) CN103077333B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104298932A (zh) * 2014-10-27 2015-01-21 中国建设银行股份有限公司 一种so文件的调用方法及装置
CN105893860A (zh) * 2016-05-05 2016-08-24 百度在线网络技术(北京)有限公司 关键代码保护方法以及代码生成装置和代码运行装置
CN105975816A (zh) * 2015-12-25 2016-09-28 武汉安天信息技术有限责任公司 移动终端下基于虚拟技术的代码保护方法及系统
CN105989286A (zh) * 2015-08-28 2016-10-05 武汉安天信息技术有限责任公司 一种分析可执行文件判断高危文件的方法及系统
CN107133036A (zh) * 2017-04-26 2017-09-05 武汉斗鱼网络科技有限公司 一种模块的管理方法及装置
CN111868724A (zh) * 2017-12-12 2020-10-30 约翰·阿尔梅达 病毒免疫计算机系统和方法
CN113608775A (zh) * 2021-06-18 2021-11-05 天津津航计算技术研究所 一种基于内存直接读写的流程配置方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7243340B2 (en) * 2001-11-15 2007-07-10 Pace Anti-Piracy Method and system for obfuscation of computer program execution flow to increase computer program security
CN101236590A (zh) * 2008-03-07 2008-08-06 北京邮电大学 一种基于门限密码体制的软件分割保护的实现方法
CN101908119A (zh) * 2010-08-12 2010-12-08 浙江中控软件技术有限公司 一种动态链接库dll文件的处理方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7243340B2 (en) * 2001-11-15 2007-07-10 Pace Anti-Piracy Method and system for obfuscation of computer program execution flow to increase computer program security
CN101236590A (zh) * 2008-03-07 2008-08-06 北京邮电大学 一种基于门限密码体制的软件分割保护的实现方法
CN101908119A (zh) * 2010-08-12 2010-12-08 浙江中控软件技术有限公司 一种动态链接库dll文件的处理方法和装置

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104298932A (zh) * 2014-10-27 2015-01-21 中国建设银行股份有限公司 一种so文件的调用方法及装置
CN104298932B (zh) * 2014-10-27 2017-12-12 中国建设银行股份有限公司 一种so文件的调用方法及装置
CN105989286A (zh) * 2015-08-28 2016-10-05 武汉安天信息技术有限责任公司 一种分析可执行文件判断高危文件的方法及系统
CN105975816A (zh) * 2015-12-25 2016-09-28 武汉安天信息技术有限责任公司 移动终端下基于虚拟技术的代码保护方法及系统
CN105975816B (zh) * 2015-12-25 2019-06-07 武汉安天信息技术有限责任公司 移动终端下基于虚拟技术的代码保护方法及系统
CN105893860A (zh) * 2016-05-05 2016-08-24 百度在线网络技术(北京)有限公司 关键代码保护方法以及代码生成装置和代码运行装置
CN107133036A (zh) * 2017-04-26 2017-09-05 武汉斗鱼网络科技有限公司 一种模块的管理方法及装置
CN111868724A (zh) * 2017-12-12 2020-10-30 约翰·阿尔梅达 病毒免疫计算机系统和方法
CN113608775A (zh) * 2021-06-18 2021-11-05 天津津航计算技术研究所 一种基于内存直接读写的流程配置方法
CN113608775B (zh) * 2021-06-18 2023-10-13 天津津航计算技术研究所 一种基于内存直接读写的流程配置方法

Also Published As

Publication number Publication date
CN103077333B (zh) 2016-01-20

Similar Documents

Publication Publication Date Title
CN103077333B (zh) 一种Linux系统下软件代码保护方法
KR101946982B1 (ko) 가상 머신에서 멀웨어 탐지를 위한 프로세스 평가
CN103268455B (zh) 数据的访问方法及装置
CN108027737B (zh) 通过二进制和存储器多样性进行混淆的系统和方法
JP6166839B2 (ja) 実行時のアプリケーションメソッドを置き換えるためのシステム及び方法
CN105184118A (zh) 一种基于代码碎片化的Android应用程序加壳保护方法及装置
EP3779745A1 (en) Code pointer authentication for hardware flow control
JP5467271B2 (ja) 情報処理装置及びプログラム、情報処理方法、記録媒体
CN103955438A (zh) 基于硬件辅助虚拟化技术的进程内存保护方法
RU2580016C1 (ru) Способ передачи управления между областями памяти
CN104881610B (zh) 一种针对虚函数表劫持攻击的防御方法
US8775826B2 (en) Counteracting memory tracing on computing systems by code obfuscation
Karresand et al. Using ntfs cluster allocation behavior to find the location of user data
US9519780B1 (en) Systems and methods for identifying malware
CN107391028B (zh) 一种虚拟卷权限的控制方法及装置
KR102203200B1 (ko) 역난독화 장치 및 방법
US10255435B1 (en) Systems and methods for establishing a reputation for related program files
CN111373405B (zh) 用于防止计算设备中比特翻转攻击的计算机实现方法
JP2011503702A (ja) コンテンツ及び他のコピー作成を禁止するためのコンピュータにより可能になる方法及び装置
JP2012059258A (ja) 電子キー保護システム及びその方法
US20110167276A1 (en) Method and device for detecting if a computer file has been copied and method and device for enabling such detection
CN102054141A (zh) 一种利用硬件开关保护计算机信息安全的方法
KR102557007B1 (ko) 바이너리 파일 재구성 방법 및 그 장치
CN110597641A (zh) 一种线性地址空间的布局方法及计算装置
US9792431B1 (en) Systems and methods for selectively masking data on virtual storage devices

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB03 Change of inventor or designer information

Inventor after: Zhu Ruijin

Inventor after: Li Yuanzhang

Inventor after: Zuo Weihuan

Inventor after: Tan Yuan

Inventor after: Ma Zhongmei

Inventor after: Zhang Quanxin

Inventor after: Cheng Zijing

Inventor before: Zhu Ruijin

Inventor before: Tan Yuan

Inventor before: Zuo Weihuan

Inventor before: Li Yuanzhang

Inventor before: Ma Zhongmei

Inventor before: Zhang Quanxin

COR Change of bibliographic data
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160120

Termination date: 20200122