CN112507292A - 一种支持运行环境检测及完整性检测的加壳保护方法 - Google Patents

一种支持运行环境检测及完整性检测的加壳保护方法 Download PDF

Info

Publication number
CN112507292A
CN112507292A CN202011451281.4A CN202011451281A CN112507292A CN 112507292 A CN112507292 A CN 112507292A CN 202011451281 A CN202011451281 A CN 202011451281A CN 112507292 A CN112507292 A CN 112507292A
Authority
CN
China
Prior art keywords
program
service
shell
service program
detection
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
CN202011451281.4A
Other languages
English (en)
Other versions
CN112507292B (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.)
Chongqing University of Post and Telecommunications
Original Assignee
Chongqing University of Post and Telecommunications
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 Chongqing University of Post and Telecommunications filed Critical Chongqing University of Post and Telecommunications
Priority to CN202011451281.4A priority Critical patent/CN112507292B/zh
Publication of CN112507292A publication Critical patent/CN112507292A/zh
Application granted granted Critical
Publication of CN112507292B publication Critical patent/CN112507292B/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

Abstract

本发明涉及一种支持运行环境检测及完整性检测的加壳保护方法,属于逆向工程防御技术领域,包括一种产生服务程序的加壳保护工具A,对原程序B进行加壳操作、插入安全通信模块和调用模块,生成唯一对应的服务程序C和被加壳保护的程序B1;所述程序B1在执行时,首先调用服务程序C,将服务程序C调入到内存当中,当服务程序C进入内存后程序B1与服务程序C进行交互认证;程序B1存在对服务程序C的完整性检测;所述程序C在执行时,与程序B1进行交互认证,对程序B1进行基于运行环境的检测,所述运行环境检测通过后对程序B1进行解壳并交回控制权;所述程序C负责在间隔时间段内生成新的动态认证消息。

Description

