Windows平台可执行文件API延迟导入保护方法技术

技术编号:8735209 阅读:232 留言:0更新日期:2013-05-26 11:45
本发明专利技术公开了一种Windows平台可执行文件API延迟导入保护方法。该方法包括:启动调试器;由所述调试器以调试方式启动用户目标程序,以生成目标进程;所述目标进程通过触发断点异常的方式来通知所述调试器进行API导入及修改被调试程序的EIP。本发明专利技术通过触发断点异常的方式来通知所述调试器进行API导入及修改被调试程序的EIP,可以较好地防止第三方通过调试器来跟踪破解。

【技术实现步骤摘要】

本专利技术涉及一种软件防破解领域,尤其涉及一种。
技术介绍
软件的盗版问题已经引起了各国政府的高度关注。盗版软件最基本的技术手段是通过逆向工程来理解程序,进而对软件进行非法的篡改,以达到去除软件保护的目的。软件盗版的日益猖獗已经严重扰乱了软件市场的秩序,严重损害了软件厂商的利益。比软件盗版更可怕的是逆向分析。根据经验,一个熟练的逆向分析者一天可以逆向1000行C++代码。也就是说,辛辛苦苦几年时间开发出来的软件,如果不加保护,就会被人以每天1000行的速度逆向全部代码。这个问题在驱动程序方面体现的尤为突出。驱动程序各个短小精悍,汇集着众多的核心技术,但他往往只有几十KB,可能在几天的时间内就被人逆向出全部源码。所以往往在你的软件发布后很短的一段时间内,就会涌现出无数个与你的软件功能相同的软件,你的竞争力也就不复存在了。由此可见软件保护的重要性。不过由于软件加密是一种对抗性技术,所以需要开发者对解密技术有一定的了解。但是软件加密技术的资料相对来讲比较匮乏,这也就使得大多数软件保护程序的开发者不熟悉软件加密与解密,进而导致花费了大量人力物力设计出的加密方案不堪一击。为了让软件开发者从软件保护的措施中脱离出来,专心致力于自己的软件开发,专用加密软件这个事物就应运而生了。本专利申请提出的方案就属于一种用于专用加密软件的软件加密方案。壳技术是最早出现的一种专用的加密技术。现在大家能够接触到的绝大多数软件都经过了加壳的保护,而壳技术也成为了现阶段最流行的软件加密技术。世界知名的加壳加密软件有 ASProtect、Armadillo、EXECryptor 等等。例如,ASProtect是一款非常强大的Win32程序保护工具,具有压缩、加密、反跟踪代码、CRC校检和花指令等众多保护措施。它使用Blowfish、Twofish、TEA等强劲的加密算法,用RSA1024作为注册密钥生成器。他还通过API钩子与加壳的程序进行通信,并且ASProtect提供SDK,支持VC、VB等,实现加密程序内外结合。Armadillo是一款应用面较为广泛的商业保护软件,可以在提供保护的同时为你的软件加上各种限制,包括时间、次数、启动画面等等。他的特点是双进程保护。他在加壳时会扫描程序,将标记过的跳转指令替换成int3指令。程序在运行时,保护进程截获int3指令,将其替换成目标地址返回被保护进程,然后被保护进程继续运行。EXECryptor是一款商业保护软件,可以为目标软件加上注册机制、时间限制、使用次数等功能。他的特点是Ant1-Debug功能很强大。通过加壳保护的软件,在壳与解密后的原始程序之间有一条明显的分界线,破解者可以在这个分割线下断点,等待壳自己解密完成后进行内存倒出,并利用倒出的内存重构exe文件,达到解密的目的。其他已有的双进程保护软件仅仅针对软件解密过程进行保护,并没有针对软件运行全过程进行保护,也存在解密过程与程序运行的明显分界线,与传统加壳保护存在相同的问题。还存储一种虚拟机保护技术。虚拟机保护与虚拟机这种概念不同,他比较类似于P-C0DE,将一系列的指令解释成字节码,放在一个解释引擎中执行,以对软件进行保护。调试者跟踪进入到虚拟机,是非常难于理解原指令的。想要理解程序流程,就必须深入分析虚拟机引擎,完整地得到P-CODE与原始代码的对应关系,其复杂度可想而知。VMProtect是一款著名的虚拟机保护软件,它以向开发者提供SDK的方式提供保护。以VMPiOtect为代表的而虚拟机保护也就成为了当今最安全的保护方式。随着虚拟机保护技术的日益成熟,许多基于壳技术的加密软件也转向虚拟机加密方式,现在,上述的几种加壳保护软件也都或多或少的包含了虚拟机加密功能。可见,虚拟机加密保护在安全方面做得较好,但是存在过大的性能损耗,影响了这种加密机制的广泛使用。虚拟机保护是以效率换取安全的,一条原始的汇编指令经过VM处理后会膨胀几十倍甚至几百倍,执行效率会大大下降。正因如此,VM保护一般采取提供SDK的方式。不过对于一些对执行效率要求较高的程序,虚拟机保护就不适合了。
技术实现思路
本专利技术所要解决的技术问题之一是需要提供一种能够较好地防破解的Windows平台可执行文件API (Application Programming Interface,应用程序编程接口)延迟导入保护方法。为了解决上述技术问题,本专利技术提供了一种。该方法包括:启动调试器;由所述调试器以调试方式启动用户目标程序,以生成目标进程;所述目标进程通过触发断点异常的方式来通知所述调试器进行API导入及修改被调试程序的EIP。其中,所述目标进程通过触发断点异常的方式来通知所述调试器进行API导入及修改被调试程序的EIP的步骤,包括:所述调试器利用WaitForDebugEvent函数等待所述目标进程产生的调试事件;所述调试器在检测到所述目标进程触发的调试事件时,判断该调试事件是否为断点异常事件;在判断为是断点异常事件时,所述调试器进行API导入及修改所述目标进程的EIP。其中,在所述目标进程通过触发断点异常的方式来通知所述调试器进行API导入及修改所述目标进程的EIP之前,所述目标进程注册筛选器异常处理函数,所注册的筛选器异常处理函数用于:若检测到所述目标进程所触发的断点异常被丢弃且所述目标进程被恢复运行,则所述目标进程进入死循环或退出。进一步,该方法还包括:所述目标进程注册筛选器异常处理函数之后,产生第一指定异常事件;所述调试器在检测到所述目标进程触发的所述第一指定异常事件时,对所述用户目标程序进行解密操作。其中,所述目标进程通过触发断点异常的方式来通知所述调试器进行API导入及修改被调试程序的EIP的步骤,包括:所述目标进程在要调用API时产生第二指定异常事件;所述调试器在检测到所述目标进程触发的所述第二指定异常事件时,加载相应的DLL,计算出所述目标进程要调用的函数地址,并将该函数地址返回给所述目标进程。其中,所述目标进程注册在要调用API时产生第二指定异常事件的步骤,包括:在所述目标进程通过触发断点异常的方式来通知所述调试器进行API导入及修改所述目标进程的EIP之前,所述目标进程构造一个采用int3指令的机器码cc填充的int3表,然后修改其导入地址表(IAT),将其导入地址表中每一项按顺序指向该int3表。其中,所述调试器在检测到所述目标进程触发的所述第二指定异常事件时、加载相应的DLL、计算出所述目标进程要调用的函数地址并将该函数地址返回给所述目标进程的步骤,包括:计算发生异常的虚拟地址与int3表表头的偏移地址,得出调用API函数的序号;若在所述导入地址表中查找到该序号对应的导入地址,则利用所述导入地址修正目标线程的上下文以使得所述目标线程调用该API函数。其中,所述调试器在检测到所述目标进程触发的所述第二指定异常事件时、加载相应的DLL、计算出所述目标进程要调用的函数地址并将该函数地址返回给所述目标进程的步骤,包括:计算发生异常的虚拟地址与int3表表头的偏移地址,得出调用API函数的序号;若在所述导入地址表中未查找到该序号对应的导入地址,依据该序号确定相应的DLL名和API函数名,将确定的DLL名和API函数名写入到目标进程中预留的地址并修改目标本文档来自技高网
...

【技术保护点】
一种Windows平台可执行文件API延迟导入保护方法,其特征在于,包括:启动调试器;由所述调试器以调试方式启动用户目标程序,以生成目标进程;所述目标进程通过触发断点异常的方式来通知所述调试器进行API导入及修改被调试程序的EIP。

【技术特征摘要】

【专利技术属性】
技术研发人员:郑子琛
申请(专利权)人:中标软件有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1