CN107168706A - 一种Windows Shellcode自动构建方法 - Google Patents

一种Windows Shellcode自动构建方法 Download PDF

Info

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
Application number
CN201710331792.4A
Other languages
English (en)
Inventor
罗森林
魏源
潘丽敏
韦伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Technology BIT
Original Assignee
Beijing Institute of Technology BIT
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Technology BIT filed Critical Beijing Institute of Technology BIT
Priority to CN201710331792.4A priority Critical patent/CN107168706A/zh
Publication of CN107168706A publication Critical patent/CN107168706A/zh
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

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自动构建方法,属于计算机与信息科学技术领域。
背景技术
目前已有的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等多款编码器,多款编码器均属自行研发,将其封装形成插件,以加载的形式引入,扩展自动构建系统并留出接口。
CN201710331792.4A 2017-05-12 2017-05-12 一种Windows Shellcode自动构建方法 Withdrawn CN107168706A (zh)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108270771A (zh) * 2017-12-22 2018-07-10 中国电子科技集团公司第三十研究所 一种shellcode编解码变形方法

Citations (3)

* Cited by examiner, † Cited by third party
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的方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
朱帅 等: ""windows shellcode自动构建方法研究"", 《信息网络安全》 *

Cited By (1)

* Cited by examiner, † Cited by third party
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