一种支持运行环境检测及完整性检测的加壳保护方法
技术领域
本发明属于逆向工程防御技术领域,涉及一种支持运行环境检测及完整性检测的加壳保护方法。
背景技术
计算机程序通常使用高级语言编写,再经过编译和链接生成可执行文件。常见的高级编程语言如java、python、c++/c等,源代码结构和计算机本身硬件及系统无关,具有更强的可阅读性,能够更简洁的描述算法。
一个可执行程序在本地计算机中的运行过时是不受保护的,逆向分析人员可以利用反汇编软件将可执行程序(0/1语言)自下而上生成可以被阅读的汇编代码或者高级语言代码,从而破解获取程序,获取程序被保护的注册码、核心算法或者编写注册机、程序外挂、插入病毒、逆向工程等操作,对原程序安全产生严重危害。
为了抵御程序被逆向分析,保护核心代码信息,常常对软件采取加壳,使用软件保护器等措施。软件加壳的基本原理是利用特殊的压缩/加密算法,对软件进行压缩/加密,使处理过后的程序可以独立运行。它们依附在原程序内且先于原程序代码执行,执行过程中对加壳后的程序进行还原,还原结束后再交还控制权。加壳后的原程序代码序列通常以加密形式存储在磁盘,在程序运行时对程序还原,可以有效防止程序的静态分析。
软件加壳是一种重要的保护技术,它可以对软件的二进制代码进行加密或压缩,并在执行过程中动态解密或解压缩这些代码,增加软件逆向分析的难度。脱壳技术则是为了恢复被隐藏的代码,降低软件逆向分析的难度。
常见的静态反汇编工具:IDA Pro(Interactive Disassembler Professional)、win32Dasm、VB Decompiler pro;常见的动态反汇编工具Ollydbg、Windbg。
由于当前加壳后的软件,其解壳程序与原程序为一体,脱壳程序也能被单步调试,不能对自己运行状态做安全检测,且不能对内存的访问做限制。随着反编译和破解技术门槛的降低,可执行文件容易被反编译和篡改,在其被动态分析时不具有有效防御方式。因此程序在被加载入内存中后自动执行解壳程序而暴露源代码。所以当前的加壳方式通过动态分析和dump技术可以从内存中提取原程序,用于静态分析导致源代码泄露。
当前,软件加壳后,解壳服务程序仍存在于原程序中,在随着脱壳技术的日益发展,此加壳方式的有效性和复杂性不足以保证源代码的安全性,造成程序核心代码泄露,版权信息被破坏等危险。
发明内容
有鉴于此,本发明的目的在于针对动态分析设计了一种新的加壳策略,采用具有运行环境检测的服务程序,增加动态反汇编分析难度的方法。
为达到上述目的,本发明提供如下技术方案:
一种支持运行环境检测及完整性检测的加壳保护方法,包括一种产生服务程序的加壳保护工具A,对原程序B进行加壳操作、插入安全通信模块和调用模块,生成唯一对应的服务程序C和被加壳保护的程序B1;
所述程序B1在执行时,首先调用服务程序C,将服务程序C调入到内存当中,当服务程序C进入内存后程序B1与服务程序C进行交互认证;程序B1存在对服务程序C的完整性检测;
所述程序C在执行时,与程序B1进行交互认证,对程序B1进行基于运行环境的检测,所述运行环境检测通过后对程序B1进行解壳并交回控制权;
所述程序C负责在间隔时间段内生成新的动态认证消息。
进一步,所述程序B1与服务程序C进行交互认证,若服务程序C与程序B1唯一对应,具有程序B1的解壳代码,验证通过;
若服务程序C不是与程序B1对应的服务程序,验证不通过,抛出错误信息,并结束程序以保护程序B1及系统安全。
进一步,所述完整性检测是由程序B1发起的对服务程序C基于内容的完整性检测;程序B1计算服务程序C内容的HASH值,使用此HASH值作为校验码,进行完整性检测;
如果完整性检测通过,判断为服务程序C未被篡改或调试具有正确解壳B1的功能,B1向C发送正确启动信号并交还控制权,进入睡眠状态,服务程序C继续运行;
如果完整性检测未通过,判断为服务程序C被篡改、调试或破坏,无法正常解壳,抛出错误信息并结束程序B1,进入睡眠状态以抵御逆向工程。
进一步,所述基于运行环境的检测过程是由服务程序C对程序B1所处的运行环境进行检测,判断程序B1是否未处于调试环境;
若运行环境检测通过,则认为程序B1正常运行,未处于调试环境,服务程序C进行自解壳后使用正确密钥将加壳状态的程序B1解壳为原程序B;所述密钥由服务程序C产生并负责维护和更新;
若运行环境检测未通过,判断程序B1处于调试或反汇编的不安全环境,抛出错误信息,并结束程序B1以抵御逆向工程。
进一步,所述服务程序C正常运行时间隔采集环境信息,计算信息的HASH值作为新的认证消息,更新程序B1存储的认证消息;采集的环境信息包括但不限于时间信息、内存环境、产生随机数、程序名。
进一步,程序之间通信由双方通信模块负责,基于轻量级的通信协议加密传输信息;通信消息的加密方式为:MESSAGE认证消息XOR MESSAGE消息内容
进一步,当程序B1正常结束时,根据当前拥有的认证消息生成加壳密钥对自己核心代码部分加壳;当程序B1或者服务程序C非正常结束时,程序抛出错误信息,并立即结束运行。
进一步,服务程序C接收到信号后首先进行自行解壳,然后执行对程序B1解壳的代码模块,若是正确启动信号则使用正确密钥或是正确解压方式对B1进行解壳,解壳成功后服务程序C向B1发送结束信号并唤醒B1;若是错误启动信号,则程序C使用错误的密钥或是解压方式对B1进行解壳,使得B1产生错误而无法使用;若程序B1被正常解壳,则程序B1正常运行;
程序B1正常运行后,每隔时间Δt,程序C收集时间信息l1,内存环境l2,产生随机数l3,程序名l4...等k个判断函数信息,对收集得到的结果进行拼接后进行HASH计算,计算得到的值作为新的认证消息MESSAGE=HASH(l1|l2|l3|l4|l4...);产生MESSAGE_new通过安全通信部分向B1发送更换认证消息MESSAGE;程序B1正常退出前向服务程序C发送结束信号,在服务程序C收到结束信号后程序B1,服务程序C分别退出。
进一步,传输的信息为轻量级的信道握手协议,先确认通信双方身份,再将通信消息进行简单加密传输。
进一步,一次运行环境的判断是对被保护程序是否被调试采取的一系列操作,包括如下:
线程环境块检测,在ring3级下,判断当前运行环境是否存在调试器工作;
程序窗口句柄检测:用FindWindow函数查找具有相同函数的反汇编工具窗体是否存在;API函数IsDebuggerPresent检测,查找返回表和调试需要调用的API函数判断是否有反汇编工具运行;检测程序的父进程;检查STARTUPINFO结构体。
本发明的有益效果在于:
上述防止动态反汇编情况下会分析的加壳方法,程序B1运行一定会启动服务程序C为其脱壳,当B1处于单步调试的情况下C的执行是连续的,可以检测B的状态然后选择是否为B正确解壳;当服务程序C被破解后程序B1通过对C的基于内容的完整性检测可以判断其是否被更改,若被更改则停止运行。通过体外解壳的方法与原程序、服务程序的互相鉴别,可以对相关软件动态反汇编调试做到有效防护,可以最大限度的增加被保护程序在有效期内被逆向分析/反汇编的代价。
本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。
附图说明
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作优选的详细描述,其中:
图1是一个实施例的加壳工具示意图;
图2是一个实施例被保护程序结构示意图;
图3是一个实施例服务程序结构示意图;
图4是一个实施例B,C程序运行流程图;
图5是一个实施例B,C程序运行时交互示意图;
图6是一个实施例B,C程序运行时流程图;
图7为本发明的总体程序结构示意图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本发明的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若有术语“上”、“下”、“左”、“右”、“前”、“后”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此附图中描述位置关系的用语仅用于示例性说明,不能理解为对本发明的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。
参考图1所示,图1为一个实施例的加壳工具示意图,包括一种产生服务程序的加壳保护工具A,功能包括保护壳的生成,以及服务程序C的生成。
所述工具A,动态加壳保护工具在对原程序B进行加壳后生成程序B1(被加壳)和服务程序C,加壳后程序B1如图2所示,服务程序部分包含能够解壳保护程序B1、检测内存环境的代码,此部分在加壳程序A运行过程中生成为一个新的服务程序C,服务程序C结构如图3所示。程序B1在运行时首先调用服务程序C,将服务程序C调入到内存当中。当服务程序C进入内存后程序B1与服务程序C进行交互认证。
在上述实施例中,服务程序C产生流程区别于传统加壳过程,首先将PE文件B读取到内存;获取头文件信息,获得.text区段信息,然后对代码段进行加密。在本实例中,加密为简单的异或运算。用LoadLibrary将生成的壳加载到内存,然后在壳的程序里对宿主PE进行解密,并修复重定位,因此需要要把一些必要的数据存储到加载的壳里面。申请空间,将壳拷贝到内存另一处。
在上述实例中,申请的内存空间大小为原程序B和壳的大小和。在申请到内存空间后将原程序拷贝到申请空间当中。
在一个实施例中加壳程序A对原程序B进行加壳时会产生程序B1、服务程序C第一次运行时的身份认证消息。加壳程序A采取当前环境信息,时间信息,程序名等信息产生认证消息以及密钥信息HASH(Environment||Time||Name||Nonce),实际过程中可根据程序特点进行变化,达到简单获取,此认证消息为初始化的认证消息。将调用部分,安全通信部分的节信息加入保护程序B;将加壳程序A中存有服务程序C主要代码的文件处理后编译、链接,生成服务程序C。
在上述实施例中,首次交互认证消息是在加壳过程当中由程序A生成,但在此后的认证中,认证消息在运行过程中动态产生。
在进行交互认证后程序B1会对认证进行判断,通过认证则认为在该系统中服务程序C是原该程序B1的对应解壳程序;否则该服务程序C并不为其对应的服务程序,程序B1向C发送错误信号,然后分别退出。
在上述实施例中,通过认证后,程序B1发起对服务程序C的基于内容的完整性检测(对关键代码进行HASH运算),若通过检测,则程序B1判定C未被更改/破解,B1向C发送正确启动信号并交还控制权,进入睡眠状态;若未通过,则向C发送错误启动信号并结束程序B1,进入睡眠状态;
在上述实施例中,服务程序C接收到信号后首先进行自行解壳,然后执行对程序B1解壳的代码模块,若是正确启动信号则使用正确密钥或是正确解压方式对B1进行解壳,解壳成功后服务程序C向B1发送结束信号并唤醒B1;若是错误启动信号,则程序C使用错误的密钥或是解压方式对B1进行解壳,使得B1产生错误而无法使用。若程序B1被正常解壳,则程序B1正常运行;
在上述实施例中,程序B1正常运行后,每隔时间Δt,程序C收集时间信息l1,内存环境l2,产生随机数l3,程序名l4...等k个判断函数信息,对收集得到的结果进行拼接后进行HASH计算,计算得到的值作为新的认证消息MESSAGE=HASH(l1|l2|l3|l4|l4...)。产生MESSAGE_new通过安全通信部分向B1发送更换认证消息MESSAGE;程序B1正常退出前向服务程序C发送结束信号,在服务程序C收到结束信号后程序B1,服务程序C分别退出。
在一个实施例中,程序B1是经过加壳保护工具处理的带壳程序(保护状态),设计主要为加密壳,原程序B是未经过加壳操作/经过解壳操作的程序(无保护状态)。
在一个实施例中,程序B1计算服务程序C内容的HASH值,使用此HASH值作为校验码,如果验证通过,则判定当前服务程序C未被修改或者破坏。
在一个实施例中,所述程序B1在对认证消息判断为错误后,向管理员抛出错误信息并退出运行,阻止程序B1和服务程序C的不匹配调用。
在一个实施例中,当服务程序C确认自身与程序B1的对应关系后,服务程序C会根据当前程序B1的运行环境来判断程序B1是否未处于调试环境。若判断通过,发送正确启动信号,服务程序C进行自解壳后使用正确密钥将程序B1(加壳状态)解壳为原程序B(解壳状态);判断未通过则不能获得正确的解壳密钥,导致程序B1错误退出。
在一个实施例中,上述过程使用的密钥由服务程序C产生并负责维护和更新,在服务程序C采取时间信息,内存环境,程序时间名,产生随机数,等信息,对信息进行拼接后作Hash运算产生新认证信息并向B发送,动态更新认证消息。
在上述过程中,传输的信息为轻量级的信道握手协议,先确认通信双方身份,再将通信消息进行简单加密传输。
在上述过程中,一次安全通信的加密是由当前认证信息与通信内容异或。
在一个实施例中,程序B1可以利用动态HASH密钥进行加壳操作,根据密钥的动态变化性,每次加壳结果都会产生动态的核心代码模块,也就是说,原程序B在每次运行结束之后都会产生完全不同的程序B1。
在上诉实施例中,由于程序B1的动态性和交互性,常见的自动化脱壳程序完全无法在程序B1中找到正确的脱壳代码和OEP点,并且无法根据PE文件内容得到程序所使用的IAT表,所以本方案能够抵御静态反汇编过程,同时极大的增加手工调试或动态反汇编的调试难度。
在上述实施例中,对原程序B的加壳/加密过程使用轻量级方式。
先将PE文件读取到内存,获取头文件信息,和.text区段信息,然后使用动态密钥对代码段进行加密;然后生成保护壳,负责对宿主代码解密、修改IAT表(函数导入表),对ASCII码内容加密,修改地址重定向表等操作;再申请内存,大小为ΔX=X源文件+X保护壳,并合并PE文件和壳部分,设置新的OEP入口点,让解壳代码优先与原程序部分获得程序控制权。
在一个实施例中,对于程序B1的安全性保护除了身份认证功能、完整性检测功能、还有安全服务程序C对程序B1当前运行环境的判断。
在上述实施例中,一次运行环境的判断是对被保护程序是否被调试采取的一系列操作,包括如下:
线程环境块检测,在ring3级下,判断当前运行环境是否存在调试器工作;
程序窗口句柄检测:用FindWindow函数查找具有相同函数的反汇编工具窗体是否存在;API函数IsDebuggerPresent检测,查找返回表和调试需要调用的API函数判断是否有反汇编工具运行;检测程序的父进程;检查STARTUPINFO结构体。
上述防止动态反汇编情况下会分析的加壳方法,程序B1运行一定会启动服务程序C为其脱壳,当B1处于单步调试的情况下C的执行是连续的,可以检测B的状态然后选择是否为B正确解壳;当服务程序C被破解后程序B1通过对C的基于内容的完整性检测可以判断其是否被更改,若被更改则停止运行。通过体外解壳的方法与原程序、服务程序的互相鉴别,可以对相关软件动态反汇编调试做到有效防护,可以最大限度的增加被保护程序在有效期内被逆向分析/反汇编的代价。
在一个实施例中,当完成服务程序C的生成时,将成功信号回送给程序A,若加壳程序A在一定时间内未能收到该信号则报出错误,程序加壳失败。
在本实例中,加壳程序A准时收到成功信号,成功将原程序B加壳并产生唯一对应的服务程序C。
在一次实施例中,启动程序B1,如图4中步骤①所示,程序先执行调用部分,程序B1将服务程序C调入内存;在服务程序C进入内存后向程序B1发送就绪信号以及认证消息,此时通信规则如图5所示。程序B1在接收到消息后进行身份认证,如图4中步骤④所示,若未通过验证说明该服务程序C非自己对应解壳程序,然后产生错误,程序B1、服务程序C退出。
在本次实施例中,此认证通过,在通过身份认证后程序B1向服务程序C的关键代码做Hash运算,进行完整性检验,如图4步骤⑦所示。若未通过检验则说明服务程序C已被破坏或攻击,此时程序B1可能处于不安全状态,程序B1向服务程序C发送错误启动信号,此后服务程序C对程序B1进行错误解壳。
在本次实施例中,通过完整性检测,程序B1向服务程序C发送正确启动信号,将自己进入睡眠状态。服务程序C接到信号后进行自解壳,然后执行服务程序C。
服务程序C开始执行后首先判断程序B1当前的运行环境,若判断B1未处于调试状态则正常执行,使用正确密钥或解压缩方式给程序B1脱壳。当服务程序C完成解壳程序后向原程序B(经过程序B1脱壳产生)发送完成消息,并将唤醒原程序B,打开计时器进行计时,如图4步骤⑨所示。
若未通过环境检测则说明程序B1被非法调试,此时可对程序B1使用错密钥或解压缩方式给程序B1脱壳,使其出错。
在上述实施例中,服务程序C对环境做的多维判断有以下内容:
线程环境块检测,用ring3级下的调试器对可执行程序进行调试时,调试器会把被调试的可执行程序作为一个子线程进行跟踪.这时被调试的可执行程序的PEB结构偏移0x02处的BeingDebugged的值为1,如果可执行程序未被调试,则值为0,所以可以利用这个值来检测程序是否被ring3级下的调试器调试;
程序窗口句柄检测:用FindWindow函数查找具有相同窗口类名和标题的窗口,如果找到就说明有OD在运行;
API函数IsDebuggerPresent检测:操作系统将调试对象设置为在特殊环境中运行,而kernel32.dll中的API函数IsDebuggerPresent的功能是用于判断进程是否处于调试环境中,这样就可以利用这个API函数来查看进程是否在调试器中执行;
检测程序的父进程:Windows操作系统下的GUI可执行程序的父进程都是explorer.exe(CUI可执行程序的父进程是CMD.exe,系统服务的父进程是Service.exe,在实际使用的时候需要根据自己的程序类型来选择父进程实现反跟踪),而正被调试器OD调试的程序的父进程是调试器的执行程序ollydbg.exe而不是别的.所以可以利用检查父进程是否为explorer.exe的方法来检测OD。
检查STARTUPINFO结构:Windows操作系统中的explorer.exe创建进程的时候会把STARTUPINFO结构中的值设为0,而非explorer.exe创建进程的时候会忽略这个结构中的值,也就是结构中的值不为0,所以可以利用这个来判断OD是否在调试程序。
在以上实施例中,具有正确/错误的信号可以根据自己程序情况定义,例如:传送信息>0则判断为正确,传送信息<0则判断为错误;或传送ASCII码‘Y’表示正确,‘N’表示错误。
若未通过检测,则程序B1向服务程序C发送错误启动信号,使服务程序C采用错误密钥或是错误解压方式对程序B1进行解壳,造成程序B1的破坏而运行失败。
在一次实施例中,原程序B正常运行,当计时每隔Δt,服务C向原程序B发起一次认证消息更换过程,如图5,原程序B提取时间信息、内存环境、程序名字、产生随机数等信息,对这些信息进行拼接后作Hash运算,Hash结果为新的认证消息,如图4步骤a、b、c、d、e所示;在向原程序B送消息之前,服务程序C采用当前认证消息对认证消息更换信号以及认证消息做加密运算,更新认证消息。
如图7所示为本发明的总体程序结构示意图。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。

