首页> 中国专利> 一种基于隐写术的代码保护及还原方法

一种基于隐写术的代码保护及还原方法

摘要

本发明公开了一种基于隐写术的代码保护及还原方法。本方法为:1)利用所选隐写算法将重要软件中的待保护程序代码嵌入到所选图像载体中,生成携码图像;2)搜索所嵌入的每一程序代码在该重要软件中的位置,然后在对应的位置插入该图像读取操作和代码提取还原操作;3)对步骤2)处理后的代码进行重新编译并写入所选隐写算法的隐写密钥,得到一提供该程序代码保护的安全软件。还原端运行所述安全软件,提取所述隐写密钥,当执行到所述图像读取操作和代码提取还原操作时,利用与所述隐写算法相应的代码提取方法和所述隐写密钥,从携码图像中还原出隐藏的所述程序代码。本发明提高了重要软件的安全性。

著录项

  • 公开/公告号CN104765986A

    专利类型发明专利

  • 公开/公告日2015-07-08

    原文格式PDF

  • 申请/专利权人 中国科学院信息工程研究所;

    申请/专利号CN201510098128.0

  • 发明设计人 易小伟;李金才;赵险峰;

    申请日2015-03-05

  • 分类号G06F21/12(20130101);

  • 代理机构北京君尚知识产权代理事务所(普通合伙);

  • 代理人司立彬

  • 地址 100093 北京市海淀区闵庄路甲89号

  • 入库时间 2023-12-18 09:43:13

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-03-01

    未缴年费专利权终止 IPC(主分类):G06F21/12 授权公告日:20180109 终止日期:20180305 申请日:20150305

    专利权的终止

  • 2018-01-09

    授权

    授权

  • 2015-08-05

    实质审查的生效 IPC(主分类):G06F21/12 申请日:20150305

    实质审查的生效

  • 2015-07-08

    公开

    公开

说明书

技术领域

本发明涉及一种基于隐写术的代码保护及还原方法,属于信息隐藏技术领域,特别涉及 软件重要代码的保护及还原方法。

背景技术

随着计算机软件技术的日益普及,盗版软件让企业蒙受了巨大的损失,软件版权保护受 到业界的重点关注。国际数据资讯公司(International Data Corporation,IDC)和新加坡国立 大学展开的一项最新研究显示,2014年盗版软件或导致全球企业损失近5000亿美元;另据 商业软件联盟(Business Software Alliance,BSA)最新的全球调查显示,亚太地区软件盗版 率已攀升至62%,其中我国所受商业损失最大,高达87.6亿美元。因此,保护软件的重要代 码对遏制软件盗版起着至关重要的作用。

从安全需求上看,重要软件的编制需要有基本的代码保护技术作为支撑,以对抗静态代 码分析手段,避免软件操作意图通过代码暴露(参考:白金荣,王俊峰,赵宗渠.基于PE静 态结构特征的恶意软件检测方法,计算机科学,40(1):122-126,2013年1月)。虽然对静态 代码的保护仅仅是相关保护技术的一部分,但是,这种保护一般非常必要,得到了大量应用。

