代码处理方法、装置、计算机设备和存储介质与流程
未命名
09-15
阅读:62
评论:0

技术领域:
:,特别是涉及一种代码处理方法、装置、计算机设备和存储介质。
背景技术:
::2.为使程序或关键代码得到更好的保护,使软件版权不受侵害,通常会选择加壳保护的方法达到防止软件被破解分析的效果。虽然加壳保护可以给黑客、友商等破解分析者造成很大程度的障碍,以达到拖延其宝贵时间等目的,在对抗中起着关键的作用。3.通常情况下分析和破解程序的包括分动态调试分析和静态反编译分析。静态反编译就是直接读取运行前的程序的各个区段的数据和代码,然后把字节码翻译成机器指令后进行分析;而动态调试分析就是让程序加载运行起来后动态观察cpu寄存器、栈帧、内存等的变化从而进行分析的过程。动态分析时,就需要程序运行到某个有利于分析的地方暂停下来,以便于观察程序的状态,从而一步一步获悉程序的运行过程达到破解甚至还原代码的目的。如,通过断点的方法,将运行到某个关键点程序暂停下来,调试器修改目标程序特定的代码区段地址处的指令,从而使程序执行到该地址处时触发int3调试指令异常,通过异常分发,调试器接管异常的处理从而达到动态调试的目的。4.在加壳保护中比较常见的反调试技术都是将整个代码段或关键代码段加密后生成一个新的程序,然后在新的程序运行时较早地把原程序的代码解密还原到指定的区段位置,解密完成后程序执行流程跳转到解密后的代码起点,之后程序开始正常运行,期间外壳代码及加密后的代码段给黑客的分析带来了一定的障碍,起到了反调试的目的。但是这种方法对代码的保护不够彻底,只要黑客能够寻找定位到解密后的代码的位置,就可以通过断点分析的方法破解代码加密逻辑。加壳保护对黑客这样的破解分析者造成的障碍是非常有限的。5.针对相关技术中存在反调试方法无法很好地保护代码的问题,目前还没有提出有效的解决方案。技术实现要素:6.基于此,有必要针对上述技术问题,提供一种能够提高反调试效果的代码处理方法、装置、计算机设备和存储介质。7.第一方面,本技术提供了一种代码处理方法,所述方法包括:8.获取受保护代码的信息,所述信息包括所述受保护代码的起始地址和所述受保护代码占用的内存大小;9.新建映射区段,并获取所述映射区段的句柄;10.根据所述映射区段的句柄、所述受保护代码的信息,将所述受保护代码映射到所述映射区段,得到防护代码;11.根据所述受保护代码和所述防护代码,得到目标文件。12.在其中一个实施例中,新建映射区段,包括:13.根据所述映射区段的属性,生成所述映射区段,其中,所述映射区段的属性包括所述映射区域的权限和所述映射区域的大小。14.在其中一个实施例中,根据所述映射区段的属性,生成所述映射区段,包括:15.根据所述映射区域的权限和所述映射区域的大小生成第一参数列表;16.调用第一函数,将第一参数列表写入所述第一函数,生成所述映射区段。17.在其中一个实施例中,调用第一函数,包括:18.获取第一函数的第一地址;19.定义符合所述第一函数指针类型的第一空指针,将所述第一地址赋值给所述第一空指针,得到所述第一函数指针;20.根据所述第一函数指针调用所述第一函数。21.在其中一个实施例中,获取第一函数的第一地址,包括:22.获取函数库的句柄,其中,所述函数库包括所述第一函数;23.根据所述函数库的句柄,获取所述函数库中的所述第一地址。24.在其中一个实施例中,根据所述映射区段的句柄、所述受保护代码的信息,将所述受保护代码映射到所述映射区段,得到所述防护代码,包括:25.根据所述映射区段的句柄和所述受保护代码的信息生成第二参数列表;26.调用第二函数,将第二参数列表写入所述第二函数,生成所述防护代码。27.在其中一个实施例中,调用第二函数,包括:28.获取第二函数的第二地址;29.定义符合所述第二函数指针类型的第二空指针,将所述第二地址赋值给所述第二空指针,得到所述第二函数指针;30.根据所述第二函数指针调用所述第二函数。31.在其中一个实施例中,获取第二函数的第二地址,包括:32.获取函数库的句柄,其中,所述函数库包括所述第二函数;33.根据所述函数库的句柄,获取所述函数库中的所述第二地址。34.在其中一个实施例中,根据所述受保护代码和所述防护代码,得到目标文件,还包括:35.获取包括所述受保护代码的可执行文件,并加密所述受保护代码;36.在所述可执行文件中增加新区段,将所述防护代码添加到所述新区段中,生成所述目标文件。37.第二方面,本技术还提供了一种代码处理装置,所述装置包括:38.获取模块,用于获取受保护代码的信息,所述信息包括所述受保护代码的起始地址和所述受保护代码占用的内存大小;39.映射模块,用于新建映射区段,并获取所述映射区段的句柄;根据所述映射区段的句柄、所述受保护代码的信息,将所述受保护代码映射到所述映射区段,得到防护代码;40.生成模块,用于根据所述受保护代码和所述防护代码,得到目标文件。41.第三方面,本技术还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述的代码处理方法的步骤,42.第四方面,本技术还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的代码处理方法的步骤。43.上述代码处理方法、装置、计算机设备和存储介质,包括:获取受保护代码的信息,所述信息包括所述受保护代码的起始地址和所述受保护代码占用的内存大小;新建映射区段,并获取所述映射区段的句柄;根据所述映射区段的句柄、所述受保护代码的信息,将所述受保护代码映射到所述映射区段,得到防护代码;根据所述受保护代码和所述防护代码,得到目标文件,提高了受保护代码的安全性,解决了反调试方法无法很好的保护代码的问题。附图说明44.图1是相关技术的反调试方法的示意图;45.图2为本技术一个实施例中代码处理方法的流程示意图;46.图3为本技术一个实施例中程序加壳的原理示意图;47.图4为本技术一个实施例中基于内存属性的反调试方法的示意图;48.图5为本技术一个实施例中代码处理装置的结构框图;49.图6为本技术一个实施例中计算机设备的内部结构图。具体实施方式50.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。51.图1是相关技术中反调试方法的示意图,如图1所示,实现反调试时通常将整个代码段或关键代码段加密后生成一个新的程序,然后在新的程序运行时较早的把原程序的代码解密还原到指定的区段位置,解密完成后程序执行流程跳转到解密后的代码起点,之后程序开始正常运行,期间外壳代码及加密后的代码段给黑客的分析带来了一定的障碍,起到了反调试的目的。相关技术中的反调试方法执行效率较低,尤其在代码段内容较多或者加密算法较为复杂的时候,程序执行过多指令,导致程序执行效率低下。其次,该方法对代码的保护不够彻底,黑客等攻击者寻找定位到解密后的代码的位置后,就可以通过断点分析的方法破解代码加密逻辑。52.在一个实施例中,如图2所示,提供了一种代码处理方法,本实施例以该方法应用于终端进行举例说明,可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。本实施例中,该方法包括以下步骤:53.步骤s201,获取受保护代码的信息,信息包括受保护代码的起始地址和受保护代码占用的内存大小。其中,受保护代码是pe文件中的代码或者关键代码段。可选地,加载受保护代码,获取受保护代码运行后的起始地址和占用内存大小。54.步骤s202,新建映射区段,并获取映射区段的句柄。其中,映射区段存储于终端的内存中。映射区段的句柄用于表示映射区段。可选地,确定映射区段的大小、权限等属性,根据属性,创建一个保存于内存中的映射对象,即映射区段。在成功创建映射区段的情况下,返回一个指向该映射区段的句柄,句柄用于标识该映射区段。55.步骤s203,根据映射区段的句柄、受保护代码的信息和防护代码的视图属性,将受保护代码映射到映射区段,得到防护代码。56.其中,防护代码的视图属性包括不可写入的视图属性。根据映射区段的句柄、受保护代码的起始地址、受保护代码占用的内存大小和防护代码的视图属性,将存储于内存中受保护代码,映射到内存中新建的映射区段,实现了内存页的重新映射,得到防护代码。防护代码中,映射后的受保护代码的起始地址、占用内存的范围和视图属性皆得到了修改,使映射后的保护代码不可写入、不可分析,提高了受保护代码的安全性。57.步骤s204,根据受保护代码和防护代码,得到目标文件。可选地,防护代码为受保护代码的加壳代码。将防护代码和受保护代码合并,根据合并后的代码,得到目标文件。其中,目标文件用于保护受保护代码,实现反调试的效果。58.通过上述步骤s201至步骤s204,在防护代码中,将受保护代码映射到新建映射区段中,并通过内存的映射实现受保护代码内存属性的修改,其中,内存属性的修改包括受保护代码在内存中的起始地址、内存范围、视图属性。通过在防护代码中实现了受保护代码内存页的映射和属性修改,使运行的受保护代码具备不可写入的特性,从而阻挡了黑客等攻击者对受保护代码进行断点分析等调试操作,提高了受保护代码的安全性,解决了反调试方法无法很好地保护代码的问题。59.在其中一个实施例中,新建映射区段,包括:根据映射区段的属性,生成映射区段,其中,映射区段的属性包括映射区域的权限和映射区域的大小。其中,映射区域的权限包括可执行、大小可扩展、可读、可写的访问权限。可选地,可以将映射区域的最大大小设置为内存页的最大值,也可以获取受保护代码占用内存的大小,根据受保护代码占用的内存大小设置映射区域,从而保证受保护代码可以成功映射到映射区域。60.新建映射区域还包括:根据映射区域的权限和映射区域的大小生成第一参数列表;调用第一函数,将第一参数列表写入第一函数,生成映射区段。具体地,调用第一函数,并在第一函数中传入第一参数列表,并接收返回值,根据返回值判断是否调用成功,若是调用成功,生成映射区段的同时获取映射区段的句柄。61.示例性地,第一函数为ntcreatesection函数,第一参数列表包括:&sectionhandle(使用handle句柄定义的映射区段句柄变量),section_all_access(指定句柄的访问权限),&obj(objectattributes,用于指定对象名称和安全特性等属性的指针),&maximumsize(指定映射区段的最大大小,映射区段的大小以字节为单位),page_execute_read(页面可读不可写),sec_commit(在为内存分配页时立即提交它们),null(不指定打开的文件对象的句柄)。62.以将映射区域的最大大小设置为内存页的最大值为例,使用large_integer(有符号的整数值)来定义一个maximumsize的变量并为其quadpart字段赋值0x10000。句柄的访问权限包括:查询映射区域的权限、映射区域可写、映射区域可读、映射区域可执行、允许映射区域的大小扩展,section_all_access表示以上权限都被设置。63.其中,第一函数ntcreatesection为windows未公开的api(applicationprogramminginterface,应用程序编程接口),无法实现函数的直接调用。因此,需要获取第一函数的第一地址,通过第一地址调用第一函数。64.获取第一函数的第一地址,包括:获取函数库的句柄,其中,函数库包括第一函数;通过函数库的句柄,获取函数库中的第一地址。为了在防护代码中更好的隐藏行为,不采用直接调用所需要的api,而通过loadlibrary函数加载"ntdll.dll"(ntdll动态链接库)并获取到该dll的句柄。在获取动态链接库的句柄的情况下,获取第一函数的地址。可选地,在获取动态链接库的句柄的情况下,通过apigetprocaddress来获取第一函数的地址。65.通过第一地址调用第一函数,包括:获取第一函数的第一地址;定义符合第一函数指针类型的第一空指针,将第一地址赋值给第一空指针,得到第一函数指针;通过第一函数指针调用第一函数。其中,第一空指针为符合第一函数定义的指针。将第一地址赋值给第一空指针,将函数地址转换为用于调用第一函数的第一函数指针,从而满足防护代码编写的需求。66.可选地,对ntcreatesectionapi调用时所使用的参数进行分析,ntcreatesectionapi调用的第3个参数为pobject_attributes(指向目标进程句柄的指针),object_attributes(对象属性)结构体第3个字段为punicode_string。由此确定定义第一空指针ntcreatesection包括:定义一个结构体类型的object_attributes对象,其指针类型为pobject_attributes;定义一个unicode_string(unicode字符串)对象,其指针类型为punicode_string(内核字符串)。67.在其中一个实施例中,根据映射区段的句柄、受保护代码的信息,将受保护代码映射到映射区段,得到防护代码,包括:根据映射区段的句柄和受保护代码的信息生成第二参数列表;调用第二函数,将第二参数列表写入第二函数,生成防护代码。具体地,调用第二函数,并在第二函数中传入第二参数列表,实现受保护代码的映射。68.示例性地,第二函数为zwmapviewofsection函数,第二参数列表包括:sectionhandle(映射区域的句柄),getcurrentprocess()(获取当前进程),&baseaddress(受保护代码的起始地址),0(指定节视图基址中必须为零的高阶地址位数),0x10000(指定视图最初提交的区域的大小),null(指向变量的指针,该变量接收从节点开头到视图的偏移量),&viewsize(指定要映射的区域大小),(section_inherit)1,0,page_execute_read(页面可读不可写)。在第二函数中传入第二参数列表后,受保护代码实现映射且获取page_execute_read标识,使映射后的代码段只有可执行与可读的属性,没有可写入的属性,实现对代码的保护。攻击者无论使用什么方法都不能直接实现写入的操作,从而达到了反调试的目的。69.其中,第二函数zwmapviewofsection为windows未公开的api,无法实现函数的直接调用。因此,需要获取第二函数的第二地址,通过第二地址调用第二函数。70.获取第二函数的第二地址,包括:获取函数库的句柄,其中,函数库包括第二函数;通过函数库的句柄,获取函数库中的第二地址。为了在防护代码中更好的隐藏行为,不采用直接调用所需要的api,而通过loadlibrary函数加载"ntdll.dll"并获取到该dll的句柄。在获取动态链接库的句柄的情况下,获取第二函数的地址。可选地,在获取动态链接库的句柄的情况下,通过apigetprocaddress来获取第二函数的地址。71.调用第二函数,包括:获取第二函数的第二地址;定义符合第二函数指针类型的第二空指针,将第二地址赋值给第二空指针,得到第二函数指针;通过第二函数指针调用第二函数。其中,第二空指针为符合第二函数定义的指针。将第二地址赋值给第二空指针,将函数地址转换为用于调用第二函数的第二函数指针,从而满足防护代码编写的需求。72.可选地,对zwmapviewofsectionapi调用时所使用的参数进行分析,zwmapviewofsectionapi调用的第8个参数为section_inherit类型为枚举类型,其值可以是1、2。由此确定定义第二空指针包括:定义一个section_inherit类型对象。73.在其中一个实施例中,根据受保护代码和防护代码,得到目标文件,还包括:获取包括受保护代码的可执行文件,并加密受保护代码;在可执行文件中增加新区段,将防护代码添加到新区段中,生成目标文件。74.可选地,防护代码为外壳代码。目标文件为反调试文件。加密受保护代码后,在包括受保护代码的可执行文件中添加一块新区段,将防护代码移植到新区段中。此时,目标文件对应的程序启动前优先获得代码执行流程,对原程序的导入表进行修复,如果原程序开启了随机基址,则对源程序进行重定位修复。执行完外壳的代码以后再将控制权交还给原程序,此时原程序正常运行。75.图3是一种为程序加壳的原理示意图,如图3所示,包括:读取并保存pe文件(portableexecutable,可移植可执行的文件)各字段信息,对受保护的代码段进行保护操作,如加密等。获取编写好的shell(计算机壳层)外壳代码。修改可执行文件oep(入口点),使入口点指向shell外壳代码。根据入口点,对shell外壳代码进行重定位处理,从而将shell外壳代码添加到pe文件的新区段中,生成已加壳的pe文件,即目标文件。76.其中,外壳代码框架可以根据对受保护代码进行的保护操作,在外壳代码中对原程序的代码进行解密。在程序启动前优先获得代码执行流程,对原程序的导入表(iat)进行修复,执行完外壳的代码以后再将控制权交还给原程序,此时原程序正常运行。77.在一个实施例中,图4是一种基于内存属性的反调试方法的示意图,如图4所示,包括:78.编写shell外壳代码框架,分析ntcreatesection函数和zwmapviewofsection函数。根据ntcreatesectionapi调用所使用的参数和zwmapviewofsectionapi调用所使用的参数,定义第一空指针和第二空指针。79.加载"ntdll.dll"动态链接库对应的系统文件,并获取动态链接库的句柄。包括:借用loadlibraryapi加载"ntdll.dll"并获取到该动态链接库的句柄。80.获取ntcreatesection函数地址得到第一地址,将第一地址赋值给函数指针,即第一空指针。获取zwmapviewofsection函数地址得到第二地址,将第二地址赋值给函数指针,即第二空指针。可选地,得到动态链接库的句柄后,通过getprocaddressapi获取ntcreatesection函数的函数地址、zwmapviewofsection的函数地址。81.配置参数列表调用ntcreatesection。根据object_attributes结构体类型,定义一个obj变量,并初始化obj变量。根据动态链接库的句柄、第一函数指针调用第一函数ntcreatesection,配置并依次传入第一参数列表:&sectionhandle,section_all_access,&obj,&maximumsize,page_execute_read,sec_commit,null。通过接收到的返回值判断是否调用成功,若是调用成功此时已获取到了映射区段section的句柄sectionhandle。82.获取原程序代码段加载运行后的起始地址、所占内存大小。其中,原程序代码为受保护代码。83.配置参数列表调用zwmapviewofsection函数。使用pvoid(指针类型)定义一个指针baseaddress,将受保护代码段的首地址赋值到baseaddress中。使用size_t(变量类型)定义一个viewsize变量。根据动态链接库的句柄、第一函数指针调用第一函数ntcreatesection,配置并依次传入第一参数列表:&sectionhandle,section_all_access,&obj,&maximumsize,page_execute_read,sec_commit,null。84.生成映射后的受保护代码,测试是否可以对映射后的受保护代码进行断点判断。若可以对映射后的受保护代码进行断点调试操作,则测试不符合预期,判断代码编写有误,并重新定义函数指针和结构体类型;若不可以对映射后的受保护代码进行断点调试操作,则测试符合预期,成功生成用于反调试的外壳代码,将外壳代码作为反调试代码。85.上述基于内存属性的反调试方法可以适用于windows下运行的所有程序,兼容性良好,无需执行多余指令执行效率高;使用windows官方未公开的api,外壳代码中实现了重新映射内存页进而修改内存属性达到了反调试、反hook(挂钩)的目的。86.应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。87.基于同样的发明构思,本技术实施例还提供了一种用于实现上述所涉及的代码处理装置方法的代码处理装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个代码处理装置实施例中的具体限定可以参见上文中对于代码处理装置方法的限定,在此不再赘述。88.在一个实施例中,如图5所示,提供了一种代码处理装置,包括:获取模块、映射模块和生成模块,其中;89.获取模块,用于获取受保护代码的信息,所述信息包括所述受保护代码的起始地址和所述受保护代码占用的内存大小;90.映射模块,用于新建映射区段,并获取所述映射区段的句柄;根据所述映射区段的句柄、所述受保护代码的信息和防护代码的视图属性,将所述受保护代码映射到所述映射区段,得到所述防护代码;91.生成模块,用于根据所述受保护代码和所述防护代码,得到目标文件。92.其中,代码处理装置还可以实现上述任一实施例中的代码处理方法。上述代码处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。93.在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图6所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过wifi、移动蜂窝网络、nfc(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种代码处理装置方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置。显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。94.本领域技术人员可以理解,图6中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。95.在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时上述任一实施例中的代码处理方法。96.在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时上述任一实施例中的代码处理方法。97.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-onlymemory,rom)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(reram)、磁变存储器(magnetoresistiverandomaccessmemory,mram)、铁电存储器(ferroelectricrandomaccessmemory,fram)、相变存储器(phasechangememory,pcm)、石墨烯存储器等。易失性存储器可包括随机存取存储器(randomaccessmemory,ram)或外部高速缓冲存储器等。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(staticrandomaccessmemory,sram)或动态随机存取存储器(dynamicrandomaccessmemory,dram)等。本技术所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本技术所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。98.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。99.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本技术专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术的保护范围应以所附权利要求为准。当前第1页12当前第1页12
技术特征:
1.一种代码处理方法,其特征在于,所述方法包括:获取受保护代码的信息,所述信息包括所述受保护代码的起始地址和所述受保护代码占用的内存大小;新建映射区段,并获取所述映射区段的句柄;根据所述映射区段的句柄、所述受保护代码的信息和防护代码的视图属性,将所述受保护代码映射到所述映射区段,得到所述防护代码;根据所述受保护代码和所述防护代码,得到目标文件。2.根据权利要求1所述的代码处理方法,其特征在于,新建映射区段,包括:根据所述映射区段的属性,生成所述映射区段,其中,所述映射区段的属性包括所述映射区域的权限和所述映射区域的大小。3.根据权利要求2所述的代码处理方法,其特征在于,根据所述映射区段的属性,生成所述映射区段,包括:根据所述映射区域的权限和所述映射区域的大小生成第一参数列表;调用第一函数,将所述第一参数列表写入所述第一函数,生成所述映射区段。4.根据权利要求3所述的代码处理方法,其特征在于,调用第一函数,包括:获取第一函数的第一地址;定义符合所述第一函数指针类型的第一空指针,将所述第一地址赋值给所述第一空指针,得到所述第一函数指针;根据所述第一函数指针调用所述第一函数。5.根据权利要求4所述的代码处理方法,其特征在于,获取第一函数的第一地址,包括:获取函数库的句柄,其中,所述函数库包括所述第一函数;根据所述函数库的句柄,获取所述函数库中的所述第一地址。6.根据权利要求1所述的代码处理方法,其特征在于,根据所述映射区段的句柄、所述受保护代码的信息和防护代码的视图属性,将所述受保护代码映射到所述映射区段,得到所述防护代码,包括:根据所述映射区段的句柄、所述受保护代码的信息和防护代码的视图属性生成第二参数列表;调用第二函数,将第二参数列表写入所述第二函数,生成所述防护代码。7.根据权利要求6所述的代码处理方法,其特征在于,调用第二函数,包括:获取第二函数的第二地址;定义符合所述第二函数指针类型的第二空指针,将所述第二地址赋值给所述第二空指针,得到所述第二函数指针;根据所述第二函数指针调用所述第二函数。8.根据权利要求7所述的代码处理方法,其特征在于,获取第二函数的第二地址,包括:获取函数库的句柄,其中,所述函数库包括所述第二函数;根据所述函数库的句柄,获取所述函数库中的所述第二地址。9.根据权利要求1所述的代码处理方法,其特征在于,根据所述受保护代码和所述防护代码,得到目标文件,还包括:获取包括所述受保护代码的可执行文件,并加密所述受保护代码;
在所述可执行文件中增加新区段,将所述防护代码添加到所述新区段中,生成所述目标文件。10.一种代码处理装置,其特征在于,所述装置包括:获取模块,用于获取受保护代码的信息,所述信息包括所述受保护代码的起始地址和所述受保护代码占用的内存大小;映射模块,用于新建映射区段,并获取所述映射区段的句柄;根据所述映射区段的句柄、所述受保护代码的信息和防护代码的视图属性,将所述受保护代码映射到所述映射区段,得到所述防护代码;生成模块,用于根据所述受保护代码和所述防护代码,得到目标文件。11.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至9中任一项所述代码处理方法的步骤。12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述代码处理方法的步骤。
技术总结
本申请涉及一种代码处理方法、装置、计算机设备和存储介质,包括:获取受保护代码的信息,所述信息包括所述受保护代码的起始地址和所述受保护代码占用的内存大小;新建映射区段,并获取所述映射区段的句柄;根据所述映射区段的句柄、所述受保护代码的信息,将所述受保护代码映射到所述映射区段,得到防护代码;根据所述受保护代码和所述防护代码,得到目标文件,提高了受保护代码的安全性,解决了反调试方法无法很好的保护代码的问题。试方法无法很好的保护代码的问题。试方法无法很好的保护代码的问题。
技术研发人员:董昊昊 王晓天
受保护的技术使用者:杭州安恒信息技术股份有限公司
技术研发日:2023.05.29
技术公布日:2023/9/14
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/