Claims (10)

1.一种支持运行环境检测及完整性检测的加壳保护方法,其特征在于:包括一种产生服务程序的加壳保护工具A,对原程序B进行加壳操作、插入安全通信模块和调用模块,生成唯一对应的服务程序C和被加壳保护的程序B1;
所述程序B1在执行时,首先调用服务程序C,将服务程序C调入到内存当中,当服务程序C进入内存后程序B1与服务程序C进行交互认证;程序B1存在对服务程序C的完整性检测;
所述程序C在执行时,与程序B1进行交互认证,对程序B1进行基于运行环境的检测,所述运行环境检测通过后对程序B1进行解壳并交回控制权;
所述程序C负责在间隔时间段内生成新的动态认证消息。
2.根据权利要求1所述的支持运行环境检测及完整性检测的加壳保护方法,其特征在于:所述程序B1与服务程序C进行交互认证,若服务程序C与程序B1唯一对应,具有程序B1的解壳代码,验证通过;
若服务程序C不是与程序B1对应的服务程序,验证不通过,抛出错误信息,并结束程序以保护程序B1及系统安全。
3.根据权利要求1所述的支持运行环境检测及完整性检测的加壳保护方法,其特征在于:所述完整性检测是由程序B1发起的对服务程序C基于内容的完整性检测;程序B1计算服务程序C内容的HASH值,使用此HASH值作为校验码,进行完整性检测;
如果完整性检测通过,判断为服务程序C未被篡改或调试具有正确解壳B1的功能,B1向C发送正确启动信号并交还控制权,进入睡眠状态,服务程序C继续运行;
如果完整性检测未通过,判断为服务程序C被篡改、调试或破坏,无法正常解壳,抛出错误信息并结束程序B1,进入睡眠状态以抵御逆向工程。
4.根据权利要求1所述的支持运行环境检测及完整性检测的加壳保护方法,其特征在于:所述基于运行环境的检测过程是由服务程序C对程序B1所处的运行环境进行检测,判断程序B1是否未处于调试环境;
若运行环境检测通过,则认为程序B1正常运行,未处于调试环境,服务程序C进行自解壳后使用正确密钥将加壳状态的程序B1解壳为原程序B;所述密钥由服务程序C产生并负责维护和更新;
若运行环境检测未通过,判断程序B1处于调试或反汇编的不安全环境,抛出错误信息,并结束程序B1以抵御逆向工程。
5.根据权利要求1所述的支持运行环境检测及完整性检测的加壳保护方法,其特征在于:所述服务程序C正常运行时间隔采集环境信息,计算信息的HASH值作为新的认证消息,更新程序B1存储的认证消息;采集的环境信息包括但不限于时间信息、内存环境、产生随机数、程序名。
6.根据权利要求1所述的支持运行环境检测及完整性检测的加壳保护方法,其特征在于:程序之间通信由双方通信模块负责,基于轻量级的通信协议加密传输信息;通信消息的加密方式为:MESSAGE认证消息XOR MESSAGE消息内容
7.根据权利要求1所述的支持运行环境检测及完整性检测的加壳保护方法,其特征在于:当程序B1正常结束时,根据当前拥有的认证消息生成加壳密钥对自己核心代码部分加壳;当程序B1或者服务程序C非正常结束时,程序抛出错误信息,并立即结束运行。
8.根据权利要求1所述的支持运行环境检测及完整性检测的加壳保护方法,其特征在于:服务程序C接收到信号后首先进行自行解壳,然后执行对程序B1解壳的代码模块,若是正确启动信号则使用正确密钥或是正确解压方式对B1进行解壳,解壳成功后服务程序C向B1发送结束信号并唤醒B1;若是错误启动信号,则程序C使用错误的密钥或是解压方式对B1进行解壳,使得B1产生错误而无法使用;若程序B1被正常解壳,则程序B1正常运行;
程序B1正常运行后,每隔时间Δt,程序C收集时间信息l1,内存环境l2,产生随机数l3,程序名l4...等k个判断函数信息,对收集得到的结果进行拼接后进行HASH计算,计算得到的值作为新的认证消息MESSAGE=HASH(l1|l2|l3|l4|l4...);产生MESSAGE_new通过安全通信部分向B1发送更换认证消息MESSAGE;程序B1正常退出前向服务程序C发送结束信号,在服务程序C收到结束信号后程序B1,服务程序C分别退出。
9.根据权利要求1所述的支持运行环境检测及完整性检测的加壳保护方法,其特征在于:传输的信息为轻量级的信道握手协议,先确认通信双方身份,再将通信消息进行简单加密传输。
10.根据权利要求1所述的支持运行环境检测及完整性检测的加壳保护方法,其特征在于:一次运行环境的判断是对被保护程序是否被调试采取的一系列操作,包括如下:
线程环境块检测,在ring3级下,判断当前运行环境是否存在调试器工作;
程序窗口句柄检测:用FindWindow函数查找具有相同函数的反汇编工具窗体是否存在;API函数IsDebuggerPresent检测,查找返回表和调试需要调用的API函数判断是否有反汇编工具运行;检测程序的父进程;检查STARTUPINFO结构体。
CN202011451281.4A 2020-12-09 2020-12-09 一种支持运行环境检测及完整性检测的加壳保护方法 Active CN112507292B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011451281.4A CN112507292B (zh) 2020-12-09 2020-12-09 一种支持运行环境检测及完整性检测的加壳保护方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011451281.4A CN112507292B (zh) 2020-12-09 2020-12-09 一种支持运行环境检测及完整性检测的加壳保护方法

