CN108038376A - 基于混合分析的加壳程序通用脱壳方法及装置 - Google Patents

基于混合分析的加壳程序通用脱壳方法及装置 Download PDF

Info

Publication number
CN108038376A
CN108038376A CN201711396871.XA CN201711396871A CN108038376A CN 108038376 A CN108038376 A CN 108038376A CN 201711396871 A CN201711396871 A CN 201711396871A CN 108038376 A CN108038376 A CN 108038376A
Authority
CN
China
Prior art keywords
code
shelling
program
entrance
shell
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.)
Pending
Application number
CN201711396871.XA
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.)
Information Engineering University of PLA Strategic Support Force
Original Assignee
Information Engineering University of PLA Strategic Support Force
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 Information Engineering University of PLA Strategic Support Force filed Critical Information Engineering University of PLA Strategic Support Force
Priority to CN201711396871.XA priority Critical patent/CN108038376A/zh
Publication of CN108038376A publication Critical patent/CN108038376A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明属于网络安全技术领域,特别涉及一种基于混合分析的加壳程序通用脱壳方法及装置,该方法实现过程如下:依据程序静态特征对加壳代码进行静态匹配,对通过静态匹配的加壳代码中代码块通过逆向分析加壳代码,获取壳类型及受保护代码可疑入口点并进行定向脱壳;对于加壳代码中无法静态匹配的代码块,在代码执行过程中进行指令流和数据流动态跟踪和插桩,找到受保护代码程序真实入口点,完成动态脱壳。本发明综合静态脱壳和动态脱壳技术的优缺点,有效解决绝大部分加壳代码的自动脱壳问题,在不限加定壳类型的情况下,实现加壳样本的自动、批量、快速脱壳,增强网络对恶意代码的防御能力,对网络安全具有重要的指导意义。

Description

