CN107168706A - 一种Windows Shellcode自动构建方法 - Google Patents
一种Windows Shellcode自动构建方法 Download PDFInfo
- Publication number
- CN107168706A CN107168706A CN201710331792.4A CN201710331792A CN107168706A CN 107168706 A CN107168706 A CN 107168706A CN 201710331792 A CN201710331792 A CN 201710331792A CN 107168706 A CN107168706 A CN 107168706A
- Authority
- CN
- China
- Prior art keywords
- shellcode
- windows
- interface
- auto constructing
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种Windows Shellcode自动构建方法,属于计算机与信息科学技术领域。本发明为不同应用场景下的Windows shellcode构建提供简单易用的接口,不借助其他工具(如Metasploit Framework)自动化完成shellcode构建。并使每个步骤都能单独完成任务。能够处理大型功能性shellcode的构建,提高shellcode构建的兼容性、可靠性以及自动化程度。能够在系统内省时省力的完成shellcode的构建任务。
Description
技术领域
本发明涉及一种Windows Shellcode自动构建方法,属于计算机与信息科学技术领域。
背景技术
目前已有的Windows shellcode构建方法存在可移植性差、对大型shellcode兼容性较低、易用性差及自动化程度较低的缺点。为了解决现有shellcode构建方法存在的缺陷和局限性,同时提高shellcode构建的可移植性、可靠性、兼容性以及自动化程度。为此,本发明将提供一种Windows Shellcode自动构建方法,能在不同应用场景下提供高效易用的接口,降低构建shellcode的工作量和难度。
目前存在shellcode构建框架主要有WriteWithC、Metasploit Framework及ShellForge以以为代表的几种典型的相关框架:
WriteWithC:WriteWithC框架的缺陷是只能在Windows x86下编写与生成shellcode,且提取生成shellcode的形式单一,没有shellcode编码与测试的功能。并且,通过计算函数偏移、大量shellcode代码运行时,编译器在自动优化shellcode会出现崩溃现象,健壮性低。
Metasploit Framework:Metasploit Framework内置的payload及encoder,构建shellcode只能使用payload和encoder,不能自定义不同功能的shellcode,存在较大的局限性。
Kmsrussian:Kmsrussian构建框架,其构建的原理与Shellcode Template中C方式类似。都支持Virtual Studio编译环境,能够直接对源代码调试,能够在Windows x64下编写与生成shellcode。但在计算函数偏移、shellcode提取,及x64、x86下开发都需要使用不同的环境,易用性低。同时没有shellcode编码与测试功能。
ShellForge:虽然ShellForge经过改良,已经升级到ShellForge G3,但仅能支持Linux、UNIX、MacOS系统,且不支持其它环境。
综上所述,现有的技术是使用C/C++语言编写shellcode,但C/C++程序语言需要高度依赖编译环境构建shellcode,生成的shellcode易用性较低。通过对当前常用方法和技术的分析,目前已存在的shellcode构建系统及构建方法都存在可移植性差、对大型shellcode兼容性低、易用性较差的缺点。所以本发明提出一种Windows Shellcode自动构建方法。
发明内容
本发明的目的是为各种应用平台下的Windows shellcode构建提供兼容性高的易用接口,不借助其他工具(如Kmsrussian)能够自动化构建shellcode。其中每个自步骤都能独立完成任务,能够自动化的构建大型功能性shellcode,提高shellcode构建的可靠性自动化程度、以及兼容性。能够在不同系统内高效的完成构建shellcode的任务。
本发明的设计原理为:
本发明根据shellcode的构建过程依次划分为框架预设、shellcode编写、调试与生成、提取与测试,以及编码与优化五个步骤。首先编写shellcode时,调用Hash值生成和函数地址获取接口,利用编译器和调试器,通过设置属性选项等操作来生成shellcode,并直接对源代码调试;然后根据不同类型的文件(PE类型文件和其他类型文件)使用对应的方法提取shellcode;完成后测试shellcode正确性。最后使用多个自主研发的编码器对不同环境的shellcode进行编码、加密、去除坏字符等,最终根据需求,将不同格式的shellcode导出并保存,便于测试人员使用。
本发明的技术方案是通过如下步骤实现的:
步骤1,框架预设实现Hash值计算、对齐堆栈接口和函数地址获取接口三个子接口供编写shellcode时调用。
步骤2,调试与生成主要利用编译器和调试器,构造稳定的编程环境、通过设置生成属性及编译属性选项来完成shellcode生成,并对源代码进行调试。
步骤3,提取与测试主要根据不同类型的文件(PE类型文件和其他类型文件)使用对应的方法提取shellcode;完成后测试shellcode可用性。
步骤4,用多个自主研发的编码器对不同环境的shellcode进行编码、加密、去除坏字符等,最终根据需求,将不同格式的shellcode导出并保存,便于测试人员使用。
有益效果
相比于其它不同框架在构建大型Windows Shellcode的方法,本发明可以同时支持多个系统平台,其他构建系统只支持单一系统平台,具有较好的易用性、兼容性。
相比于其他构建框架生成的shellcodeWindows的方法,本发明能够自动化的生成有效的shellcode,具有较高的可靠性。而其他构建框架生成运行大量的shellcode时,则会出现奔溃现象,不能正常运行。
附图说明
图1为本发明的原理图;
图2为具体实施方式中框架预设原理图;
图3为具体实施方式中原型系统功能结构图;
图4为具体实施方式中原型系统主程序流程图;
图5为具体实施方式中获取函数地址流程示意图;
图6为具体实施方式中shellcodeWindows编码工作流程图。
具体实施方式
为了更好的说明本发明的目的和优点,下面结合附图和实施例对本发明方法的实施方式做进一步详细说明。
具体流程为:
步骤1,首先为shellcode编写者提供了获取函数地址、计算Hash值接口、对齐堆栈接口、对齐堆栈接口以及预定义shellcode编程环境。
步骤1.1,获取接口主要通过匹配动态索引模块基址,将基址内的函数列表导出,再根据需求获取所需要的函数地址。
步骤1.2,通过普遍的Hash位移算法实现计算Hash值接口,并判断函数地址获取接口中的hash算法与对应接口中的Hash位移算法是否相匹配。
步骤1.3,为确保支持其它环境架构,对齐堆栈接口采用预定义的生成方法,运行shellcode之前先执行对齐堆栈预定义代码。
步骤2,输入程序,将高级语言的程序转换为字节码。
步骤2.1,依靠编译器进行shellcode生成。
步骤2.2,利用调试器的集成开发环境,设置编译生成选项及Debug模式,使用调试器进行C语言源代码调试。
步骤3,自动构建方法利用编译生成的shellcode的可执行程序,提取出实际的shellcode测试其有效性。同时,在分析漏洞攻击代码时,对进一步提取出来的shellcode进行分析。
步骤3.1,根据PE文件格式、指定的文件偏移获得code段中的shellcode。
步骤3.2,修改shellcode内存属性,通过改变程序执行流程到shellcode处执行,测试shellcode的有效性,并生成有效的shellcode。
步骤4,对shellcode进行多种格式的编码,将shellcode编码应用在不同环境中。
步骤4.1,对shellcode编码进行去除坏字符(\x00、\x20等)、多态shellcode编码、字母加数字shellcode编码等操作。
步骤4.2,对shellcode进行解析输出,输出成不同格式的shellcode,并将shellcode编码应用在不同环境中。
测试结果
总体来说,实验验证了这种Windows shellcode自动构建系统的有效性,且框架兼容x86、x64平台,具有兼容性好的特点。同时,在shellcode的构建过程中,除shellcode编写外人工参与较少,不需要另外借助其他工具,自动化程度较高。
以上所述的具体描述,对发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种Windows Shellcode自动构建方法,其特征在于所述方法包括如下步骤:
步骤1,依次通过获取函数地址、计算Hash值、对齐堆栈接口等方式获取需要的系统函数,包括:函数地址获取接口、Hash值计算接口、对齐堆栈接口以及预定义shellcode编程环境;
步骤1.1,生成具有位置无关性的shellcode;
步骤1.2,shellcode自动获取函数的地址;
步骤1.3,shellcode完成对齐堆栈,保存现场及重新恢复等操作;
步骤2,利用编译器的功能约束shellcode的编译行为,并对shellcode进行优化;
步骤3,利用编译器生成选项来生成shellcode调用的入口点、各函数相关位置、关联的依赖项及预定义的命令等,最终将shellcode转化成二进制字节码;
步骤4,分析漏洞利用代码或恶意代码,进一步提取shellcode用于测试;修改shellcode内存属性,并对其进行测试,通过改变程序执行流程到shellcode处执行,测试shellcode的有效性;
步骤5,采用异或操作去除坏字符,随机选取字节、双字、四字的字符,并与shllcode进行异或操作,同时在shellcode运行之前,添加异或解码操作,运行shellcode,并同时进行解码。
2.根据权利要求1所述的一种Windows Shellcode自动构建方法,其特征在于:步骤1中通过获取函数地址接口、计算Hash值接口、对齐堆栈接口以及shellcode编写。
3.根据权利要求1所述的一种Windows Shellcode自动构建方法,其特征在于:步骤2利用调试器进行C语言源代码调试后,编译器和链接器使用自动构建方法完成shellcode字节码的生成。
4.根据权利要求1所述的一种Windows Shellcode自动构建方法,其特征在于:步骤4中提取所需要的shellcode采用两种方式,一种是针对PE文件格式的提取方法,主要对代码段中的shellcode进行提取;另外一种针对指定的文件提取方式,通过计算相对偏移的长度来提取shellcode。
5.根据权利要求1所述的一种Windows Shellcode自动构建方法,其特征在于:步骤5中shellcode编码采用多态shellcode、1/4/8字节异或、数字加字母的shellcode等多款编码器,多款编码器均属自行研发,将其封装形成插件,以加载的形式引入,扩展自动构建系统并留出接口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710331792.4A CN107168706A (zh) | 2017-05-12 | 2017-05-12 | 一种Windows Shellcode自动构建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710331792.4A CN107168706A (zh) | 2017-05-12 | 2017-05-12 | 一种Windows Shellcode自动构建方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107168706A true CN107168706A (zh) | 2017-09-15 |
Family
ID=59814976
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710331792.4A Withdrawn CN107168706A (zh) | 2017-05-12 | 2017-05-12 | 一种Windows Shellcode自动构建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107168706A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108270771A (zh) * | 2017-12-22 | 2018-07-10 | 中国电子科技集团公司第三十研究所 | 一种shellcode编解码变形方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063324A (zh) * | 2010-12-31 | 2011-05-18 | 杭州依赛通信有限公司 | 一种实现自动化编程的方法及系统 |
CN103049701A (zh) * | 2012-11-30 | 2013-04-17 | 南京翰海源信息技术有限公司 | 基于内存搜索的shellcode的检测系统及方法 |
CN105487846A (zh) * | 2014-09-19 | 2016-04-13 | 国家电网公司 | 快速开发x86/x64平台shellcode的方法及系统 |
-
2017
- 2017-05-12 CN CN201710331792.4A patent/CN107168706A/zh not_active Withdrawn
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063324A (zh) * | 2010-12-31 | 2011-05-18 | 杭州依赛通信有限公司 | 一种实现自动化编程的方法及系统 |
CN103049701A (zh) * | 2012-11-30 | 2013-04-17 | 南京翰海源信息技术有限公司 | 基于内存搜索的shellcode的检测系统及方法 |
CN105487846A (zh) * | 2014-09-19 | 2016-04-13 | 国家电网公司 | 快速开发x86/x64平台shellcode的方法及系统 |
Non-Patent Citations (1)
Title |
---|
朱帅 等: ""windows shellcode自动构建方法研究"", 《信息网络安全》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108270771A (zh) * | 2017-12-22 | 2018-07-10 | 中国电子科技集团公司第三十研究所 | 一种shellcode编解码变形方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Lacomis et al. | Dire: A neural approach to decompiled identifier naming | |
JP7317722B2 (ja) | ブロックチェーンコンパイラ | |
US8842124B2 (en) | Declarative interface for developing test cases for graphics programs | |
US11775414B2 (en) | Automated bug fixing using deep learning | |
WO2021208288A1 (zh) | 一种代码与配置数据分离的程序实现方法及系统 | |
Bacchelli et al. | Extracting structured data from natural language documents with island parsing | |
CN110245467B (zh) | 基于Dex2C与LLVM的Android应用程序保护方法 | |
CN103631573B (zh) | 可迁移函数执行时间的获得方法及系统 | |
US20150169881A1 (en) | Method And Apparatus For Providing String Encryption And Decryption In Program Files | |
CN105184160A (zh) | 一种基于API对象调用关系图的Android手机平台应用程序恶意行为检测的方法 | |
CN103853650A (zh) | 一种模糊测试的测试用例生成方法及装置 | |
KR102011725B1 (ko) | 악성코드 검출을 위한 화이트리스트 구축 방법 및 이를 수행하기 위한 기록매체 및 장치 | |
CN103150200A (zh) | 一种计算机语言转换系统及c语言到msvl语言的转换方法 | |
CN106796525A (zh) | 按需加载动态脚本语言代码以减少内存使用 | |
Gui et al. | Cross-language binary-source code matching with intermediate representations | |
CN113312108A (zh) | Swift报文的校验方法、装置、电子设备及存储介质 | |
CN115033895B (zh) | 一种二进制程序供应链安全检测方法及装置 | |
CN115544490A (zh) | 一种检测二进制文件中密码常量的方法及系统 | |
Mendis et al. | Revec: program rejuvenation through revectorization | |
Juričić | Detecting source code similarity using low-level languages | |
Cao et al. | Boosting neural networks to decompile optimized binaries | |
CN107168706A (zh) | 一种Windows Shellcode自动构建方法 | |
KR20200071413A (ko) | 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법 | |
US11307962B2 (en) | Method for semantic preserving transform mutation discovery and vetting | |
CN109460236A (zh) | 程序版本构建和检查方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20170915 |
|
WW01 | Invention patent application withdrawn after publication |