一种加壳软件转存文件的转换方法、装置和系统的制作方法
【技术领域】
[0001]本发明涉及一种加壳软件转存文件的转换方法、装置和系统,属于软件应用领域。
【背景技术】
[0002]传统的基于Windows平台开发的软件,在发布前往往需要先对程序进行加壳处理。加壳的全称是可执行程序资源压缩,即利用特殊的算法,对EXE、DLL等文件里的数据进行压缩、加密处理,并且把解压算、解密算法作为程序的壳附加到被保护的程序中。加壳后的程序执行时,壳先于原程序得到控制权,对原始程序解密、还原,之再把控制权交还给原程序,执行原程序的代码部分。经加壳后的软件可以独立运行,但不能直接查看其源代码,可以有效保护软件不被非法修改或反编译,因此被广泛用来保护软件版权,防止软件免遭破解。
[0003]在软件调试领域,通常使用转存文件模拟错误发生时的程序状态。转存文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到转存文件中。用户在使用软件时,一旦出现系统异常或者崩溃,系统就自动会生成转存文件,供软件测试人员调试。但经加壳后的软件崩溃后,生成的转存文件经过了改写,无法在调试错误时直接定位到出错的代码位置。这就给软件检错工作带来了极大的不便。
【发明内容】
[0004]针对现有技术存在的上述问题,本发明提供了一种加壳软件转存文件的转换方法、装置和系统的技术方案,以便解决加壳后的软件生成的转存文件无法用于调试的技术问题。
[0005]基于本发明的一个方面,提供一种加壳软件转存文件的转换方法,包括以下步骤: 步骤S10,获取原可执行文件;
步骤S20,提取所述原可执行文件中表示映像大小和校验和的值;
步骤S30,获取加壳后可执行文件生成的原转存文件;
步骤S40,根据提取的所述表示映像大小和校验和的对应值替换所述转存文件的对应值;
步骤S50,保存修改后的转存文件。
[0006]优选地,步骤S20和S30之间包括:
步骤S21,提取所述原可执行文件的文件名;
步骤S30和S40之间还包括:
步骤S31,查找所述转存文件中表示所述加壳后可执行文件的文件名的位置;
步骤S32,用所述原可执行文件的文件名替换所述加壳后可执行文件的文件名。
[0007]优选地,步骤S31包括以下子步骤:
步骤S311,读取原转存文件;
步骤S312,以遍历每个流的方式,查找加壳后可执行文件的文件名的位置。
[0008]优选地,所述转存文件为Windows系统平台定义的dump文件。
[0009]优选地,所述加壳方式为通过Themida软件实施的加壳处理。
[0010]基于本发明的另一个方面,提供了一种加壳软件转存文件的转换装置,包括:
可执行文件获取模块,用于获取原可执行文件;
指定值提取模块,用于提取所述原可执行文件中表示映像大小和校验和的值;
转存文件获取模块,用于获取加壳后可执行文件生成的原转存文件;
替换模块,用于根据提取的所述表示映像大小和校验和的对应值替换所述转存文件的对应值;
转存文件保存模块,用于保存修改后的转存文件。
[0011]基于本发明的第三个方面,提供了一种加壳软件转存文件的转换系统,包括: 存储器,用于存储应用程序;
处理器,执行所述应用程序以用于实施以下步骤:
获取原可执行文件;
提取所述原可执行文件中表示映像大小和校验和的值;
获取加壳后可执行文件生成的原转存文件;
根据提取的所述表示映像大小和校验和的对应值替换所述转存文件的对应值;
保存修改后的转存文件。
[0012]本发明的有益效果:通过对加壳后的软件生成的转存文件一键式的转换,简化了调试步骤,可以在保护软件的同时,也可以收集用户报告的软件崩溃信息,进行调试。大大降低了调试的难度,方便开发人员进行查找bug。本发明利于未加壳的原可执行文件,对上述转存文件进行转换,相对于一般的脱壳技术,操作简单正确率高,避免了脱壳失败的风险。
【附图说明】
[0013]为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0014]图1所示为直接使用加壳软件生成的转存文件进行调试的图像;
图2所示为根据本发明第一实施例的一种加壳软件转存文件的转换方法的示意图;
图3所示为根据本发明第一实施例的一种加壳软件转存文件的转换方法的流程图;
图4所示为根据本发明第二实施例的一种加壳软件转存文件的转换方法的详细流程图;
图5所示为根据本发明第三实施例的一种加壳软件转存文件的转换系统的示意图。
【具体实施方式】
[0015]为了便于调试,软件常常设定为在发生异常时,将内存中的程序镜像转存为非易失性存储器上的转存文件,以便开发测试人员调试。例如Windows系统平台定义了用户态转出文件的格式(即转存文件,例如dump文件),并提供了 API来创建和读取用户态文件。原可执行文件被配置为在出现异常或者崩溃时,调用MS DbgHelp.dll的API接口MinidumpWritedump从而生成记录了程序的执行状态的dump文件。
[0016]在软件开发测试工作中,软件开发人员将含有可执行文件的软件分发给用户或者测试人员使用。用户或者测试人员在使用软件的过程中遇到异常,软件将自动生成包含了错误发生时的软件状态转存文件(例如dump文件)供开发者分析调试。当可执行文件未经过加壳处理时,开发者只需将dump文件与软件的可执行文件和编译软件工程时生成的PCB文件放在同一文件夹内,即可使用软件开发工具进行调试;当可执行文件经过加壳处理时,由于dump文件内的部分数值发生了改变,在调试时软件开发工具将无法正常打开dump文件。以经过常见的加壳软件Themida加壳为例,参考图1,加壳软件生成的dump文件在调试时显示为汇编代码,可读性差,无法调试。
[0017]参考图2-3,根据本发明的第一实施例的一种加壳软件转存文件的转换方法,利用转换系统,将读取原可执行文件(即加壳前的可执行文件)中表示映像大小和校验和的值,将上述值覆写在的加壳后可执行文件生成的原转存文件(以dump文件为例,即原dump文件)对应值上,经过修改后的dump文件可以直接用于对原软件进行调试,操作方法与未经过加壳处理时相同,大大降低了调试的难度,方便开发人员进行查找bug。其【具体实施方式】包括以下步骤:首先用二进制的方式将未经过加壳处理的原可执行文件读入内存,获取指定位置的表示映像大小和校验和的字段,记录其对应值。然后读取原dump文件的文件头到MINIDUMP_HEADER pMdpHeader,dump文件的模块信息如下(参考MSDN):
typedef struct _MINIDUMP_MODULE {
UL0NG64 BaseOfImage;
UL0NG32 SizeOfImage;
UL0NG32 Checksum;
UL0NG32 TimeDateSta
mp;
RVA ModuleNameRva;
VS_FIXEDFILEINFO Vers1nlnfo;
MINIDUMP—LOCAT1N—DESCRIPTOR CvRecord;
MINIDUMP—LOCAT1N—DESCRIPTOR MiscRecord;
UL0NG64 ReservedO;// Reserved for future use.UL0NG64 Reservedl;// Reserved for future use.} MINIDUMP—MODULE,*PMINIDUMP—MODULE;
经比较可以发现上述结构体内有多处数值发生了变化。将之前提取记录下的原可执行文件的表示映像大小和校验和的字段分别替换SizeOflmage和Checksum字段的内容,并保存修改后的dump文件。将修改后的dump文件和原可执行文件及对应的PCB文件放在同一文件夹内,用调试工具对dump文件进行调试。调试时定位在了出现逻辑问题的C++程序段(原可执行文件为C++语言编写),即可以正常调试。
[0018]此外,原dump文件中还包括了加壳后可执行文件的文件名。假如原dump文件内的保存的加壳后可执行文件的文件名与调试时使用的原可执行文件的文件名不一致,在调试时就会报错。在现实工作中,测试人员有时会遇到因为不知道加壳后可执行文件的文件名的情况,在这种情况就无法简单套用本发明第一实施例的方案进行转换。为解决上述问题,根据本发明第二实施例提供了一种加壳软件转存文件的转换方法,能够自动查找并修改dump文件内的可执行文件程序名。参考图4,包括以下步骤:首先用二进制的方式将未经过加壳处理的原可执行文件读入内存,获取指定位置的表示映像大小和校验和的字段,记录其对应值,同时记录原可执行文件的完整文件名。然后读取加壳后可执行文件生成的原dump文件,将原dump文件的文件头到MINIDUMP_HEADER pMdpHeader,遍历pMdpHeader里的pMdpHeader->NumberOfSteams每个流(steam),从模块流中获取加壳后可执行文件的文件地址,保存至RAV pModuleAddr;根据地址获得PMINIDUMP_MODULE pModule数据。替换可执行文件的文件名,关闭dmp文件。重新读取整个dump文件的数据到内存,根据前面提取的信息,pModuleAddr读取dmp的文件头信息,改写其中的MIM)UMP_MODULE中的UL0NG32SizeOf Image以及UL0NG32 Checksum为原可执行文件中表示映像大小和校验和的值。将修改后的dump对象信息保存为新的dump文件,转换完成。本发明的方法不仅适用于WINDOWS平台,也适用于Linux,类Linux和类Unix系统平台。只要涉及基于内存中的加壳程序镜像转存为存储器上的转存文件的调试,都能够使用本发明所述的一种加壳软件转存文件的转换方法。具体实现的方式与上述方法类似,故在此省略。
[0019]参考图5,根据本发明第三实施例一种加壳软件转存文件的转换系统,包括存储器和处理器,其中存储器内存储了用于软件调试的原可执行文件、根据所述原可执行文件加壳后生成的加壳后可执行文件,以及根据所述加壳后可执行文件生成的转存文件,并且所述存储器内还存储了用于实现本发明第一实施例或第二实施例的一种加壳软件转存文件的转换方法的数据,处理器从存储器内读取所述数据和所述各文件,并根据所述数据执行以下数据处理:获取原可执行文件;提取所述原可执行文件中表示映像大小和校验和的值;获取加壳后可执行文件生成的原转存文件;根据提取的所述表示映像大小和校验和的对应值替换所述转存文件的对应值;保存修改后的转存文件。示例性的,修改后的转存文件转存至所述存储器内。
[0020]以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。
【主权项】
1.一种加壳软件转存文件的转换方法,其特征在于,包括以下步骤: 步骤S10,获取原可执行文件; 步骤S20,提取所述原可执行文件中表示映像大小和校验和的值; 步骤S30,获取加壳后可执行文件生成的原转存文件; 步骤S40,根据提取的所述表示映像大小和校验和的对应值替换所述转存文件的对应值; 步骤S50,保存修改后的转存文件。2.根据权利要求1所述的一种加壳软件转存文件的转换方法,其特征在于,步骤S20和S30之间包括: 步骤S21,提取所述原可执行文件的文件名。3.根据权利要求1或2所述的一种加壳软件转存文件的转换方法,其特征在于, 步骤S30和S40之间包括: 步骤S31,查找所述转存文件中表示所述加壳后可执行文件的文件名的位置; 步骤S32,用所述原可执行文件的文件名替换所述加壳后可执行文件的文件名。4.根据权利要求3所述的一种加壳软件转存文件的转换方法,其特征在于,步骤S31包括: 步骤S311,读取原转存文件; 步骤S312,以遍历每个流的方式查找加壳后可执行文件的文件名的位置。5.根据权利要求1所述的一种加壳软件转存文件的转换方法,其特征在于,所述转存文件为Windows系统平台定义的dump文件。6.根据权利要求1所述的一种加壳软件转存文件的转换方法,其特征在于,所述加壳方式为通过Themida软件实施的加壳处理。7.一种加壳软件转存文件的转换装置,其特征在于,包括: 可执行文件获取模块,用于获取原可执行文件; 指定值提取模块,用于提取所述原可执行文件中表示映像大小和校验和的值; 转存文件获取模块,用于获取加壳后可执行文件生成的原转存文件; 替换模块,用于根据提取的所述表示映像大小和校验和的对应值替换所述转存文件的对应值; 转存文件保存模块,用于保存修改后的转存文件。8.一种加壳软件转存文件的转换系统,其特征在于,包括: 存储器,用于存储应用程序; 处理器,执行所述应用程序以用于实施以下步骤: 获取原可执行文件; 提取所述原可执行文件中表示映像大小和校验和的值; 获取加壳后可执行文件生成的原转存文件; 根据提取的所述表示映像大小和校验和的对应值替换所述转存文件的对应值; 保存修改后的转存文件。
【专利摘要】本发明的技术方案包括一种加壳软件转存文件的转换方法、装置和系统,该方法包括步骤:获取原可执行文件;提取所述原可执行文件中表示映像大小和校验和的值;获取加壳后可执行文件生成的原转存文件;根据提取的所述表示映像大小和校验和的对应值替换所述转存文件的对应值;保存修改后的转存文件。装置包括:可执行文件获取模块,指定值提取模块,转存文件获取模块,替换模块,转存文件保存模块。系统包括存储器和处理器。利用从加壳前的原文件,将加壳后软件生成的转存文件转换为可用于调试的转存文件,从而达到了降低调试难度,方便开发人员进行查找bug的有益效果。
【IPC分类】G06F11/36
【公开号】CN105487981
【申请号】CN201510906023
【发明人】陈汉辉, 李茂 , 吴海权
【申请人】珠海金山网络游戏科技有限公司, 广州西山居世游网络科技有限公司
【公开日】2016年4月13日
【申请日】2015年12月9日