快速开发x86/x64平台shellcode的方法及系统的制作方法

xiaoxiao2021-3-1  161

快速开发x86/x64平台shellcode的方法及系统的制作方法
【技术领域】
[0001]本发明涉及计算机安全领域,尤其涉及一种快速开发x86/x64平台shellcode的方法及系统。
【背景技术】
[0002]传统技术中,使用汇编语言开发shellcode代码。但是使用汇编语言开发shellcode代码在代码提取时非常不方便。而且x86平台与x64平台汇编代码不相同,需要维护两个版本代码。另外,使用汇编开发shellcode较复杂、容易出错、对人员要求高,开发人员需要花费大量精力维护,不宜于实现复杂功能。
[0003]实际使用中,在利用缓冲区溢出漏洞以及其它内存类安全漏洞测试/攻击时,如何快速对x86/x64平台shellcode代码进行快速开发、提取,对安全测试/攻击过程和后续完善溢出测试产品payload至关重要。因此,研究一种快速开发x86/x64平台shellcode的方法是一亟待解决的问题。

【发明内容】

[0004]基于此,有必要针对传统技术中x86/x64平台shellcode代码开发复杂,且维护不便的问题,提供一种开发速度快,且版本兼容的生成x86/x64平台shellcode的方法及系统。
[0005]为实现本发明目的提供的一种快速开发x86/x64平台shellcode的方法及系统,包括以下步骤:
[0006]使用C语言编写函数动态获取操作系统的应用程序接口 ;
[0007]根据获取的所述应用程序接口编写所需的shellcode代码;
[0008]使用编译器对所编写的shellcode代码进行编译,生成x86或x64平台的ΕΧΕ文件;
[0009]使用提取工具从所述ΕΧΕ文件代码段中提取出shellcode代码。
[0010]作为一种快速开发x86/x64平台shellcode的方法的可实施方式,还包括以下步骤:
[0011]使用加载器对所提取出的shellcode代码的功能的完整性进行验证。
[0012]作为一种快速开发x86/x64平台shellcode的方法的可实施方式,所述使用编译器对所编写的shellcode代码进行编译,生成x86或者x64平台的ΕΧΕ文件之前,还包括以下步骤:
[0013]将编译器的参数设置为预设条件;
[0014]其中,所述预设条件包括:
[0015]优化参数为:最小优化;优先选择参数为:代码大小优先;缓冲区检查参数为:否;运行库参数为:多线程dll ;省略指针参数为..是。
[0016]作为一种快速开发x86/x64平台shellcode的方法的可实施方式,使用C语言编写的函数动态获取操作系统的应用程序接口,包括以下步骤:
[0017]获取X86或x64平台的PEB地址,得到所述PEB的结构信息;
[0018]根据所述PEB的结构信息查询应用程序接口函数名,得到所需的应用程序接口。
[0019]作为一种快速开发x86/x64平台shellcode的方法的可实施方式,x86平台通过获取地址0x60中的信息获取PEB的结构信息;
[0020]x64平台通过获取地址0x30中的信息获取PEB的结构信息。
[0021]基于同一发明构思的一种快速开发x86/x64平台shellcode的系统,包括应用程序接口获取模块、编译模块及代码提取模块,其中:
[0022]所述应用程序接口获取模块,用于使用C语言编写动态获取操作系统的应用程序接口 ;
[0023]所述编译模块,用于使用编译器,对利用应用程序接口获取模块获取应用程序接口,对使用该应用程序接口编写的shellcode代码进行编译,生成x86或x64平台的ΕΧΕ文件;
[0024]所述代码提取模块,用于使用提取工具从所述ΕΧΕ文件代码段中提取出shellcode 代码。
[0025]作为一种快速开发x86/x64平台shellcode的系统的可实施方式,还包括验证模块,用于使用加载器对所提取出的shellcode代码的功能的完整性进行验证。
[0026]作为一种快速开发x86/x64平台shellcode的系统的可实施方式,在使用编译器对所编写的shellcode代码进行编译前,还需要将编译器的参数设置为预设条件;
[0027]所述预设条件包括:
[0028]优化参数为:最小优化;优先选择参数为:代码大小优先;缓冲区检查参数为:否;运行库参数为:多线程dll ;省略指针参数为..是。
[0029]作为一种快速开发x86/x64平台shellcode的系统的可实施方式,应用程序接口获取模块包括PEB地址获取子模块及查询子模块,其中:
[0030]所述PEB地址获取子模块,用于获取x86或x64平台的PEB地址,得到所述PEB的结构信息;
[0031]所述查询子模块,用于根据所述PEB的结构信息查询应用程序接口函数名,得到所需的应用程序接口。
[0032]作为一种快速开发x86/x64平台shellcode的系统的可实施方式,x86平台通过获取地址0x60中的信息获取PEB的结构信息;
[0033]x64平台通过获取地址0x30中的信息获取PEB的结构信息。
[0034]本发明的有益效果包括:
[0035]本发明提供的一种快速开发x86/x64平台shellcode的方法及系统,通过高级C语言进行shellcode代码的编写,代码编写速度快,使用C语言编写动态获取应用程序接口(API),可自动适应x86平台或x64平台。开发人员可统一维护x86和x64平台shellcode代码,做到shellcode代码简单、易维护、代码统一、可容易实现复杂功能。同时,提取x86/x64 shellcode简单方便,也可容易验证shellcode功能是否可用。其有效帮助开发人员实现shellcode多态变形、加密等高级功能。
【附图说明】
[0036]图1为本发明一种快速开发x86/x64平台shellcode的方法的一具体实施例的流程图;
[0037]图2为本发明一种快速开发x86/x64平台shellcode的系统的一具体实施例的结构示意图;
[0038]图3为本发明一种快速开发x86/x64平台shellcode的系统的另一具体实施例的结构示意图;
[0039]图4为应用程序接口获取模块的构成示意图。
【具体实施方式】
[0040]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图对本发明的快速开发x86/x64平台shellcode的方法及系统的【具体实施方式】进行说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0041]本发明一实施例的快速开发x86/x64平台shellcode的方法,如图1所示,包括以下步骤
[0042]S100,使用C语言编写动态获取操作系统的应用程序接口(API)。本发明实施例与传统技术的使用汇编语言进行shellcode代码编写不同,其使用高级C语言进行代码开发工作。通过定义一个GetProcAddressHash函数实现动态获取API (Applicat1nProgramming Interface,应用程序编程接口)功能。从而使用者在进行代码开发时,可利用GetProcAddressHash函数按照自己的需求动态获取相关API进行代码开发,实现所需功倉泛。
[0043]S200,根据获取的应用程序接口编写所需的shellcode代码。在进行代码的开发过程中,使用者可根据获取到的应用程序接口进行进一步的代码编写,实现自己所需的功能。或者换一个角度讲,开发人员在进行代码开发时,可首先使用C语言编写的函数获取操作系统中想要的应用程序接口,再对获取的应用程序接口进行所需的代码开发。
[0044]S300,使用编译器对所编写的shellcode代码进行编译,生成x86或x64平台的ΕΧΕ文件。与常规的程序编写一样,代码编写完成后使用编译器对代码进行编译。生成ΕΧΕ文件,以便后续提取代码。
[0045]S400,使用提取工具从ΕΧΕ文件中提取出shellcode代码。使用提取工具,从x86平台或x64平台的ΕΧΕ文件中的代码段提取出shellcode数据,提取出的shellcode数据(即shellcode代码),可拿来直接测试或攻击使用。其中,代码的提取可使用传统技术中的代码提取工具进行提取,此处不再做详细描述。
[0046]本发明实施例的快速开发x86/x64平台shellcode的方法,通过较高级的C语言进行shellcode代码的编写,代码开发速度快,并使用C语言编写动态获取应用程序接口,可自动适应x86平台或x64平台平台。开发人员可统一维护x86和x64平台shellcode代码,做到shellcode代码简单、易维护、代码统一、可容易实现复杂功能。同时,提取x86/x64平台shellcode简单方便,也可容易验证shellcode功能是否可用。其有效帮助开发人员实现shellcode多态变形、加密等高级功能。如:内存load dll、反调试、反沙箱等。且开发高级功能shellcode也可保证shellcode的保密性、隐藏性,代码中也很容易增加各种对抗特性。
[0047]在其中一个快速开发x86/x64平台shellcode的方法的实施例中,还包括以下步骤:
[0048]S400,使用加载器对所提取出的shellcode代码的功能的完整性进行验证。
[0049]本步骤是把提取出来的shellcode代码,使用加载器进行测试以验证功能完整性。在代码实际使用前进行测试,确保代码在实际使用中的性能。
[0050]另外,在使用编译器对所编写的shellcode代码进行编译,生成x86或者x64平台的ΕΧΕ文件之前,还需要对编译器进行设置。将编译器的参数设置为预设条件。所述的预设条件即为能够使编译器有效生成可被提取的shellcode数据的设置。本发明实施例中对编译器进行如下设置:优化,大小选择最小优化;优先大小或速度,选择代码大小优先;缓冲区检查,设置为否;运行库,选择多线程dll ;省略指针,选择为是。如此设置可让生成的文件最小化、最优化。
[0051]进一步的,使用C语言编写的函数动态获取操作系统的应用程序接口,包括以下步骤:
[0052]S110,获取x86或x64平台的PEB地址,得到PEB的结构信息。其中,x86平台通过获取地址0x60中的信息获取PEB的结构信息;x64平台通过获取地址0x30中的信息获取PEB的结构信息。具体的,GetProcAddressHash 函数先获取 PebAddress,取得PebAddress_>Ldr得到MY_PEB_LDR_DATA结构信息。相关部分代码参考如下:
[0053]#if defined (_WIN64)
[0054 ]PebAddress = (ΡΡΕΒ)—readgsqword (0x60) ;//获取 x86 平台的 PEB 地址
[0055]#else
[0056]PebAddress = (PPEB)—readfsdword (0x30) ;// 获取 x64 平台的 PEB 地址
[0057]#endif
[0058]pLdr = (PMY_PEB_LDR_DATA)PebAddress->Ldr ;
[0059]S120,根据PEB的结构信息查询应用程序接口函数所在列表,得到所需的应用程序接口。MY_PEB_LDR_DATA结构包含 InLoadOrderModuleList.Flink指向 LDR_DATA_TABLE_ENTRY表,遍历此表通过与函数名hash比较获取要查找的函数地址(系统API)。部分代码参考如下:
[0060]dwExportDirRVA = pNTHeader->0pt1nalHeader.DataDirectory[0].VirtualAddress;
[0061 ] //获取下一个模块入口
[0062]pDataTableEntry = (PMY_LDR_DATA_TABLE_ENTRY)pDataTableEntry->InLoadOrderLinks.Flink ;
[0063]if (dwExportDirRVA = = 0)
[0064]{
[0065]continue ;
[0066]}
[0067]//计算模块hash
[0068]for (i = 0 ;i<BaseDllName.MaximumLength ;i++)
[0069]{
[0070]pTempChar = ((PCSTR)BaseDllName.Buffer+i);
[0071]dwModuleHash = R0TR32(dwModuleHash);
[0072]if (*pTempChar> = 0x61)
[0073]{
[0074]dwModuleHash+ = *pTempChar-0x20 ;
[0075]}
[0076]else
[0077]{
[0078]dwModuleHash+ = *pTempChar ;
[0079]}
[0080]}
[0081]基于同一发明构思,本发明还提供一种快速开发x86/x64平台shellcode的系统,由于此系统解决问题的原理与前述一种快速开发x86/x64平台shellcode的方法相似,因此,该系统的实施可以按照前述方法的具体步骤实现,重复之处不再赘述。
[0082]本发明一实施例的快速开发x86/x64平台shellcode的系统,如图2所示,包括应用程序接口获取模块100、编译模块200及代码提取模块300。其中:应用程序接口获取模块100,用于使用C语言编写函数动态获取操作系统的应用程序接口。编译模块200,用于使用编译器,对利用应用程序接口获取模块获取应用程序接口,并使用应用程序接口编写的所需shellcode代码进行编译,生成x86或x64平台的ΕΧΕ文件。此处需要说明的是,shellcode代码开发人员通过利用应用程序接口获取模块获取应用程序接口后,根据实际需求的功能进行代码开发。开发完成后再通过编译模块利用编译器进行编译。代码提取模块300,用于使用提取工具从所述ΕΧΕ文件代码段中提取出shellcode代码。
[0083]本发明实施例的快速开发x86/x64平台shellcode的系统,通过较高级C语言进行shellcode代码的编写,并使用C语言编写动态获取应用程序接口(API),可自动适应x86平台或x64平台。开发人员可统一维护x86和x64平台shellcode代码,做到shellcode代码简单、易维护、代码统一、可容易实现复杂功能。同时,提取x86/x64平台shellcode简单方便,也可容易验证shellcode功能是否可用。其有效帮助开发人员实现shellcode多态变形、加密等高级功能。
[0084]在另一,决速开发x86/x64平台shellcode的系统的实施例中,如图3所示,还包括验证模块400,用于使用加载器对所提取出的shellcode代码的功能的完整性进行验证。以便在代码实际使用前检验代码的功能的可靠性,保证代码实际使用中的功能实现。
[0085]还需要说明的是,在使用编译器对编写的代码进行编译前,还需要将编译器的参数设置为预设条件。包括将优化参数设置为最小优化;将优先选择参数设置为代码大小优先;将缓冲区检查参数设置为否;将运行库参数设置为多线程dll ;将省略指针参数设置为是。如此设置可使生成文件最小化、最优化。
[0086]具体地,如图4所示,应用程序接口获取模块100包括PEB地址获取子模块110及查询子模块120。其中:PEB地址获取子模块110,用于获取x86或x64平台的PEB地址,得到PEB的结构信息。例如,对x86平台通过获取地址0x60中的信息获取PEB的结构信息;对x64平台通过获取地址0x30中的信息获取PEB的结构信息。如此可使shellcode编写过程中完美的兼容x86和x64平台。而无需刻意针对每种平台单独的使用汇编语言来编写代码。降低代码编写的复杂性及后期维护成本,同时也提高了代码编写的速度。
[0087]查询子模块120,用于根据PEB的结构信息查询应用程序接口函数所在列表,得到所需的应用程序接口。Shellcode代码开发人员可根据获取的应用程序接口(API)进行进一步的代码开发。当然,实际使用中开发人员可根据实际需求查询到所需的应用程序接口,并进行进一步的代码开发。
[0088]以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
【主权项】
1.一种快速开发x86/x64平台shellcode的方法,其特征在于,包括以下步骤: 使用C语言编写函数动态获取操作系统的应用程序接口; 根据获取的所述应用程序接口编写所需的shellcode代码; 使用编译器对所编写的shellcode代码进行编译,生成x86或x64平台的ΕΧΕ文件; 使用提取工具从所述ΕΧΕ文件代码段中提取出shellcode代码。2.根据权利要求1所述的快速开发x86/x64平台shellcode的方法,其特征在于,还包括以下步骤: 使用加载器对所提取出的shellcode代码的功能的完整性进行验证。3.根据权利要求1所述的快速开发x86/x64平台shellcode的方法,其特征在于,所述使用编译器对所编写的shellcode代码进行编译,生成x86或x64平台的ΕΧΕ文件之前,还包括以下步骤: 将编译器的参数设置为预设条件; 其中,所述预设条件包括: 优化参数为:最小优化;优先选择参数为:代码大小优先;缓冲区检查参数为:否;运行库参数为:多线程dll ;省略指针参数为:是。4.根据权利要求1所述的快速开发x86/x64平台shellcode的方法,其特征在于,使用C语言编写的函数动态获取操作系统的应用程序接口,包括以下步骤: 获取x86或x64平台的PEB地址,得到所述PEB的结构信息; 根据所述PEB的结构信息进一步获取应用程序接口函数名,得到所需的应用程序接□。5.根据权利要求4所述的快速开发x86/x64平台shellcode的方法,其特征在于: x86平台通过获取地址0x60中的信息获取PEB的结构信息; x64平台通过获取地址0x30中的信息获取PEB的结构信息。6.一种快速开发x86/x64平台shellcode的系统,其特征在于,包括应用程序接口获取模块、编译模块及代码提取模块,其中: 所述应用程序接口获取模块,用于使用C语言编写函数动态获取操作系统的应用程序接口(API);所述编译模块,用于使用编译器,对利用应用程序接口获取模块获取应用程序接口,对使用该应用程序接口编写的shellcode代码进行编译,生成x86或x64平台的ΕΧΕ文件;所述代码提取模块,用于使用提取工具从所述ΕΧΕ文件代码段中提取出shellcode代码。7.根据权利要求6所述的快速开发x86/x64平台shellcode的系统,其特征在于,还包括验证模块,用于使用加载器对所提取出的shellcode代码的功能的完整性进行验证。8.根据权利要求6所述的快速开发x86/x64平台shellcode的系统,其特征在于,在使用编译器对所编写的shellcode代码进行编译前,还需要将编译器的参数设置为预设条件; 所述预设条件包括: 优化参数为:最小优化;优先选择参数为:代码大小优先;缓冲区检查参数为:否;运行库参数为:多线程dll ;省略指针参数为..是。9.根据权利要求6所述的快速开发x86/x64平台shellcode的系统,其特征在于,应用程序接口获取模块包括PEB地址获取子模块及查询子模块,其中: 所述PEB地址获取子模块,用于获取x86或x64平台的PEB地址,得到所述PEB的结构信息; 所述查询子模块,用于根据所述PEB的结构信息查询应用程序接口函数名,得到所需的应用程序接口。10.根据权利要求9所述的快速开发x86/x64平台shellcode的系统,其特征在于, x86平台通过获取地址0x60中的信息获取PEB的结构信息; x64平台通过获取地址0x30中的信息获取PEB的结构信息。
【专利摘要】本发明公开了一种快速开发x86/x64平台shellcode的方法及系统。其中该方法包括如下步骤:使用C语言编写函数动态获取操作系统的应用程序接口(API);根据获取的应用程序接口编写所需的shellcode代码;使用编译器对所编写的shellcode代码进行编译,生成x86或x64平台的EXE文件;使用提取工具从EXE文件代码段中提取出shellcode代码。其通过较高级的C语言进行shellcode代码的编写,代码开发速度快,并使用C语言编写函数动态获取应用程序接口,可自动适应x86平台或x64平台,从而开发人员可统一维护x86和x64平台的shellcode代码,做到shellcode代码易开发、易维护、代码统一,且容易实现复杂功能。
【IPC分类】G06F9/44, G06F9/45, G06F21/57
【公开号】CN105487846
【申请号】CN201410482655
【发明人】刘昀, 闫磊, 苏丹, 任建伟, 吴佳, 李环媛, 宋伟
【申请人】国家电网公司, 国网冀北电力有限公司信息通信分公司
【公开日】2016年4月13日
【申请日】2014年9月19日

最新回复(0)