基于混合分析的加壳程序通用脱壳方法及装置
技术领域
本发明属于网络安全技术领域,特别涉及一种基于混合分析的加壳程序通用脱壳方法及装置。
背景技术
加壳技术是恶意代码编写者经常使用的一项技术。由于被加壳的程序只有在执行时才在内存中被还原,可有效防止研究人员对程序的分析,因此,恶意代码往往会使用加壳技术来规避杀毒软件的查杀,当然,加壳技术本身并没有恶意性,许多良性软件出于版权保护的考量也会使用加壳技术。使用了加壳技术的代码很难被反汇编,若要使用反汇编技术对加壳代码进行分析,首先需要对代码进行脱壳处理,再进行特征提取和行为分析。近年来,恶意程序(如病毒、木马、蠕虫等)普遍使用一些高级的软件保护技术躲避检测工具(如防病毒软件)的扫描和查杀,复杂的程序加壳技术就是其中的典型代表,据统计,目前经过加壳的恶意代码所占的比例已经超过了80%,恶意代码的这种发展趋势为检测工具带来了巨大的挑战。因此如何还原程序内容,获得程序的执行行为是恶意代码检测技术研究的重点。目前的脱壳分析方式主要有两种:一种是使用手工脱壳;另一种是使用专用脱壳机进行定向脱壳。这两种方式都存在明显的缺陷,如缺乏通用性、难以跟上加壳技术的进步和加壳实例的开发速度、需要耗费大量的人力和物力等。曾勇军、朱俊虎等人给出了存储器监控算法和动态基本块标记算法,描述了基于QEMU仿真器的程序自动脱壳数据采集系统的设计思路,有效地提取被加壳程序的代码和数据,完整地记录程序脱壳的执行行为;张中华、苏志同介绍了软件保护及用加壳的方式进行软件保护,详细的分析了加花指令、SEH技术及IAT加密三种加壳保护手段,并给出了相关的原理介绍和主要的实现过程;李露、刘秋菊等人分析了PE文件结构及其加壳原理,阐述了脱壳的一般步骤,从压缩壳和加密壳的角度重点探讨了脱壳技术的原理和方法。从实际效果来看,为了适应大规模多样化恶意样本的自动脱壳需求,已有的脱壳技术手段和方法还存在以下不足:缺乏通用性,脱壳技术难以跟上加壳技术的发展步伐和壳类型的更新速度;缺乏可扩展性,难以满足大规模样本的自动化脱壳需求;难以实现对脱壳后代码片段的自动映射和组装,进而重构出一个完整的可执行PE文件。为此,如何设计一种自动化、通用化的脱壳方法,是加壳类恶意代码自动分析需要解决的首要问题。
发明内容
针对现有技术中的不足,本发明提供一种基于混合分析的加壳程序通用脱壳方法及装置,有效解决绝大部分加壳代码的自动脱壳问题,在不限加定壳类型的情况下,实现加壳样本的自动、批量、快速脱壳,增强针对恶意代码的网络防御能力。
按照本发明所提供的设计方案,一种基于混合分析的加壳程序通用脱壳方法,包含如下内容:
首先,依据程序静态特征对加壳代码进行静态匹配,对通过静态匹配的加壳代码中代码块通过逆向分析加壳代码,获取壳类型及受保护代码可疑入口点并进行定向脱壳;
然后,对于加壳代码中无法静态匹配的代码块,在代码执行过程中进行指令流和数据流动态跟踪和插桩,找到受保护代码程序真实入口点,完成动态脱壳。
上述的,对于加壳代码中无法静态匹配的代码块,是指加壳代码中存在指向新代码块的转移分支指令。
优选的,加壳代码中存在指向新代码块的转移分支指令,具体指代码中存在如下情形:间接调用、异常处理代码或代码重写。
上述的,对于加壳代码中无法静态匹配的代码块,利用动态二进制插桩技术对分支点进行指令级插桩,跟踪代码执行情况,找出受保护代码程序真实入口点,完成加壳程序动态脱壳。
优选的,加壳程序动态脱壳,包含如下内容:对代码中存在指向新代码块的转移分支指令进行动态插桩,寻找代码块入口点作为候选脱壳代码程序真实入口点,通过计算候选脱壳代码程序真实入口点被执行时代码节熵值,对脱壳代码程序真实入口点进行启发式判别,确定真正的脱壳代码程序真实入口点并进行动态脱壳。
更进一步,计算代码节熵值,具体是指:通过脱壳前后代码节字及字节出现概率,计算脱壳前后代码字节分布的不均匀程度。
上述的,计算代码节熵值的表达式表示为:其中,Len表示代码字节数,p(i)表示字节i出现的概率,通过H大小判断代码块入口点是否为程序真实入口点。
上述的,确定真正的脱壳代码程序真实入口点并进行动态脱壳,具体过程如下:若指向新代码块的转移分支指令为内存重写指令,则在访存指令执行前后插入访存分析函数,记录该指令写的所有内存区域,并将其加入写内存集合中;判断被写区域是否在代码节部分,若是,则判定出现代码重写情况,将写入点标记为候选脱壳代码程序真实入口点;判断当前指令地址是否存在于程序写内存集合中,若是,则将该内存块标记为候选脱壳代码程序真实入口点;计算候选脱壳代码程序真实入口点被执行时刻所有代码的熵值,通过熵值大小选取候选脱壳代码程序真实入口点作为加壳代码的程序真实入口点,进行动态脱壳。
上述的,确定真正的脱壳代码程序真实入口点并进行动态脱壳,具体过程如下:若指向新代码块的转移分支指令为异常处理指令,则在加壳代码出现异常时在异常处理代码开始和退出指令处分别进行插桩,记录异常处理完后跳转到的地址,继续执行异常处理,在异常处理退出点判断异常处理结束跳转地址是否发生改变,若发生改变,则将新的跳转地址标记为候选脱壳代码程序真实入口点,计算候选脱壳代码程序真实入口点被执行时刻所有代码的熵值,通过熵值大小选取候选脱壳代码程序真实入口点作为加壳代码的程序真实入口点,进行动态脱壳。
一种基于混合分析的加壳程序通用脱壳装置,包含如下内容:静态分析模块,静态脱壳模块,动态脱壳模块,其中,
静态分析模块,用于依据程序静态特征对加壳代码进行静态匹配,将通过静态匹配的代码块反馈至静态脱壳模块,将未通过静态匹配的代码块反馈至动态脱壳模块;
静态脱壳模块,用于通过逆向分析加壳代码,获取壳类型及受保护代码可疑入口点并进行定向脱壳;
动态脱壳模块,用于对加壳代码中未通过静态匹配的代码块进行动态插桩,寻找代码块入口点作为候选脱壳代码程序真实入口点,通过计算候选脱壳代码程序真实入口点被执行时代码节熵值,对脱壳代码程序真实入口点进行启发式判别并确定真正的脱壳代码程序真实入口点进行动态脱壳,经过启发式判别未获取脱壳代码程序真实入口点或动态脱壳失败两情形均反馈至静态分析模块,重新进行静态匹配。
本发明的有益效果:
本发明综合静态脱壳和动态脱壳技术的优缺点,首先匹配加壳代码的静态特征,对于能准确匹配的,则对壳类型做出直接判断进行定向脱壳;而对于无法准确匹配的,则采用动态脱壳方法,通过对目标程序执行过程进行指令流和数据流跟踪、记录和分析,对目标程序进行自动脱壳处理,有效解决了绝大部分加壳代码的自动脱壳问题,在不限加定壳类型的情况下,实现了加壳样本的自动、批量、快速脱壳,增强网络对恶意代码的防御能力,对网络安全具有重要的指导意义。
附图说明:
图1为实施例中的基于混合分析的加壳程序通用脱壳方法流程图;
图2为实施例中基于混合分析的加壳程序通用脱壳工作流程图;
图3为实施例中基于混合分析的加壳程序通用脱壳装置示意图。
具体实施方式:
为使本发明的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本发明作进一步详细的说明。
脱壳的目的是消除加壳对恶意代码分析的影响,有效脱壳要求分析者尽可能准确地将程序还原到加壳之前的代码形态,并确定程序的原始入口点。为了适应大规模多样化恶意样本的自动脱壳需求,已有的脱壳技术手段和方法还存缺乏通用性、缺乏可扩展性,及难以实现对脱壳后代码片段的自动映射和组装进而重构出一个完整的可执行PE文件等情形。为此,本发明实施例提供一种基于混合分析的加壳程序通用脱壳方法,参见图1所示,包含如下内容:
101)依据程序静态特征对加壳代码进行静态匹配,对通过静态匹配的加壳代码中代码块通过逆向分析加壳代码,获取壳类型及受保护代码可疑入口点并进行定向脱壳;
102)对于加壳代码中无法静态匹配的代码块,在代码执行过程中进行指令流和数据流动态跟踪和插桩,找到受保护代码程序真实入口点,完成动态脱壳。
静态脱壳是指通过静态逆向分析加壳程序,直接得到加壳算法的逆算法,对特定类型的壳需要生成专门的脱壳算法进行定向脱壳。这种脱壳方式缺乏通用性,难以应对日趋复杂的加壳技术和不断更新的加壳算法。动态脱壳并不针对某一特定类型的加壳程序,对于任何加壳代码,在其执行的初始阶段,都会在内存将真正要执行的功能代码释放并还原出来,通过动态跟踪调试技术,找到脱壳结束位置,抓取此时的内存映像,还原出程序加壳前的原始可执行代码形态;有效解决绝大部分加壳代码的自动脱壳问题,在不限加定壳类型的情况下,实现了加壳样本的自动、批量、快速脱壳。
通过对加壳程序代码分析,对于加壳代码中无法静态匹配的代码块,可以是加壳代码中存在指向新代码块的转移分支指令;进一步的,参见图2所示,具体指代码中存在如下情形:间接调用、异常处理代码或代码重写等的情形。
参见图2所示,对于加壳代码中无法静态匹配的代码块,利用动态二进制插桩技术对分支点进行指令级插桩,跟踪代码执行情况,找出受保护代码程序真实入口点,完成加壳程序动态脱壳。
代码脱壳的关键在于对程序真实入口点位置进行准确定位,外壳程序首先会对受保护的加密代码进行解密处理,并将解密后的代码写入内存,相比于解密前代码,解密后代码形态发生了很大变化。解密完成后,一般会通过长跳转指令,跳转到程序真实程序入口点OEP,将程序控制权交还于原程序后继续执行,程序入口点一般具有特定编程语言编译器所产生编译特征。另外,根据堆栈平衡定律,为了保证壳程序的通用性,外壳程序在完成自身工作跳转到程序真正入口点处,将程序控制权交还给原程序时,必须保证堆栈及寄存器状态与程序初始加载时一致,故程序入口位置的ESP寄存器应存放着指向系统栈顶的指针。为此,ESP平衡点信息,指令跳转长度,代码熵值变化,程序入口特征代码,以及写内存数据被执行等情况均可作为到达程序真正入口点的重要依据。据此,本发明以动态二进制分析平台Pin为基础,设计并实现了一种基于混合分析的OEP自动、快速发现和定位方法,参见图2所示,加壳程序动态脱壳包含如下内容:对代码中存在指向新代码块的转移分支指令进行动态插桩,寻找代码块入口点作为候选脱壳代码程序真实入口点,通过计算候选脱壳代码程序真实入口点被执行时代码节熵值,对脱壳代码程序真实入口点进行启发式判别,确定真正的脱壳代码程序真实入口点并进行动态脱壳。
传统基于二进制分析的动态脱壳方法一般采用的是全指令插桩和跟踪思路,分析每条指令的访存操作,把被写且被执行的内存块作为脱壳代码OEP查找的基本依据,这在一定程度上能解决部分加壳样本的脱壳问题,但全指令插桩不仅会带来效率低下问题,有些加壳技术还会检测这类全指令单步分析的情况,致使脱壳无法进行下去。为此,在充分研究加壳软件常用代码混淆和保护技术的基础上,提出基于混合分析的动态高效脱壳方法,其工作流程如图1所示。首先利用静态反汇编方法对加壳代码的基本执行流程进行分析,形成加壳代码执行的大致脉络,找出受保护代码的可能入口点,对于加壳代码常用的基于函数指针的调用过程混淆,基于异常处理机制的保护代码跳转,基于堆栈修改的保护代码隐蔽调用,脱壳代码自修改调用等代码保护机制,则需要利用动态二进制插桩技术,在静态分析的基础上,对部分分支点进行指令级插桩,跟踪新代码的执行情况,从而找出受保护代码的OEP。上述混合分析方法充分利用静态分析和动态分析的优势,有效提高自动化脱壳的效率和准确率。
一般来讲,脱壳后,代码会经过解密解压缩处理,在字节分布方面与脱壳前会存在较大差异,在上述脱壳算法中,用代码熵值的变化量来判断两段代码之间的字节分布差异。熵是物理学中的概念,通常用来反应事物分布的不均匀程度,熵值越高,表示分布越不均匀。优选的,计算代码节熵值,通过脱壳前后代码节字及字节出现概率,计算脱壳前后代码字节分布的不均匀程度。
上述的,用熵值来计算程序字节分布的不均匀程度,其计算公式如下:其中,Len表示代码字节数,p(i)表示字节i出现的概率,通过H大小判断代码块入口点是否为程序真实入口点,H越大,表示分布越混乱,该候选入口点的真实度越高。
上述的,确定真正的脱壳代码程序真实入口点并进行动态脱壳,具体过程如下:若指向新代码块的转移分支指令为内存重写指令,则在访存指令执行前后插入访存分析函数,记录该指令写的所有内存区域,并将其加入写内存集合中;判断被写区域是否在代码节部分,若是,则判定出现代码重写情况,将写入点标记为候选脱壳代码程序真实入口点;判断当前指令地址是否存在于程序写内存集合中,若是,则将该内存块标记为候选脱壳代码程序真实入口点;计算候选脱壳代码程序真实入口点被执行时刻所有代码的熵值,通过熵值大小选取候选脱壳代码程序真实入口点作为加壳代码的程序真实入口点,进行动态脱壳。具体算法描述如下:
上述的,确定真正的脱壳代码程序真实入口点并进行动态脱壳,具体过程如下:若指向新代码块的转移分支指令为异常处理指令,则在加壳代码出现异常时在异常处理代码开始和退出指令处分别进行插桩,记录异常处理完后跳转到的地址,继续执行异常处理,在异常处理退出点判断异常处理结束跳转地址是否发生改变,若发生改变,则将新的跳转地址标记为候选脱壳代码程序真实入口点,计算候选脱壳代码程序真实入口点被执行时刻所有代码的熵值,通过熵值大小选取候选脱壳代码程序真实入口点作为加壳代码的程序真实入口点,进行动态脱壳;具体算法描述如下:
脱壳流程中,最为关键的是如何发现基于内存重写的脱壳代码执行点,以及基于异常处理机制的脱壳代码隐蔽触发点,这也是多数加壳软件最为常用的代码保护方法,对加壳程序能否顺利脱壳至为关键。
基于上述方法的实施例,本发明还一种基于混合分析的加壳程序通用脱壳装置,参见图3所示,包含如下内容:静态分析模块201,静态脱壳模块202,动态脱壳模块203,其中,
静态分析模块201,用于依据程序静态特征对加壳代码进行静态匹配,将通过静态匹配的代码块反馈至静态脱壳模块,将未通过静态匹配的代码块反馈至动态脱壳模块;
静态脱壳模块202,用于通过逆向分析加壳代码,获取壳类型及受保护代码可疑入口点并进行定向脱壳;
动态脱壳模块203,用于对加壳代码中未通过静态匹配的代码块进行动态插桩,寻找代码块入口点作为候选脱壳代码程序真实入口点,通过计算候选脱壳代码程序真实入口点被执行时代码节熵值,对脱壳代码程序真实入口点进行启发式判别并确定真正的脱壳代码程序真实入口点进行动态脱壳,经过启发式判别未获取脱壳代码程序真实入口点或动态脱壳失败两情形均反馈至静态分析模块,重新进行静态匹配。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种基于混合分析的加壳程序通用脱壳方法,其特征在于,包含如下内容:
首先,依据程序静态特征对加壳代码进行静态匹配,对通过静态匹配的加壳代码中代码块通过逆向分析加壳代码,获取壳类型及受保护代码可疑入口点并进行定向脱壳;
然后,对于加壳代码中无法静态匹配的代码块,在代码执行过程中进行指令流和数据流动态跟踪和插桩,找到受保护代码程序真实入口点,完成动态脱壳。
2.根据权利要求1所述的基于混合分析的加壳程序通用脱壳方法,其特征在于,对于加壳代码中无法静态匹配的代码块,是指加壳代码中存在指向新代码块的转移分支指令。
3.根据权利要求2所述的基于混合分析的加壳程序通用脱壳方法,其特征在于,加壳代码中存在指向新代码块的转移分支指令,具体指代码中存在如下情形:间接调用、异常处理代码或代码重写。
4.根据权利要求1所述的基于混合分析的加壳程序通用脱壳方法,其特征在于,对于加壳代码中无法静态匹配的代码块,利用动态二进制插桩技术对分支点进行指令级插桩,跟踪代码执行情况,找出受保护代码程序真实入口点,完成加壳程序动态脱壳。
5.根据权利要求4所述的基于混合分析的加壳程序通用脱壳方法,其特征在于,加壳程序动态脱壳,包含如下内容:对代码中存在指向新代码块的转移分支指令进行动态插桩,寻找代码块入口点作为候选脱壳代码程序真实入口点,通过计算候选脱壳代码程序真实入口点被执行时代码节熵值,对脱壳代码程序真实入口点进行启发式判别,确定真正的脱壳代码程序真实入口点并进行动态脱壳。
6.根据权利要求5所述的基于混合分析的加壳程序通用脱壳方法,其特征在于,计算代码节熵值,具体是指:通过脱壳前后代码节字及字节出现概率,计算脱壳前后代码字节分布的不均匀程度。
7.根据权利要求5或6所述的基于混合分析的加壳程序通用脱壳方法,其特征在于,计算代码节熵值的表达式表示为:其中,Len表示代码字节数,p(i)表示字节i出现的概率,通过H大小判断代码块入口点是否为程序真实入口点。
8.根据权利要求5所述的基于混合分析的加壳程序通用脱壳方法及装置,其特征在于,确定真正的脱壳代码程序真实入口点并进行动态脱壳,具体过程如下:若指向新代码块的转移分支指令为内存重写指令,则在访存指令执行前后插入访存分析函数,记录该指令写的所有内存区域,并将其加入写内存集合中;判断被写区域是否在代码节部分,若是,则判定出现代码重写情况,将写入点标记为候选脱壳代码程序真实入口点;判断当前指令地址是否存在于程序写内存集合中,若是,则将该内存块标记为候选脱壳代码程序真实入口点;计算候选脱壳代码程序真实入口点被执行时刻所有代码的熵值,通过熵值大小选取候选脱壳代码程序真实入口点作为加壳代码的程序真实入口点,进行动态脱壳。
9.根据权利要求5所述的基于混合分析的加壳程序通用脱壳方法及装置,其特征在于,确定真正的脱壳代码程序真实入口点并进行动态脱壳,具体过程如下:若指向新代码块的转移分支指令为异常处理指令,则在加壳代码出现异常时在异常处理代码开始和退出指令处分别进行插桩,记录异常处理完后跳转到的地址,继续执行异常处理,在异常处理退出点判断异常处理结束跳转地址是否发生改变,若发生改变,则将新的跳转地址标记为候选脱壳代码程序真实入口点,计算候选脱壳代码程序真实入口点被执行时刻所有代码的熵值,通过熵值大小选取候选脱壳代码程序真实入口点作为加壳代码的程序真实入口点,进行动态脱壳。
10.一种基于混合分析的加壳程序通用脱壳装置,其特征在于,包含如下内容:静态分析模块,静态脱壳模块,动态脱壳模块,其中,
静态分析模块,用于依据程序静态特征对加壳代码进行静态匹配,将通过静态匹配的代码块反馈至静态脱壳模块,将未通过静态匹配的代码块反馈至动态脱壳模块;
静态脱壳模块,用于通过逆向分析加壳代码,获取壳类型及受保护代码可疑入口点并进行定向脱壳;
动态脱壳模块,用于对加壳代码中未通过静态匹配的代码块进行动态插桩,寻找代码块入口点作为候选脱壳代码程序真实入口点,通过计算候选脱壳代码程序真实入口点被执行时代码节熵值,对脱壳代码程序真实入口点进行启发式判别并确定真正的脱壳代码程序真实入口点进行动态脱壳,经过启发式判别未获取脱壳代码程序真实入口点或动态脱壳失败两情形均反馈至静态分析模块,重新进行静态匹配。
CN201711396871.XA 2017-12-21 2017-12-21 基于混合分析的加壳程序通用脱壳方法及装置 Pending CN108038376A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711396871.XA CN108038376A (zh) 2017-12-21 2017-12-21 基于混合分析的加壳程序通用脱壳方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711396871.XA CN108038376A (zh) 2017-12-21 2017-12-21 基于混合分析的加壳程序通用脱壳方法及装置

