[发明专利]嵌入在shell代码中的软件许可有效
申请号: | 200980161892.0 | 申请日: | 2009-10-12 |
公开(公告)号: | CN102576391A | 公开(公告)日: | 2012-07-11 |
发明(设计)人: | 程彼得 | 申请(专利权)人: | SAFENET公司 |
主分类号: | G06F21/00 | 分类号: | G06F21/00 |
代理公司: | 北京驰纳智财知识产权代理事务所(普通合伙) 11367 | 代理人: | 谢亮;唐与芬 |
地址: | 美国马里兰州*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 嵌入 shell 代码 中的 软件 许可 | ||
技术领域
本发明涉及保护从未经过授权的复制和/或执行软件的系统和方法,尤其是指,涉及一种系统和方法,通过包含嵌入的许可信息和/或通过安全通道和受保护的应用程序进行通信的shell代码来保护软件。
背景技术
对于软件供应商而言,软件盗版是一个持续存在的问题。许多阻止软件盗版的技术已经被开发,并且结合这些技术的产品被软件供应商使用以确保未授权的复制和/或使用他们的软件应用程序。
一种软件应用保护技术使用链接模块,所述链接模块需要开发者修改原始的应用程序代码来调用特定的功能,例如,用于许可条件的检查功能。另一种保护技术被称为Shelling。Shelling通常不需要改变应用程序代码。伴随着Shelling技术,shell产生进程读取原始的应用程序可执行文件并且产生修改的新的可执行文件作为所谓的被加外壳(Shelled)应用程序,所述Shelled应用程序包含封装原始应用程序的保护代码的”外层”。进一步地,当使用Shelling时,一个或更多的应用程序部分,例如可执行的代码、数据、输入表、资源等等,当生成shell代码时能够通过加密和/或压缩被保护,并且当被保护的应用程序运行时需要shell使得被保护的代码部分可用。
shell通常执行一个功能以确认用于应用程序的有效许可存在。例如,传统的基于shell的应用程序保护的解决方案通常将带有存储许可的shell代码的被保护的应用程序进行包装或从被保护的应用程序中分离出存储位置中的关键信息。许可信息可以被存储在注册表、数据库、文件、隐藏的磁盘扇区等等。提供一个或更多的应用程序编程接口(APIs)以访问许可信息,并且shell代码能够调用应用程序编程接口(APIs)以验证被保护的应用程序是否被正确地许可。
在Shelling中固有的一个漏洞是仅由保护的外层提供软件应用程序保护。因此,破解者可能能够通过破解唯一的保护外层以获得访问被保护的应用程序。当启动Shelled应用程序时,shell代码在原始的应用程序代码之前执行,并且shell代码执行通常在固定的可识别的模式中执行。破解者能够按照代码执行(例如,通过运行在调试器下的shelled程序),并且一旦代码执行序列被了解,破解者能够修改代码(例如,通过给shelled应用程序可执行文件打补丁)以绕过和/或禁用许可检查。
链接模块和Shelling也可以一起使用。例如,在一种情况中,shell代码能够被附加到被加密和/或被压缩的应用程序部分。当shelled应用程序第一次执行时,shell最初获得控制并且能够执行与安全相关的功能,例如检查应用程序的完整性、检查调试器的存在、解密和/或解压缩应用程序部分,并且在将控制传递给应用程序之前初始化应用程序进程,例如输入功能表和再定位表。原始的应用程序代码也能够被修改用于重定向一些系统应用程序编程接口(APIs)到shell代码中。然后,应用程序能够继续在控制被转移到应用程序之后与shell代码进行交互。此外,自我修改的代码功能能够根据shell被提供,例如,在运行时加密某些应用程序代码片段,并且shell代码能够在所述代码片段被执行之前解密那些代码片段,并且在它们运行后被再次加密。
然而,在使用Shelling的解决方案中,应用程序代码和Shelled应用程序的shell代码驻留在具有可识别地不同地址的存储器的不同部分。现有技术中,Shelling解决方案没有掩盖应用程序代码地址和shell代码地址之间的不同。因此,破解者可以能够解开受保护的应用程序代码并且确定哪些是shell部分的代码,及哪些是shell保护的应用程序的部分。如果是的话,破解者能够继续删除或修改shell代码和应用程序代码之间的链接。例如,在程序执行过程中,加密和解密代码能够通过使用无操作(NOP)指令被禁用,以取代解密和加密指令。
图1显示了传统的实现自我修改代码功能的示例。如上所示,打包工具使用两个宏来确定被保护的代码,SHELL_CRYPT_BEGIN和SHELL_CRYPT_END。在编译和打包之后,图2A和图2B显示了反汇编代码。
在应用程序被编译之后,生成保护shell代码并且生成Shelled应用程序可执行文件。然后,Shelled 应用程序可执行文件能够被破解者使用调试工具来检查,例如OllyDbg,例如,拆卸Shelled应用程序可执行文件,或二进制代码。OllyDbg是强调二进制代码分析的调试器。它能够跟踪注册表、确认程序、API调用、开关、表、常量和字符串,并且从目标文件和库中定位例程。这类的工具能够被用于逆向工程和破解程序。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于SAFENET公司,未经SAFENET公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200980161892.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:功率转换系统
- 下一篇:一种基于TD-SCDMA的车载收音装置