软件加壳技术是当前一种常用的保护软件版权、防止软件被破解的技术,它通过利用加 密或压缩形式来保护软件代码,加壳后的软件可以直接运行但是无法识别源代码(参考文献: M.Sikorski and A.Honig.Practical Malware Analysis:The Hands-On Guide to Dissecting  Malicious Software.No Starch Press,San Francisco,CA,USA,2012;徐向阳,解庆春,刘勇, 俞笛,刘寅.PE文件隐型加壳技术的研究与实现,计算机应用研究,26(1):337-341,2009年1 月)。至目前,网上出现了大量的加壳软件,如ASProtect、ACProtect、Armadillo Custom、 Dbpe、The Enigma Protector、EXECryptor、EXE Stealth、Xtreme-Protector、ZProtect等。但 是,由于加壳软件的特点较明显,代码检测系统已普遍能识别它们并做出警告(参考文献: B.Tao,R.Isawa,S.Guo and D.Inoue.Efficient Malware Packer Identification Using Support  Vector Machines with Spectrum Kernel.In:Proc.2013Eighth Asia Joint Conference on  Information Security(Asia JCIS),pp.69-76,July 25-26,2013,Seoul),例如,瑞星软件能够“识 别数百种加壳工具”(参考:陈勤,黄剑军,褚一平,方海英.基于带权欧拉距离的PE文件 壳检测技术,计算机工程与科学,32(7):1-3,7,2010年);有些脱壳软件甚至能对加壳软件 进行破解,还原出原先的代码,如Procdump32、Un-ASPACK、LinxerUnpacker、Symbian Unpack  Tool、WinUpack Stripper、RL!dePacker等(参考:看雪学院安全论坛. http://tools.pediy.com/unpacker.htm,2013)。此外,从应用方式上看,基于加壳技术的代码保 护有“此地无银三百两”的行为特征,同隐蔽性需求相矛盾。因此软件加壳技术在实际应用 中存在隐蔽性差、安全性较弱问题。

从20世纪末开始,多媒体在计算机和网络系统中大量使用,由于多媒体信息冗余较大, 使得基于多媒体为载体的信息隐藏获得了迅速发展。近年来,一些代码编制者也逐渐发现了 用信息隐藏方法保护代码的潜在优势,设计了一些代码隐藏方法,即将代码隐藏在随软件发 行的图像、图标图像、视频或者格式化文档等数字媒体中,在正常的媒体操作中提取隐藏的 代码执行。显然,采用这类代码保护方法形成的软件没有特定的组成结构特点(如加密数据 区或者压缩数据区),而当前软件中包含大量图像资源(如闪屏、图标、窗口背景、Web页 面图像、表情符等),使得对图像的操作显得非常自然。

在利用加壳技术来保护软件代码的发明专利方面,中国发明专利102609666A提出了一 种可执行程序加壳保护方法,中国发明专利102136053A利用ELF文件框架提出了一种对可 执行文件源代码保护的方法,中国发明专利101964040A提出了一种基于PE Loader的软件加 壳保护方法。然而,在利用代码隐藏技术的代码保护方法还未见公开的发明专利。

根据上述分析可以发现当前采用代码隐藏技术是保护软件代码的一种新技术发展趋势, 它是替代加壳技术的有效手段之一,得到的最终软件不像加壳软件那样具有较显著的特征。 但是,当前基于代码隐藏方法的代码保护还处于一个技术上的初级阶段,这主要体现在以下 两个方面:

(1)代码隐藏方法的隐蔽性不强。

当前,代码隐藏保护一般没有假设隐写分析(参考:J.Fridrich,J.Kodovsky,and V.Holub. Rich models for steganalysis of digital images.IEEE Transactions on Information Forensics and  Security,7(3):868-882,2012)的威胁,实施信息隐藏的方法非常简陋,甚至造成视觉上的感 知异常情况,或者代码的存储位置很容易分析出来,因此比较容易被检测到。Bit Defender和 Symantec公司的产品也能够类似地识别JPEG文件的异常。

由于当前的检测手段能够直接从隐藏载体上分析出异常,甚至能够直接提取出隐藏的保 护代码,因此需要加强隐藏方法对代码保护的隐蔽性。从技术实现上分析,可以采用更好的 隐写方法实施代码隐藏。当前,隐写码的出现(参考:J.Fridrich and D.Soukal.Matrix embedding  for large payload.IEEE Trans.Information Forensics and Security,2006,1(3):390–395),使得可 以减少需要修改载体的次数,自适应隐写的出现(参考:T.T.Filler,and P.Bas.Using  high-dimensional image models to perform highly undetectable steganography.In Proc.IH 2010, LNCS 6387,pp.161–177,Springer,2010),使得能够减小对统计量的影响,它们有待应用于 提高以上隐藏代码的抗隐写分析的能力。

(2)代码提取的隐蔽性不够强。

当前,代码隐藏保护的另一个不足是对提取隐藏代码的操作保护不够,使得反编译后分 析者很可能看出提取操作中的特殊操作。

现有的代码隐藏保护方法没有能够很好地隐蔽代码的提取操作,反编译后能够找到具体 的定位和解密操作。

发明内容

针对现有代码隐藏保护方法中提取操作隐蔽性不强的问题,本发明提供一种基于隐写术 的代码保护方法,通过利用图像来隐藏软件的重要代码,进一步加强对提取操作的保护,将 提取操作混合在载体媒体的读取等正常操作中,无需加解密隐藏代码,并且避免用脚本类语 言写这类操作的程序,使得反编译的结果更难反映程序的基本意图,保护代码的隐蔽性及代 码提取操作的隐蔽性进而保护软件的安全性,以满足软件对重要代码保护的要求。

本发明技术解决方案是一种基于隐写术的代码保护方法,它主要包括代码隐藏算法和代 码还原算法两个部分:

代码隐藏算法利用先进的信息隐写技术,比如HUGO、F5、J-UNIWARD,将待保护的重 要程序代码以二进制模式嵌入到图像载体,其中信息嵌入技术的选择根据载体图像格式、操 作复杂性及抗隐写分析需求确定,载体图像的大小和所选择的隐写技术会影响可隐藏保护代 码的长度。在保证隐写容量和既定嵌入操作复杂度情况下,将代码完整嵌入到载体图像。代 码隐藏算法的输入数据包括需要保护的重要代码和载体图像,输出数据是携码图像。

代码还原算法是代码隐藏算法的反向算法,它从携码图像中完整地恢复出隐藏的代码。 代码还原算法的输入数据是携码图像,输出数据是隐藏代码。代码还原操作在受保护代码执 行前完成执行,以保证还原的隐藏代码能够正确被执行。

一种基于隐写术的代码保护方法,保护代码隐藏端通过利用代码隐藏算法将需要保护的 重要软件代码隐藏于载体图像中,保护代码还原端利用代码还原算法从图像中提取还原出保 护代码,包括以下步骤:

(S1)保护代码隐藏端选择隐藏代码的载体图像,获取重要软件的待保护代码,其中载 体图像包括两类:位图图像(以BMP图像格式为典型代表)和压缩图像(以JPEG图像格式 为典型代表);

(S2)依据步骤S1所选择载体图像确定合适的隐写术,其中隐写术包括基于空域的图像 隐写术(以LSB算法和HUGO算法为典型代表)和基于变换域的图像隐写术(以F5算法和 J-UNIWARD算法为典型代表);

(S3)利用步骤S1所选择载体图像、步骤S2所确定的图像隐写术、以及隐写密钥,将 待保护的重要软件代码隐藏到图像载体中,并生成隐藏保护代码的携码图像,其中隐写密钥 作为代码隐藏算法的输入参数,隐写密钥通常是长度为0~16字节的英文字符或数字,具体由 隐写术实现程序确定;

(S4)搜索该重要软件代码需要执行保护代码的位置,并且根据步骤S2所选择的代码嵌 入技术,在该重要软件的执行保护代码前插入图像读取操作和代码提取还原操作,保证软件 在需要执行保护代码前能从图像中恢复出隐藏代码;保护代码通常封装成单独的执行模块, 可以利用保护代码模块名称在软件代码中搜索;也可以对原始的保护代码执行过程进行改造, 分成2个部分:提取还原需要执行的保护代码和执行还原代码。

(S5)重新编译步骤S4的重要软件代码,获得提供重要代码保护的安全软件。通过利用 步骤S1~S5实现安全软件制作,将软件重要代码隐藏在图像中进行隐蔽性保护;

(S6)保护代码还原端运行安全软件,执行步骤S4中的图像读取操作和隐藏代码提取还 原操作,利用与步骤S2中代码嵌入技术相应的代码提取技术和隐写密钥,从携码图像中还原 出隐藏的保护代码,其中代码提取方式与代码嵌入方式需要对应,并且隐写密钥需相同,通 常在步骤S4中隐写密钥可作为常量从软件获得;本发明将隐写密钥写入到软件代码中,保证 重要代码可以执行,但是敌手无法获知重要代码的内容;其实隐写密钥的运用方式与现有的 软件序列号保护方式可以兼容,可以通过用户输入正确序列号密码进行注册验证。

(S7)依据软件程序执行保护代码和软件其它操作代码。通过利用步骤S6~S7实现执行 提取软件中的保护代码并触发该代码的运行。

本发明与现有技术相比的有益效果在于:

(1)本发明中,保护代码具有更高的隐蔽性。与基于加壳技术的代码保护方法相比,本 发明提出的代码隐藏方法利用先进的信息隐写技术,将保护代码隐藏在图像载体中,具有更 好的代码隐蔽性。

(2)本发明中,保护代码能够抵抗代码静态分析。代码隐藏技术采取图像隐写算法将保 护代码隐藏到图像载体中,代码静态分析方法无法获悉真实受保护的代码进行代码分析。

(3)本发明中,保护代码提取操作具有更高的安全性。与基于加壳技术的代码保护方法 相比,本发明利用将隐藏信息提取操作与图像读取操作相结合,比脱壳装载程序更难识别, 保证了代码提取操作的安全性。

附图说明

图1是本发明方法实施例的实现流程图;

图2是本发明方法实施例的功能模块示意图;

图3是本发明方法中保护代码隐藏算法的实施流程图;

图4是本发明方法中保护代码还原算法的实施流程图;

图5是本发明方法中安全软件改造的实施流程图。

具体实施方式

下面结合附图对本发明进行进一步详细描述。

如图2所示,是本发明方法的实现功能模块示意图,代码保护方法可以表示为一个五元 组,也即Σ=〈C,M,C′,Ek,Dk〉,其中C为载体图像集合、M为保护代码集合、C′为载体图像 隐藏保护代码后所得到的携码图像集合、Ek为代码隐藏算法、Dk为代码还原算法。在代码保 护方法Σ中,包括2个主要算法模块:代码隐藏算法模块和代码还原算法模块。各模块的功 能需求如下:

1.代码隐藏算法模块

在隐写秘钥k控制下,该模块将待保护代码M嵌入到载体图像C中,输出携码图像C′。 该模块执行代码隐藏算法Ek可以表示为:

Ek:C×M→C′

2.代码还原算法模块

在隐写秘钥k控制下,该模块从携码图像C′中提取出保护代码M。该模块执行代码还原 算法Dk可以表示为:

Dk:C′→M

如图1所示,本发明实现过程如下:

a、选择隐藏代码的载体图像,获取待保护的重要软件代码;

b、依据步骤a所选择的载体图像,确定合适的隐写术;

c、利用信息术和隐写密钥,将待保护的重要软件代码隐藏到载体图像生成携码图像;

d、搜索重要软件需要执行保护代码的位置,并插入图像读取操作和代码提取还原操作;

e、重新编译重要软件代码,获得提供重要代码保护的安全软件;

f、运行安全软件,执行代码提取还原操作,实现从携码图像中还原隐藏的保护代码;

g、执行还原的保护代码及软件其它操作代码。

本发明中代码隐藏算法模块执行代码隐藏算法E(·)可以表示成

c′=E(c,m,k)

其中,模块输入参数有载体图像c、待保护的软件代码m和隐写秘钥k,模块输出是隐 藏保护代码的携码图像c′。此外,在嵌入过程中保护代码m作为字节流方式进行处理,隐写 秘钥k可以是任意可打印ASCII码字符、密钥长度通常为0~16字节,并且本发明可以根据输 入载体图像c的格式属性自动选择合适的隐写术,具体要求如表1所示:

表1为隐写术选择表

代码隐藏算法的实施流程图如图3所示,具体实现步骤为:

步骤1:执行模块参数输入,输入参数包括载体图像c、保护代码m和隐写密钥k,其中 隐写密钥k是可选输入参数;

步骤2:根据步骤1输入的载体图像c,通过判定c的格式属性自动选择合适的隐写术;

步骤3:根据步骤2的判定结果确定采用的隐写术,如果判定结果为A即输入载体图像 格式是位图格式则执行步骤4,如果判定结果为B即输入载体图像格式是压缩图格式则执行 步骤5;

步骤4:依据上表所述选择一种基于空域的隐写术,并执行步骤6;

步骤5:依据上表所述选择一种基于变换域的隐写术,并执行步骤6;

步骤6:利用步骤4或步骤5的隐写术以及步骤1输入的隐写密钥k,将步骤1输入的保 护代码m隐藏到步骤1输入的载体图像c中;

步骤7:如果步骤6执行代码隐藏算法E()成功则生成携码图像c’,否则跳转重新执行步 骤1。

本发明中代码还原算法模块执行代码还原算法D(·),可以表示成

m=D(c′,k)

其中,模块输入参数有隐藏保护代码的携码图像c′和隐写秘钥k,模块输出是提取得到 受保护的软件代码m。特别地,代码还原算法模块选择的隐写算法必须与代码隐藏算法模块 选择的隐写算法相一致,否则提取出的软件保护代码m′会发生错误,即m′≠m。为了保证隐 藏代码的安全软件能够在执行时正确提取出保护代码,在改造原始软件代码时,需要将隐写 密钥写在软件代码中。

代码还原算法的实施流程图如图4所示,具体实现步骤为:

步骤1:从安全软件中提取出隐写密钥k,执行模块参数输入,输入参数包括携码图像c’ 和隐写密钥k,并执行隐藏保护代码后的安全软件;

步骤2:根据步骤1执行安全软件的代码提取还原操作,判定所采用的隐写术;

步骤3:根据步骤2的判定结果确定具体的隐写术,如果判定结果为A则执行步骤4, 如果判定结果为B则执行步骤5;

步骤4:选择基于空域的隐写术,具体实施算法与隐藏代码算法中的隐写术相一致,并 执行步骤6;

步骤5:选择基于变换域的隐写术,具体实施算法与隐藏代码算法中的隐写术相一致, 并执行步骤6;

步骤6:利用步骤4或步骤5的隐写术以及步骤1输入的隐写密钥k,从步骤1输入的携 码图像c’中提取还原得到保护代码m;

步骤7:如果步骤6执行代码还原算法D(·)成功则继续执行步骤8,否则跳转执行步骤1;

步骤8:执行保护代码m。

为了确保安全软件能够执行隐藏的保护代码,本发明在软件中执行保护代码前插入隐藏 代码提取操作,安全软件改造的实施流程图如图5所示,具体实现步骤为:

步骤1:依据代码隐藏算法E(·)中采用的隐写术和隐写密钥k,确定代码还原算法D(·)中 相应的隐写术和隐写密钥k;

步骤2:依据步骤1编制代码还原模块代码;

步骤3:搜索软件中需要运行保护代码的位置,插入图像读取操作代码和调用代码还原 模块代码;

步骤4:重新编译步骤3修改后的软件代码,获得提供代码隐藏保护的安全软件。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号