在宿主文件中捆绑文件的方法及装置的制作方法

文档序号:6379977阅读:203来源:国知局

专利名称::在宿主文件中捆绑文件的方法及装置的制作方法
技术领域
:本发明涉及通信领域,具体涉及一种在宿主文件中捆绑文件的方法及装置。
背景技术
:文件捆绑又可以称为文件隐藏,具体做法是在一个文件中捆绑其他的文件,以达到减少文件个数或隐藏部分文件的效果。其中,捆绑其他文件的文件称为宿主文件,被捆绑到宿主文件中的文件称为捆绑文件。由于PE文件结构本身存在着很多冗余空间,因此,PE文件经常作为宿主文件,在其中捆绑其他文件。PE文件存在的通常比较大的空闲空间为(I)相邻节表之间由于数据对齐所产生的冗余空间;(2)PE文件的最末的节表之后由于数据对齐产生的冗余空间。(3)PE结构中的DOSStub是为DOS程序预留的,其只有当该文件在在DOS下执行时,才会发挥真正的作用。因此,在Windows平台下,DOSStub完全没有作用,可以利用这部分的内容用来隐藏文件内容。(4)PE文件结构中的很多字段作为保留存在或者对可执行程序的执行没有影响,这部分的空间也可以用来隐藏文件内容,例如PE文件中的以下结构MajorLinkerVersion、MinorLinkerVersion>ajorOperatingSystemVersion、MinorOperatingSystemVersion>Checksum、SizeOfCode>SizeOfInitializedData以及SizeOfUninitializedData等。目前,在PE文件中捆绑其他文件时,首先需要寻找PE文件中的冗余空间,并计算出每个冗余空间的位置和大小,图I示出了对PE文件的冗余空间进行计算后得到的结果。从图I中可以看到,寻找到的PE文件中的冗余空间共有8处,其中,DOSStub部分的空闲空间为264B,节表和节之间的空闲空间为3280B,最后一个节后面的空闲空间为3328B,另外,reloc(重定位表信息)节、rsrc(资源)节、idata(导入文件名表)节、rdata(只读的初始化数据)节以及text(.exe或.dll文件的可执行代码)节中也都存在着冗余空间,全部冗余空间的大小总共为17488B。然后,根据冗余空间的总数量以及每个冗余空间的大小,将捆绑文件分割成若干个指定大小的子文件,其中,子文件的个数可以小于或等于冗余空间的总数量,子文件的大小与冗余空间的大小基本一致。最后,将分割后的各个子文件按一定的算法分配到PE文件的冗余空间中。但是,采用上述方式时,由于PE文件结构中的冗余空间容量较小且不连续,因此,比较适合对零散的小文件进行捆绑,通常无法对体积较大的文件进行捆绑。而且,由于PE文件结构中的冗余空间基本上都集中在PE文件的头部,因此,导致捆绑文件全部集中在PE文件的头部,信息量过于集中,因此,很容易被格式检查工具检测为异常进而报错,从而出现误报的情况。
发明内容鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的在宿主文件中捆绑文件的方法和相应的在宿主文件中捆绑文件的装置。依据本发明的一个方面,提供了一种在宿主文件中捆绑文件的方法,宿主文件包括多个以一定顺序排列的用于存储数据的节,该方法包括将待捆绑的文件转换为与宿主文件的格式相对应的捆绑文件,并生成捆绑文件的配置信息;将捆绑文件以及配置信息存储在宿主文件的最后一个节中;根据捆绑文件以及配置信息,修改宿主文件的最后一个节的结构信息以及宿主文件的结构信息。可选地,将待捆绑的文件转换为与宿主文件的格式相对应的捆绑文件的步骤之前进一步包括对待捆绑的文件内容进行压缩和/或加密处理。可选地,配置信息包括用于指示捆绑文件是否可执行的参数信息、用于在宿主文件中定位捆绑文件的位置信息,以及用于指示捆绑文件执行时的跳转地址的跳转指令。可选地,宿主文件还包括多个以一定顺序排列的用于存储节的结构信息的节表,则修改宿主文件的最后一个节的结构信息具体包括修改宿主文件的最后一个节表中的信息,最后一个节表用于存储最后一个节的结构信息,其中,最后一个节表中的信息包括节数据的大小,以及节数据的属性。可选地,宿主文件的结构信息包括宿主文件的文件大小以及宿主文件的入口函数。可选地,将捆绑文件以及配置信息存储在宿主文件的最后一个节中;根据捆绑文件以及配置信息的大小,修改宿主文件的最后一个节的结构信息以及宿主文件的结构信息的步骤具体包括申请一块内存空间,将宿主文件复制到内存空间,在复制的宿主文件的最后一个节中存储捆绑文件以及配置信息;根据捆绑文件以及配置信息的大小,修改复制的宿主文件的最后一个节的结构信息以及复制的宿主文件的结构信息;将修改后的宿主文件复制回磁盘空间。可选地,宿主文件为PE文件。根据本发明的另一方面,提供了一种在宿主文件中捆绑文件的装置,宿主文件包括多个以一定顺序排列的用于存储数据的节,该装置包括转换单元,其将待捆绑的文件转换为与宿主文件的格式相对应的捆绑文件,并生成捆绑文件的配置信息;捆绑单元,其将捆绑文件以及配置信息存储在宿主文件的最后一个节中;修改单元,其根据捆绑文件以及配置信息,修改宿主文件的最后一个节的结构信息以及宿主文件的结构信息。可选地,配置信息包括用于指示捆绑文件是否可执行的参数信息、用于在宿主文件中定位捆绑文件的位置信息,以及用于指示捆绑文件执行时的跳转地址的跳转指令。可选地,宿主文件还包括多个以一定顺序排列的用于存储节的结构信息的节表,则修改单元具体用于修改宿主文件的最后一个节表中的信息,最后一个节表用于存储最后一个节的结构信息,其中,最后一个节表中的信息包括节数据的大小,以及节数据的属性。可选地,宿主文件的结构信息包括宿主文件的文件大小以及宿主文件的入口函数。根据本发明的在宿主文件中捆绑文件的方法和相应的装置,可以在宿主文件的最后一个节中捆绑任意长度的文件,由此解决了现有技术中只能捆绑零散的小文件,且由于宿主文件头部的信息量过于集中而可能导致报错的问题,取得了能够捆绑任意长度的大文件,且不易被报错的有益效果。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的附图标记表示相同的部件。在附图中图I示出了现有技术中对PE文件的冗余空间进行计算后得到的结果示意图;图2示出了根据本发明一个实施例的在宿主文件中捆绑文件的方法的流程图;图3示出了本发明一个实施例的原始的宿主文件以及捆绑了三个捆绑文件之后的宿主文件的结构示意图;以及图4示出了根据本发明一个实施例的在宿主文件中捆绑文件的装置的结构图。具体实施例方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。图2示出了本发明实施例提供的一种在宿主文件中捆绑文件的方法。具体地,宿主文件可以是PE文件,或其他与PE文件具有类似结构的文件。在下面的描述中,以宿主文件是PE文件为例进行描述。为了便于理解,先简单介绍一下PE文件的结构。PE文件主要包括若干个以一定顺序排列的用于存储数据的节(section)。其中,每一个节所占用的存储空间相同,但是,每个节中存储的实际数据长度可能不同,因此,每个节中可能都具有用于存储数据的有效空间以及剩余的空闲空间。为了了解每个节中存储数据的情况,需要定义节的结构信息。节的结构信息具体包括一个节中存储的实际数据长度、节的起始地址等。因此,为了对每一个节的结构信息进行存储,PE文件中还包括若干个以一定顺序排列的用于存储节的上述结构信息的节表(sectiontable)。一般情况下,节表的数量与节的数量一致,每一个节表用于存储对应节的结构信息,例如,第一个节表用于存储第一个节的结构信息,第二个节表用于存储第二个节的结构信息,依此类推。如图2所示,该方法始于步骤S210,在步骤S210中,将待捆绑的文件转换为与宿主文件的格式相对应的捆绑文件,并生成捆绑文件的配置信息。其中,宿主文件(即PE文件)的格式为汇编语言数据结构定义的格式,因此,在本步骤中,首先需要将待捆绑的文件转换为汇编语言数据结构定义格式的文件作为捆绑文件,从而与宿主文件的格式相对应。另外,还需要生成该捆绑文件的配置信息。其中,配置信息可以包括用于指示捆绑文件是否可执行的参数信息、用于在宿主文件中定位捆绑文件的位置信息,以及用于指示捆绑文件执行时的跳转地址的跳转指令。可选地,在执行步骤S210之前,还可以进一步对待捆绑的文件内容进行压缩和/或加密处理,以减少待捆绑的文件的体积,或者使待捆绑的文件无法被未授权者读取,以提高安全性。在执行完步骤S210,得到捆绑文件和配置信息之后,执行步骤S220。在步骤S220中,将步骤S210中生成的捆绑文件以及配置信息存储在宿主文件的最后一个节中。执行完步骤S220后,继续执行步骤S230。在步骤S230中,根据上述捆绑文件以及配置信息的大小,修改宿主文件的最后一个节的结构信息以及宿主文件的结构信息。其中,在原始的宿主文件,即PE文件中,每个节所占用的存储空间都是相同的,且每个节对应的节表中存储了该节的结构信息,如该节存储的实际数据长度等。但是,在执行完步骤S220之后,由于在原始的宿主文件的最后一个节中进一步存储了上述的捆绑文件及配置信息,导致最后一个节的实际数据长度增加了,因此,最后一个节的结构信息也随之发生了改变,进而导致整个宿主文件的结构信息也发生了改变。所以,在步骤S230中需要根据上述的捆绑文件及配置信息的大小,修改宿主文件的最后一个节的结构信息以及宿主文件的结构信息,以便与加入捆绑文件后的情况相符。其中,根据上面的描述可知,宿主文件中还包括多个以一定顺序排列的用于存储节的结构信息的节表,因此,在步骤S230中修改宿主文件的最后一个节的结构信息时,只需修改宿主文件的最后一个节表中的信息即可。另外,宿主文件的结构信息主要包括宿主文件的文件大小以及宿主文件的入口函数,因此,在步骤S230中还需要相应地修改上述信肩、O具体地,在执行上述步骤S220和步骤S230时,可通过如下方式实现首先,申请一块内存空间,将宿主文件复制到该内存空间中,在复制的宿主文件的最后一个节中存储捆绑文件以及配置信息;然后,根据捆绑文件以及配置信息,修改复制的宿主文件的最后一个节的结构信息以及复制的宿主文件的结构信息;最后,将修改后的宿主文件复制回磁盘空间即可。采用上述方式可以实现对一个或多个文件的捆绑,而且,当捆绑文件的长度较长时,宿主文件最后一个节的长度可以扩展,因此,可以实现对大文件的捆绑。下面以一个优选实施例详细描述一下本发明提供的在宿主文件中捆绑文件的方法,在该方法中,宿主文件为PE文件。该方法包括以下步骤步骤一对待捆绑的文件进行压缩和/或加密处理。在本步骤中,可以对待捆绑的文件的文件内容进行压缩和/或加密两种处理方式。通过压缩可以缩小待捆绑文件的体积,从而更方便地捆绑到宿主文件中。在压缩时,可以采用多种算法,如aplib算法。通过加密可以使待捆绑的文件无法被未授权者读取,从而提高了文件的安全性。步骤二将压缩和/或加密处理后的待捆绑文件转换为与宿主文件格式一致(即汇编语言数据结构定义的格式)的文件作为捆绑文件,在下文中,捆绑文件中的内容也称为字节码。可选地,也可以不执行步骤一,直接执行步骤二,尤其是在待捆绑的文件也为PE文件的时候。步骤三生成捆绑文件的配置信息。捆绑文件被捆绑到宿主文件中之后,当读取到捆绑在宿主文件中的捆绑文件时,会将捆绑文件释放出来。为了确定释放出来的捆绑文件是否可执行,以及何时执行,就需要用到本步骤中生成的配置信息。具体的,配置信息通常包括以下内容用于指示捆绑文件是否可执行的参数信息、用于在宿主文件中定位捆绑文件的位置信息,以及用于指示捆绑文件执行时的跳转地址的跳转指令等。其中,用于指示捆绑文件是否可执行的参数例如可以通过一个标志变量isInExeSequence实现,如果isInExeSequence=0表示不对释放出来的捆绑文件执行运行操作,即捆绑文件不可执行,如果isInExeSequence=l表示要对释放出来的捆绑文件执行运行操作,即捆绑文件可执行。另外,还可以额外设置一个参数,用来规定释放出来的捆绑文件何时执行,例如立即执行,或3分钟后执行等。用于在宿主文件中定位捆绑文件的位置信息例如可以通过一个表示捆绑文件在宿主文件中的位置偏移的dwFileOffset参数来实现。另外,还可以设置一个dwFileSize参数来表示捆绑文件在宿主文件中所占的大小,同时还可以定义一个name参数来表示捆绑文件的名称。上述的参数可以通过如下的结构体进行定义Typedefstruct{Stringname;BOOLisInExeSequence;DWORDdwFiIeOffset;DWORDdwFileSize;}FILE_BINDED_STRUCT;上述的结构体可以存储在捆绑文件中的内容(即字节码)的前面或后面,也可以插入字节码的中间。另外,用于指示捆绑文件执行时的跳转地址的跳转指令可以通过E9指令来实现。具体地,可以先将一个操作数为空的E9指令附加到字节码的最后,然后,在后续的步骤中根据实际情况修改E9指令的操作数,从而定义捆绑文件执行时的跳转地址。该跳转地址一般指向与字节码相对应的代码,该代码也存储在宿主文件中,用于具体执行字节码中的数据内容。步骤四将宿主文件复制到内存中,并将步骤二和步骤三中生成的捆绑文件和配置信息存储到宿主文件的最后一个节中。可选地,为了在本步骤中更准确地对宿主文件进行定位,先要获得原始的宿主文件的大小,然后,计算宿主文件最后一个节表在文件中的偏移,以便读取最后一个节表中的数据。其中,计算最后一个节表在文件中的偏移时,可以采用如下代码实现PSectionHeader=(PIMAGE_SECTI0N_HEADER)((BYTE*)pOptionalHeader+sizeof(IMAGE_0PTI0NAL_HEADER));nSectionNum=pFileHeader->NumberOfSections;for(inti=0;i〈nSectionNum_l;i++){pSectionHeader++;}其中,pSectionHeader表示最后一个节表在文件中的偏移量,通过上面的方式,即可确定出最后一个节表的位置,并读取其中的数据。具体地,节表中包含的数据包括表示对应的节中存储的实际数据长度的SizeOfRawData参数,指示节的起始地址的PointerToRawData参数以及表示节的属性值的Characteristics参数。在本步骤中,主要是读取SizeOfRawData参数以及PointerToRawData参数的值,通过PointerToRawData参数可以确定最后一个节的起始地址,结合SizeOfRawData参数即可确定最后一个节中实际存储的数据的结束地址。通过上面的方式,确定出宿主文件的上述相关信息后,就可以根据宿主文件的最后一个节的起始地址和结束地址等信息,在最后一个节中存储捆绑文件和配置信息了。由于原始的宿主文件是存储在磁盘上的,如果直接在磁盘空间对原始的宿主文件进行修改,由于文件中存储的程序内部包含指针,且由于指针的使用容易产生错误,因此,在本实施例中,先将宿主文件复制到内存中,在内存中完成对宿主文件的修改之后再复制回磁盘,由此避免因指针问题而导致的错误。为此,需要先计算原始的宿主文件大小与捆绑文件和配置信息的大小之和,得出捆绑后的宿主文件大小。然后,根据计算出的捆绑后的宿主文件大小申请一块内存空间,将原始的宿主文件复制到该内存空间中,然后将捆绑文件和配置信息存储到复制后的宿主文件的最后一个节中。另外,由于宿主文件在磁盘空间中的对齐粒度和内存空间中的对齐粒度有可能不同,因此,当宿主文件在磁盘空间中的对齐粒度和内存空间中的对齐粒度不同时,为了将宿主文件复制到内存空间,还需要进一步计算宿主文件在内存空间中的对齐粒度,为此,可以按照内存空间中的对齐粒度将宿主文件的最后一个节进行对齐,以确定内存中宿主文件的最后一个节的数据长度。具体对齐时,可采用如下代码实现intAlign(intsize,intALIGNBASE){intret;miiesult;assert(0!=ALIGN—BASE);result=size%ALIGN—BASE;if(0!=result){ret=((size/ALIGN—BASE)+I)*ALIGN—BASE;felse{ret=si/c}returnret;}。其中,在上述代码中,定义了size参数用于指示宿主文件的总长度,ALIGN_BASE用于指示宿主文件在内存空间中对齐时的对齐粒度,返回的结果值ret用于指示将宿主文件按照对齐粒度对齐之后,剩余的数据长度,该剩余的数据长度即为内存中的宿主文件最后一个节的数据长度。步骤五根据捆绑文件以及配置信息的大小,在内存中修改宿主文件的最后一个节的结构信息以及宿主文件的结构信息。由于步骤四中在宿主文件中加入了捆绑文件和配置信息,导致原始的宿主文件的相关信息需要进行适应性地修改。首先,由于宿主文件的最后一个节中增加了内容,因此,宿主文件的最后一个节的结构信息需要适应性修改,具体实现时,可以通过修改最后一个节表中表示对应的节存储的实际数据长度的SizeOfRawData等参数的参数值实现,另外,还可以对宿主文件在内存中的起始地址进行修改,同时,还需要在节表中将最后一个节的属性值设置为可执行,可读可写,即0c0000060h。另外,还需要对宿主文件的结构信息进行修改,例如,修改表示宿主文件的文件大小的值,其中,内存中的宿主文件的文件大小通常叫做映像文件大小,用SizeOfImage值表示。同时修改宿主文件的入口函数,即程序入口点AddressEntryPoint,以确定宿主文件的执行开始点。最后,还需要对步骤三中操作数为空的E9指令进行修改,以使得E9指令指向与字节码相对应的代码,以便具体执行字节码中的数据内容。步骤六将修改后的宿主文件从内存中复制回磁盘。通过上面的步骤,就实现了在宿主文件中捆绑其他文件的目的,在释放出宿主文件中包含的捆绑文件后,根据配置信息就可以控制捆绑文件是否可执行以及何时执行。具体地,还可以在一个宿主文件中捆绑多个捆绑文件,这样,在配置信息中还可以进一步定义多个捆绑文件的执行顺序,或者,多个捆绑文件也可以默认为顺序执行。图3示出了原始的宿主文件以及捆绑了三个捆绑文件之后的宿主文件的结构示意图,其中,图3的左侧不意出了原始的宿主文件310,图3的右侧不意出了拥绑后的宿主文件320。另外,在宿主文件,即PE文件中,通常设置有用于存储数据的数据段,以及用于存储代码的代码段,在本实施例中,可以将宿主程序中的数据和代码都放在代码段中存储,从而避免了在数据和代码之间进行频繁地重定位,提高了执行效率。通过本发明实施例中的方法,可以在宿主文件中捆绑其他的文件,以减少文件体积和发布时系统中的独立文件个数,从而便于管理,且有利于软件的发布以及网上传输。而且,可以将一些特殊意义的文件(例如防止竞争对手破解的、逆向的)进行隐藏。另外,还可以将一系列单独功能的小程序集成到一个可执行文件中,对这一系列的小程序进行顺序执行,使一个可执行程序的执行实现了多个小程序的管道执行,提供了类似于管道命令的另一种实现。而且,本发明最大的特点是,可以捆绑长度较长的文件,由于PE文件的结构特性,可以对最后一个节的长度进行扩展,因此,当捆绑文件和配置信息的长度超出了最后一个节中空闲的存储空间的长度时,可以对最后一个节的存储空间进行扩展,以便容纳下捆绑文件和配置信息,所以采用本方法捆绑文件时不受捆绑文件大小的限制,可以捆绑大文件甚至多个文件,拓宽了应用范围,而且,由于本方法没有在PE文件的文件头中增加过多信息,因而不会被格式检查工具报错。本发明实施例还提供了一种在宿主文件中捆绑文件的装置,其中,宿主文件包括多个以一定顺序排列的用于存储数据的节。如图4所示,该装置包括转换单元410,其将待捆绑的文件转换为与宿主文件的格式相对应的捆绑文件,并生成捆绑文件的配置信息;捆绑单元420,其将捆绑文件以及配置信息存储在宿主文件的最后一个节中;修改单元430,其根据捆绑文件以及配置信息,修改宿主文件的最后一个节的结构信息以及宿主文件的结构信息。可选地,配置信息包括用于指示捆绑文件是否可执行的参数信息、用于在宿主文件中定位捆绑文件的位置信息,以及用于指示捆绑文件执行时的跳转地址的跳转指令。可选地,宿主文件还包括多个用于存储节的结构信息的节表,则修改单元具体用于修改宿主文件的最后一个节表中的信息,最后一个节表用于存储最后一个节的结构信息,其中,最后一个节表中的信息包括节数据的大小,以及节数据的属性。可选地,宿主文件的结构信息包括宿主文件的文件大小以及宿主文件的入口函数。上述的转换单元410、捆绑单元420和捆绑单元430的具体实现方式可参见上述的方法实施例中的描述。在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的在宿主文件中捆绑文件的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。权利要求1.一种在宿主文件中捆绑文件的方法,所述宿主文件包括多个以一定顺序排列的用于存储数据的节,该方法包括将待捆绑的文件转换为与所述宿主文件的格式相对应的捆绑文件,并生成所述捆绑文件的配置信息;将所述捆绑文件以及所述配置信息存储在所述宿主文件的最后一个节中;根据所述捆绑文件以及所述配置信息,修改所述宿主文件的最后一个节的结构信息以及所述宿主文件的结构信息。2.如权利要求I所述的方法,所述将待捆绑的文件转换为与所述宿主文件的格式相对应的捆绑文件的步骤之前进一步包括对所述待捆绑的文件内容进行压缩和/或加密处理。3.如权利要求I或2所述的方法,所述配置信息包括用于指示捆绑文件是否可执行的参数信息、用于在所述宿主文件中定位所述捆绑文件的位置信息,以及用于指示捆绑文件执行时的跳转地址的跳转指令。4.如权利要求1-3中任一个所述的方法,所述宿主文件还包括多个以一定顺序排列的用于存储节的结构信息的节表,则所述修改所述宿主文件的最后一个节的结构信息具体包括修改所述宿主文件的最后一个节表中的信息,所述最后一个节表用于存储最后一个节的结构信息,其中,所述最后一个节表中的信息包括节数据的大小,以及节数据的属性。5.如权利要求1-4中任一个所述的方法,所述宿主文件的结构信息包括宿主文件的文件大小以及宿主文件的入口函数。6.如权利要求1-5中任一个所述的方法,所述将所述捆绑文件以及所述配置信息存储在所述宿主文件的最后一个节中;根据所述捆绑文件以及所述配置信息的大小,修改所述宿主文件的最后一个节的结构信息以及所述宿主文件的结构信息的步骤具体包括申请一块内存空间,将所述宿主文件复制到所述内存空间,在复制的宿主文件的最后一个节中存储所述捆绑文件以及所述配置信息;根据所述捆绑文件以及所述配置信息的大小,修改所述复制的宿主文件的最后一个节的结构信息以及所述复制的宿主文件的结构信息;将修改后的宿主文件复制回磁盘空间。7.如权利要求1-6中任一个所述的方法,所述宿主文件为PE文件。8.一种在宿主文件中捆绑文件的装置,所述宿主文件包括多个以一定顺序排列的用于存储数据的节,该装置包括转换单元,其将待捆绑的文件转换为与所述宿主文件的格式相对应的捆绑文件,并生成所述捆绑文件的配置信息;捆绑单元,其将所述捆绑文件以及所述配置信息存储在所述宿主文件的最后一个节中;修改单元,其根据所述捆绑文件以及所述配置信息,修改所述宿主文件的最后一个节的结构信息以及所述宿主文件的结构信息。9.如权利要求8所述的装置,所述配置信息包括用于指示捆绑文件是否可执行的参数信息、用于在所述宿主文件中定位所述捆绑文件的位置信息,以及用于指示捆绑文件执行时的跳转地址的跳转指令。10.如权利要求8或9所述的装置,所述宿主文件还包括多个以一定顺序排列的用于存储节的结构信息的节表,则所述修改单元具体用于修改所述宿主文件的最后一个节表中的信息,所述最后一个节表用于存储最后一个节的结构信息,其中,所述最后一个节表中的信息包括节数据的大小,以及节数据的属性。11.如权利要求8-10中任一个所述的装置,所述宿主文件的结构信息包括宿主文件的文件大小以及宿主文件的入口函数。全文摘要本发明公开了一种在宿主文件中捆绑文件的方法,宿主文件包括多个以一定顺序排列的用于存储数据的节,该方法包括将待捆绑的文件转换为与宿主文件的格式相对应的捆绑文件,并生成捆绑文件的配置信息;将捆绑文件以及配置信息存储在宿主文件的最后一个节中;根据捆绑文件以及配置信息,修改宿主文件的最后一个节的结构信息以及宿主文件的结构信息。根据本发明的在宿主文件中捆绑文件的方法和相应的装置,可以在宿主文件的最后一个节中捆绑任意长度的文件,由此解决了现有技术中只能捆绑零散的小文件,且由于宿主文件头部的信息量过于集中而可能导致报错的问题,取得了能够捆绑任意长度的大文件,且不易被报错的有益效果。文档编号G06F17/30GK102930005SQ20121042238公开日2013年2月13日申请日期2012年10月29日优先权日2012年10月29日发明者马茂刚申请人:北京奇虎科技有限公司,奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1