Publications (1)

Publication Number Publication Date
CN108038376A true CN108038376A (zh) 2018-05-15

Family

ID=62100521

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711396871.XA Pending CN108038376A (zh) 2017-12-21 2017-12-21 基于混合分析的加壳程序通用脱壳方法及装置

Country Status (1)

Country Link
CN (1) CN108038376A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110362995A (zh) * 2019-05-31 2019-10-22 电子科技大学成都学院 一种基于逆向与机器学习的恶意软件检测及分析系统
CN111522699A (zh) * 2020-04-14 2020-08-11 杭州米加科技股份有限公司 针对vmp指令引发目标内存变化的检测方法
CN112541188A (zh) * 2019-09-20 2021-03-23 武汉斗鱼网络科技有限公司 阻止应用程序代码被静态分析的方法及装置
CN112632536A (zh) * 2020-12-22 2021-04-09 四川大学 基于pe文件改造的内存加载方法
CN113836528A (zh) * 2020-06-08 2021-12-24 中国电信股份有限公司 安卓应用查壳方法和装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103019739A (zh) * 2012-12-28 2013-04-03 北京神州绿盟信息安全科技股份有限公司 重定位表的修复方法、程序脱壳方法及相关装置
US20150096022A1 (en) * 2013-09-30 2015-04-02 Michael Vincent Dynamically adaptive framework and method for classifying malware using intelligent static, emulation, and dynamic analyses

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103019739A (zh) * 2012-12-28 2013-04-03 北京神州绿盟信息安全科技股份有限公司 重定位表的修复方法、程序脱壳方法及相关装置
US20150096022A1 (en) * 2013-09-30 2015-04-02 Michael Vincent Dynamically adaptive framework and method for classifying malware using intelligent static, emulation, and dynamic analyses

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
LYDA R ET AL.: "Using entropy analysis to find encrypted and packed malware", 《IEEE SECURITY AND PRIVACY》 *
彭小详等: "恶意代码自动脱壳技术研究", 《信息网络安全》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110362995A (zh) * 2019-05-31 2019-10-22 电子科技大学成都学院 一种基于逆向与机器学习的恶意软件检测及分析系统
CN112541188A (zh) * 2019-09-20 2021-03-23 武汉斗鱼网络科技有限公司 阻止应用程序代码被静态分析的方法及装置
CN112541188B (zh) * 2019-09-20 2022-05-13 武汉斗鱼网络科技有限公司 阻止应用程序代码被静态分析的方法及装置
CN111522699A (zh) * 2020-04-14 2020-08-11 杭州米加科技股份有限公司 针对vmp指令引发目标内存变化的检测方法
CN111522699B (zh) * 2020-04-14 2023-05-23 杭州斯凯数据科技集团有限公司 针对vmp指令引发目标内存变化的检测方法
CN113836528A (zh) * 2020-06-08 2021-12-24 中国电信股份有限公司 安卓应用查壳方法和装置
CN113836528B (zh) * 2020-06-08 2023-10-13 中国电信股份有限公司 安卓应用查壳方法和装置
CN112632536A (zh) * 2020-12-22 2021-04-09 四川大学 基于pe文件改造的内存加载方法

