当前位置: 首页 > 专利查询>SAFENET公司专利>正文

嵌入在shell代码中的软件许可制造技术

技术编号:7571480 阅读:328 留言:0更新日期:2012-07-15 04:48
本发明专利技术提供用于保护和验证初始应用程序许可的软件应用程序保护方法和系统。所述系统读取初始应用程序可执行文件,并且生成包涵初始应用程序的shelled应用程序和包括许可信息的shell。Shelled应用程序实现许可APIs,并且在初始应用程序和shell之间的shelled应用程序内建立安全通信。用于初始应用程序的许可仅由shelled应用程序验证。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及保护从未经过授权的复制和/或执行软件的系统和方法,尤其是指, 涉及一种系统和方法,通过包含嵌入的许可信息和/或通过安全通道和受保护的应用程序进行通信的Shell代码来保护软件。
技术介绍
对于软件供应商而言,软件盗版是一个持续存在的问题。许多阻止软件盗版的技术已经被开发,并且结合这些技术的产品被软件供应商使用以确保未授权的复制和/或使用他们的软件应用程序。一种软件应用保护技术使用链接模块,所述链接模块需要开发者修改原始的应用程序代码来调用特定的功能,例如,用于许可条件的检查功能。另一种保护技术被称为 Sielling。Celling通常不需要改变应用程序代码。伴随着Sielling技术,shell产生进程读取原始的应用程序可执行文件并且产生修改的新的可执行文件作为所谓的被加外壳 Ghelled)应用程序,所述Sielled应用程序包含封装原始应用程序的保护代码的”外层”。 进一步地,当使用Sielling时,一个或更多的应用程序部分,例如可执行的代码、数据、输入表、资源等等,当生成shell代码时能够通过加密和/或压缩被保护,并且当被保护的应用程序运行时需要shell使得被保护的代码部分可用。shell通常执行一个功能以确认用于应用程序的有效许可存在。例如,传统的基于 shell的应用程序保护的解决方案通常将带有存储许可的shell代码的被保护的应用程序进行包装或从被保护的应用程序中分离出存储位置中的关键信息。许可信息可以被存储在注册表、数据库、文件、隐藏的磁盘扇区等等。提供一个或更多的应用程序编程接口(APIs) 以访问许可信息,并且shell代码能够调用应用程序编程接口(APIs)以验证被保护的应用程序是否被正确地许可。在Sielling中固有的一个漏洞是仅由保护的外层提供软件应用程序保护。因此, 破解者可能能够通过破解唯一的保护外层以获得访问被保护的应用程序。当启动Sielled 应用程序时,shell代码在原始的应用程序代码之前执行,并且shell代码执行通常在固定的可识别的模式中执行。破解者能够按照代码执行(例如,通过运行在调试器下的shelled 程序),并且一旦代码执行序列被了解,破解者能够修改代码(例如,通过给shelled应用程序可执行文件打补丁)以绕过和/或禁用许可检查。链接模块和Sielling也可以一起使用。例如,在一种情况中,shell代码能够被附加到被加密和/或被压缩的应用程序部分。当shelled应用程序第一次执行时,shell 最初获得控制并且能够执行与安全相关的功能,例如检查应用程序的完整性、检查调试器的存在、解密和/或解压缩应用程序部分,并且在将控制传递给应用程序之前初始化应用程序进程,例如输入功能表和再定位表。原始的应用程序代码也能够被修改用于重定向一些系统应用程序编程接口(APIs)到shell代码中。然后,应用程序能够继续在控制被转移到应用程序之后与shell代码进行交互。此外,自我修改的代码功能能够根据shell被提供,例如,在运行时加密某些应用程序代码片段,并且shell代码能够在所述代码片段被执行之前解密那些代码片段,并且在它们运行后被再次加密。然而,在使用Sielling的解决方案中,应用程序代码和Sielled应用程序的shell 代码驻留在具有可识别地不同地址的存储器的不同部分。现有技术中,Shelling解决方案没有掩盖应用程序代码地址和shell代码地址之间的不同。因此,破解者可以能够解开受保护的应用程序代码并且确定哪些是shell部分的代码,及哪些是shell保护的应用程序的部分。如果是的话,破解者能够继续删除或修改shell代码和应用程序代码之间的链接。 例如,在程序执行过程中,加密和解密代码能够通过使用无操作(NOP)指令被禁用,以取代解密和加密指令。图1显示了传统的实现自我修改代码功能的示例。如上所示,打包工具使用两个宏来确定被保护的代码,SHELL_CRYPT_BEGIN和SHELL_CRYPT_END。在编译和打包之后,图 2A和图2B显示了反汇编代码。在应用程序被编译之后,生成保护shell代码并且生成Celled应用程序可执行文件。然后,Sielled应用程序可执行文件能够被破解者使用调试工具来检查,例如 OllyDbg,例如,拆卸Sielled应用程序可执行文件,或二进制代码。OllyDbg是强调二进制代码分析的调试器。它能够跟踪注册表、确认程序、API调用、开关、表、常量和字符串,并且从目标文件和库中定位例程。这类的工具能够被用于逆向工程和破解程序。图2A显示出这类反汇编代码的示例性片段。在每一行的开头显示程序地址,并且都具有格式0040XXXX。在地址004013A2的代码调用在地址004A6B81 (代码的顶端行)处的代码来解密代码的后续行。在执行地址004013A2的代码之后,在图2B中显示被更改的代码。明显地,所谓地址004A6B81和004AADBB(在图2A和图2B中在第004013A2和004013BD 行的调用语句中强调)被放置在和程序代码地址不同的地址部分,所述程序代码地址在,即地址0040XXXX处的每一行的代码的开头指示。破解者可能推测0040XXXX形式的地址位置属于应用程序代码地址空间,然而0040XXXX形式的地址位置属于shell代码地址空间。在图3中示例了不同代码部分,其中不同块表示了位于不同地址空间的代码部分。如图所示,不同代码部分的地址空间具有可识别的界限。示例性地,在程序执行的过程中,shell代码能够根据需要解密和加密应用程序代码的部分,从而提高应用程序代码的安全性。即便如此,破解者可能能够分析程序,识别解密和加密shell进程的存在,并且移除在shell代码和应用程序代码之间的链接,例如,通过使用无操作(NOP)指令来取代加密指令。类似地,破解者可能能够识别检查进程的许可的存在,并且删除Sielled应用程序代码和存储在Sielled应用程序的外部的许可信息之间的链接。因此,需要一种应用程序保护技术去抑制破解,使得对于破解者来说更困难地解除许可检查和/或修改在应用程序代码和shell代码之间的通信。
技术实现思路
本专利技术披露了在shell中嵌入应用程序软件许可信息,以及确保shell和Sielled 应用程序中的应用程序代码之间的通信。在shell产生过程中,许可能够被嵌入在shell 代码中。在shell中能够提供一组应用程序编程接口(APIs)并且应用程序能够被修改便于和应用程序编程接口(APIs)交互以访问许可信息。应用程序代码和shell代码能够使用安全通道以加强他们之间的通信链接的安全。可以理解的是,无论是上述的一般性描述还是下面的详细的描述都是示例性的和解释性的,旨在进一步地提供本专利技术的保护范围。附图说明附图被用于提供对本专利技术进一步地理解,并且示出了本专利技术的优选实施例和说明的特征。所述附图和具体实施方式一起用于解释本专利技术的原理,所附的权利要求书定义了本专利技术的保护范围。在图中。图1显示用于初始化生成保护的shell的代码。图2A和图2B显示shelled应用程序代码的修改以作为shelled应用程序可执行文件。图3显示在shelled应用程序的代码段之本文档来自技高网
...

【技术保护点】

【技术特征摘要】
【国外来华专利技术】

【专利技术属性】
技术研发人员:程彼得
申请(专利权)人:SAFENET公司
类型:发明
国别省市:

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

1
相关领域技术