Publications (2)

Publication Number Publication Date
CN112507292A true CN112507292A (zh) 2021-03-16
CN112507292B CN112507292B (zh) 2024-01-26

Family

ID=74971985

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011451281.4A Active CN112507292B (zh) 2020-12-09 2020-12-09 一种支持运行环境检测及完整性检测的加壳保护方法

Country Status (1)

Country Link
CN (1) CN112507292B (zh)

Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8042155B1 (en) * 2006-09-29 2011-10-18 Netapp, Inc. System and method for generating a single use password based on a challenge/response protocol
CN105069352A (zh) * 2015-07-29 2015-11-18 浪潮电子信息产业股份有限公司 一种在服务器上构建可信应用程序运行环境的方法
CN106203006A (zh) * 2016-08-31 2016-12-07 北京鼎源科技有限公司 基于dex与so文件动态执行的Android应用加固方法
WO2016206565A1 (zh) * 2015-06-26 2016-12-29 阿里巴巴集团控股有限公司 恶意程序检测方法及装置
CN106650341A (zh) * 2016-11-18 2017-05-10 湖南鼎源蓝剑信息科技有限公司 基于smali流程混淆技术的Android应用加固方法
CN107169324A (zh) * 2017-05-12 2017-09-15 北京理工大学 一种基于动态加解密的Android应用加固方法
US20180068108A1 (en) * 2015-02-18 2018-03-08 Os-New Horizons Personal Computing Solutions Ltd. A MOBILE DEVICE AND SYSTEMS TO SECURELY REMOTELY ACCESS, MANAGE AND STORE AN ENTERPRISE'S DATA, USING EMPLOYEES SMART ADD-ONs AND MOBILE DEVICES
CN107977553A (zh) * 2017-12-25 2018-05-01 中国电子产品可靠性与环境试验研究所 移动应用程序的安全加固的方法及装置
CN108959860A (zh) * 2018-07-20 2018-12-07 厦门市美亚柏科信息股份有限公司 一种检测Android系统是否被破解和破解记录获取方法
CN110175067A (zh) * 2019-03-05 2019-08-27 广东电网有限责任公司信息中心 一种移动应用立体防御方法和系统
CN110968870A (zh) * 2019-11-28 2020-04-07 广发证券股份有限公司 一种软件运行时安全的检测方法
CN111191195A (zh) * 2019-12-10 2020-05-22 航天信息股份有限公司 一种用于保护apk的方法和装置
CN111950035A (zh) * 2020-06-18 2020-11-17 中国电力科学研究院有限公司 对apk文件完整性保护的方法、系统、设备及存储介质
CN114969755A (zh) * 2022-05-26 2022-08-30 重庆邮电大学 一种跨语言的未知可执行程序二进制漏洞分析方法

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8042155B1 (en) * 2006-09-29 2011-10-18 Netapp, Inc. System and method for generating a single use password based on a challenge/response protocol
US20180068108A1 (en) * 2015-02-18 2018-03-08 Os-New Horizons Personal Computing Solutions Ltd. A MOBILE DEVICE AND SYSTEMS TO SECURELY REMOTELY ACCESS, MANAGE AND STORE AN ENTERPRISE'S DATA, USING EMPLOYEES SMART ADD-ONs AND MOBILE DEVICES
WO2016206565A1 (zh) * 2015-06-26 2016-12-29 阿里巴巴集团控股有限公司 恶意程序检测方法及装置
CN105069352A (zh) * 2015-07-29 2015-11-18 浪潮电子信息产业股份有限公司 一种在服务器上构建可信应用程序运行环境的方法
CN106203006A (zh) * 2016-08-31 2016-12-07 北京鼎源科技有限公司 基于dex与so文件动态执行的Android应用加固方法
CN106650341A (zh) * 2016-11-18 2017-05-10 湖南鼎源蓝剑信息科技有限公司 基于smali流程混淆技术的Android应用加固方法
CN107169324A (zh) * 2017-05-12 2017-09-15 北京理工大学 一种基于动态加解密的Android应用加固方法
CN107977553A (zh) * 2017-12-25 2018-05-01 中国电子产品可靠性与环境试验研究所 移动应用程序的安全加固的方法及装置
CN108959860A (zh) * 2018-07-20 2018-12-07 厦门市美亚柏科信息股份有限公司 一种检测Android系统是否被破解和破解记录获取方法
CN110175067A (zh) * 2019-03-05 2019-08-27 广东电网有限责任公司信息中心 一种移动应用立体防御方法和系统
CN110968870A (zh) * 2019-11-28 2020-04-07 广发证券股份有限公司 一种软件运行时安全的检测方法
CN111191195A (zh) * 2019-12-10 2020-05-22 航天信息股份有限公司 一种用于保护apk的方法和装置
CN111950035A (zh) * 2020-06-18 2020-11-17 中国电力科学研究院有限公司 对apk文件完整性保护的方法、系统、设备及存储介质
CN114969755A (zh) * 2022-05-26 2022-08-30 重庆邮电大学 一种跨语言的未知可执行程序二进制漏洞分析方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
徐剑;武爽;孙琦;周福才;: "面向Android应用程序的代码保护方法研究", 信息网络安全, no. 10, pages 11 - 17 *
李克秋;史孝龙;徐君锋;: "一种反动态调试和网络交互加密验证的Android软件保护策略", 北京理工大学学报, no. 12, pages 1276 - 1281 *
王健: "基于完整性验证和壳的软件保护技术研究", 中国优秀硕士学位论文全文数据库 信息科技辑, no. 10, pages 138 - 13 *
马雪婷等: "一种共享软件保护机制的完整实现", 科技创新与应用, no. 10, pages 25 - 27 *