Similar Documents

Publication Publication Date Title
CN108038376A (zh) 基于混合分析的加壳程序通用脱壳方法及装置
US20190050566A1 (en) Technologies for control flow exploit mitigation using processor trace
Egele et al. Blanket execution: Dynamic similarity testing for program binaries and components
Alam et al. DroidNative: Automating and optimizing detection of Android native code malware variants
Zhang et al. A first step towards algorithm plagiarism detection
CN104517057B (zh) 基于可信计算的软件混合度量方法
KR101228899B1 (ko) 벡터량 산출을 이용한 악성코드의 분류 및 진단 방법과 장치
Kalysch et al. VMAttack: Deobfuscating virtualization-based packed binaries
CN108108617B (zh) 基于静态指令流跟踪的导入表修复方法及装置
US20170091454A1 (en) Lbr-based rop/jop exploit detection
Zhang et al. BDA: practical dependence analysis for binary executables by unbiased whole-program path sampling and per-path abstract interpretation
Pfaff et al. Learning how to prevent return-oriented programming efficiently
Meng Fine-grained binary code authorship identification
Anju et al. Malware detection using assembly code and control flow graph optimization
Kong et al. Defitainter: Detecting price manipulation vulnerabilities in defi protocols
EP3087527B1 (en) System and method of detecting malicious multimedia files
CN118094567A (zh) 一种基于x86-64指令集的二进制代码静态分析方法
Alrabaee A stratified approach to function fingerprinting in program binaries using diverse features
Choi et al. Cloud-BlackBox: Toward practical recording and tracking of VM swarms for multifaceted cloud inspection
CN109472135A (zh) 一种检测进程注入的方法、装置及存储介质
CN110516445A (zh) 反检测恶意代码的识别方法、装置及存储介质
CN110520860B (zh) 用于防护软件代码的方法
Chen et al. OBSan: An Out-Of-Bound Sanitizer to Harden DNN Executables.
Du et al. Automatic recovery of fine-grained compiler artifacts at the binary level
Weiss et al. Ezclone: Improving dnn model extraction attack via shape distillation from gpu execution profiles

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
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20180515