Also Published As

Publication number Publication date
CN112507292B (zh) 2024-01-26

Similar Documents

Publication Publication Date Title
CN106778103B (zh) 一种安卓应用程序防逆向破解的加固方法、系统及解密方法
US10255414B2 (en) Software self-defense systems and methods
Naumovich et al. Preventing piracy, reverse engineering, and tampering
KR101054318B1 (ko) 정보 처리 시스템 및 프로그램을 기록한 컴퓨터로 읽을 수 있는 매체
JP4372228B2 (ja) マクロ中のウイルスの検出および除去のためのシステム、装置および方法
JP4922951B2 (ja) ソフトウェア保護方法
KR101122950B1 (ko) 소프트웨어 업데이트를 제한하는 방법 및 시스템
CN101438529B (zh) 经由动态转换的主动计算机恶意软件保护
KR101122650B1 (ko) 정상 프로세스에 위장 삽입된 악성코드 탐지 장치, 시스템 및 방법
US7328453B2 (en) Systems and methods for the prevention of unauthorized use and manipulation of digital content
AU2002305490A1 (en) Systems and methods for the prevention of unauthorized use and manipulation of digital content
CN105512521A (zh) 一种软件安装包的加固保护方法和系统
CN110555290A (zh) 一种基于fpga的工控软件版权保护方法及系统
CN105930728B (zh) 一种应用审查方法及装置
US6934850B2 (en) Program creation method and program execution method
Suk et al. UnThemida: Commercial obfuscation technique analysis with a fully obfuscated program
US7526811B1 (en) Methods for detecting executable code which has been altered
CN112507292B (zh) 一种支持运行环境检测及完整性检测的加壳保护方法
CN104361298A (zh) 信息安全保密的方法和装置
JP4120702B2 (ja) 情報処理システムおよびプログラム
KR102557007B1 (ko) 바이너리 파일 재구성 방법 및 그 장치
Rebiha et al. Semantic malware resistance using inductive invariants
CN115130069A (zh) 一种软件授权方法及装置、电子设备和存储介质
Zhang et al. MtdScout: Complementing the Identification of Insecure Methods in Android Apps via Source-to-Bytecode Signature Generation and Tree-based Layered Search
Li SPARSE: A hybrid system for malcode-bearing document detection

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