CN108108617A - 基于静态指令流跟踪的导入表修复方法及装置 - Google Patents

基于静态指令流跟踪的导入表修复方法及装置 Download PDF

Info

Publication number
CN108108617A
CN108108617A CN201711395746.7A CN201711395746A CN108108617A CN 108108617 A CN108108617 A CN 108108617A CN 201711395746 A CN201711395746 A CN 201711395746A CN 108108617 A CN108108617 A CN 108108617A
Authority
CN
China
Prior art keywords
importing
jump
instruction
instruction stream
static
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.)
Granted
Application number
CN201711395746.7A
Other languages
English (en)
Other versions
CN108108617B (zh
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 CN201711395746.7A priority Critical patent/CN108108617B/zh
Publication of CN108108617A publication Critical patent/CN108108617A/zh
Application granted granted Critical
Publication of CN108108617B publication Critical patent/CN108108617B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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

Landscapes

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

Abstract

本发明属于网络安全技术领域,特别涉及一种基于静态指令流跟踪的导入表修复方法及装置,该方法实现过程如下:针对脱壳后程序进行静态分析,跟踪其指令流,捕获待指令流到系统动态链接库的跳转点;根据跳转点确定真正的API函数地址;依据真正的API函数地址修正待修复导入表的表项,完成导入表修复。本发明利用静态指令流跟踪技术可以在不动态执行指令的情况下,跟踪程序的指令流,捕获指令流到系统动态链接库的跳转点,从而确定真正的API函数地址,完成导入表的修复,有效解决混淆导入表修复问题,保证脱壳效果及脱壳后PE文件的完整重构,增强网络对恶意代码的防御能力,对网络安全具有重要的指导意义。

Description

基于静态指令流跟踪的导入表修复方法及装置
技术领域
本发明属于网络安全技术领域,特别涉及一种基于静态指令流跟踪的导入表修复方法及装置。
背景技术
加壳技术是恶意代码编写者经常使用的一项技术。由于被加壳的程序只有在执行时才在内存中被还原,可有效防止研究人员对程序的分析,因此,恶意代码往往会使用加壳技术来规避杀毒软件的查杀,当然,加壳技术本身并没有恶意性,许多良性软件出于版权保护的考量也会使用加壳技术。使用了加壳技术的代码很难被反汇编,若要使用反汇编技术对加壳代码进行分析,首先需要对代码进行脱壳处理,再进行特征提取和行为分析。当前,加壳软件的数量众多,每个加壳软件所使用的算法都不尽相同。虽然静态脱壳技术针对性强、效率高,但是随着加壳技术的迅速发展,未知壳越来越多,人工分析解密工程量大、逆向工作困难、准确率低等问题逐步显现。传统的静态脱壳技术不再具有普适性,脱壳技术的焦点开始转向动态脱壳技术。
尽管每种加壳软件的算法各不相同,但他们也有着一些共同特性。所有的加壳软件都会将壳代码放入加壳后的目标程序。壳代码的一般加载过程一般为:首先,壳代码保存原始程序入口点的相关信息;其次,装载在壳代码工作期间所需的必备函数;再次,壳代码将原始程序的数据代码进行解压,并构建原始程序所需的导入函数表;最后,壳代码跳转到原始程序的入口点,并将控制权转交给原始程序。当系统运行被加壳程序时,会首先执行自身的脱壳代码,解压、解密原始数据,随后跳转到原程序代码入口点继续执行。动态脱壳技术正是利用这点,让被加壳程序自己完成脱壳的操作。脱壳程序比较程序入口点处的代码与壳代码,检查程序是否加壳,随后根据壳代码工作时的特征判断程序入口点的位置,然后在入口点处将数据转存成文件格式,最后修复处理文件的导入函数地址表。现有动态脱壳方法一般都能够把脱壳后的内存镜像Dump出来,但大多无法修复导入表,使得脱壳后的代码无法重构成一个完整的PE文件,影响脱壳效果。为了加大脱壳难度,很多壳还加入了导入表混淆策略。为此,如何正确的修复脱壳后PE文件的导入表信息,是脱壳技术研究的重点和难点所在。
发明内容
针对现有技术中的不足,本发明提供一种基于静态指令流跟踪的导入表修复方法及装置,对脱壳后的程序导入表项进行修复还原,进而重构完整的PE文件,保证加壳程序的脱壳效果,具有普适性。
按照本发明所提供的设计方案,一种基于静态指令流跟踪的导入表修复方法,包含如下内容:
A)针对脱壳后程序进行静态分析,跟踪其指令流,捕获待指令流到系统动态链接库的跳转点;
B)根据跳转点确定真正的API函数地址;
C)依据真正的API函数地址修正待修复导入表的表项,完成导入表修复。
上述的,A)中,针对脱壳后程序进行静态分析,通过对导入表中导入项指向的地址进行静态指令流跟踪,逐步记录执行过的指令字节数,直到控制权跳转到动态链接库中,记录此时的跳转目的地址,作为指令流到系统动态链接库的跳转点。
优选的,A)中,依据预设的导入表伪装深度作为修复的循环判断满足条件,对待修复导入表中满足条件的导入项指针指向地址进行修复处理。
更进一步,A)中,对待修复导入表中满足条件的导入项指针指向地址进行修复处理,包含如下内容:
依据导入项指针指向地址判断导入表表项是否需要修复;对需要修复的导入表表项,对其指针指向的内存执行反汇编指令,若反汇编指令有效执行,则进一步判断该反汇编指令是否为跳转指令,若是,则获取其跳转目标地址,并根据该跳转目标地址是否在导入动态链接内存区域来确定指令流到系统动态链接库的跳转点。
上述的,B)中,依据跳转点及记录的指令字节数,获取真正的API函数地址。
优选的,C)中,真正的API函数地址,是指:跳转点与记录的指令字节数差值。
一种基于静态指令流跟踪的导入表修复装置,包含:静态分析模块、真正API函数地址获取模块及导入表项修复模块,其中,
静态分析模块,用于针对脱壳后程序进行静态分析,跟踪其指令流,捕获待指令流到系统动态链接库的跳转点;
真正API函数地址获取模块,用于根据跳转点确定真正的API函数地址;
导入表项修复模块,用于依据真正的API函数地址修正导入表的表项,完成导入表修复。
本发明的有益效果:
本发明利用静态指令流跟踪技术可以在不动态执行指令的情况下,跟踪程序的指令流,捕获指令流到系统动态链接库的跳转点,从而确定真正的API函数地址,完成导入表的修复,有效解决混淆导入表修复问题,保证脱壳效果及脱壳后PE文件的完整重构,增强网络对恶意代码的防御能力,对网络安全具有重要的指导意义。
附图说明:
图1为实施例中的导入表混淆实例;
图2为实施例中基于静态指令流跟踪的导入表修复方法流程图;
图3为实施例中基于静态指令流跟踪的导入表修复装置示意图。
具体实施方式:
为使本发明的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本发明作进一步详细的说明。
现有动态脱壳方法中大多无法修复导入表,使得脱壳后的代码无法重构成一个完整的PE文件,影响脱壳效果。为了加大脱壳难度,进一步加大程序保护力度,有些高级壳采用了导入API模糊化技术,很多壳加入导入表混淆策略。为了使得传统基于API函数地址匹配的导入表修复技术无法准确地获取完整的目标代码导入表信息。如下图1所示,壳编写者在调用一个API函数时,会将API函数的部分指令拷贝到程序空间中执行,然后跳转到API函数中执行,这使得我们找到的导入表中存储的API函数地址出现错误。为此,在对加壳程序进行脱壳处理后,为了重构一个完整可正确执行的PE文件,需要对导入表进行修正。在该示例中,导入表项0x04000012位置存储的API函数地址应修正为0x75000000。为此,本发明实施例提供一一种基于静态指令流跟踪的导入表修复方法,包含如下内容:
101)针对脱壳后程序进行静态分析,跟踪其指令流,捕获待指令流到系统动态链接库的跳转点;
102)根据跳转点确定真正的API函数地址;
103)依据真正的API函数地址修正待修复导入表的表项,完成导入表修复。
PE文件的导入表存储的应是该文件在动态执行过程中使用的所有API函数地址信息,导入表模糊化处理后,导入表项存储的函数地址可能是错误的。但不管怎么模糊化,在调用API函数时,都会跳转到系统动态链接库地址空间中,只是在跳转前,会执行一些用于混淆的指令序列。针对脱壳后程序进行静态分析,通过对导入表中导入项指向的地址进行静态指令流跟踪,逐步记录执行过的指令字节数,直到控制权跳转到动态链接库中,记录此时的跳转目的地址,作为指令流到系统动态链接库的跳转点。利用静态指令流跟踪技术,可以在不动态执行指令的情况下,跟踪程序的指令流,捕获指令流到系统动态链接库的跳转点,从而确定真正的API函数地址,完成导入表的修复。从加壳软件对导入表的常用混淆机理入手,有效解决了混淆导入表的自动、快速、准确修复问题,对于脱壳后PE文件的完整重构具有重要作用。
依据预设的导入表伪装深度作为修复的循环判断满足条件,对待修复导入表中满足条件的导入项指针指向地址进行修复处理。对待修复导入表中满足条件的导入项指针指向地址进行修复处理,包含如下内容:
依据导入项指针指向地址判断导入表表项是否需要修复;对需要修复的导入表表项,对其指针指向的内存执行反汇编指令,若反汇编指令有效执行,则进一步判断该反汇编指令是否为跳转指令,若是,则获取其跳转目标地址,并根据该跳转目标地址是否在导入动态链接内存区域来确定指令流到系统动态链接库的跳转点。
依据跳转点及记录的指令字节数,获取真正的API函数地址。真正的API函数地址,是指:跳转点与记录的指令字节数差值。
针对以上的方法实施例,导入表修复算法描述如下:
基于静态指令流跟踪的导入表修复核心思想是对导入项指向的地址进行静态指令流跟踪,逐步记录执行过的指令字节数insDelta,直到程序控制权跳转到动态链接库中,此时的跳转目的地址与insDelta的差值即为真实的导入函数地址,将其修正到导入项中即可。
基于上述方法的实施例,本发明还一种基于静态指令流跟踪的导入表修复装置,参见图3所示,包含:静态分析模块201、真正API函数地址获取模块202及导入表项修复模块203,其中,
静态分析模块201,用于针对脱壳后程序进行静态分析,跟踪其指令流,捕获待指令流到系统动态链接库的跳转点;
真正API函数地址获取模块202,用于根据跳转点确定真正的API函数地址;
导入表项修复模块203,用于依据真正的API函数地址修正导入表的表项,完成导入表修复。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/
或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (7)

1.一种基于静态指令流跟踪的导入表修复方法,其特征在于,包含如下内容:
A)针对脱壳后程序进行静态分析,跟踪其指令流,捕获待指令流到系统动态链接库的跳转点;
B)根据跳转点确定真正的API函数地址;
C)依据真正的API函数地址修正待修复导入表的表项,完成导入表修复。
2.根据权利要求1所述的基于静态指令流跟踪的导入表修复方法,其特征在于,A)中,针对脱壳后程序进行静态分析,通过对导入表中导入项指向的地址进行静态指令流跟踪,逐步记录执行过的指令字节数,直到控制权跳转到动态链接库中,记录此时的跳转目的地址,作为指令流到系统动态链接库的跳转点。
3.根据权利要求2所述的基于静态指令流跟踪的导入表修复方法,其特征在于,A)中,依据预设的导入表伪装深度作为修复的循环判断满足条件,对待修复导入表中满足条件的导入项指针指向地址进行修复处理。
4.根据权利要求3所述的基于静态指令流跟踪的导入表修复方法,其特征在于,A)中,对待修复导入表中满足条件的导入项指针指向地址进行修复处理,包含如下内容:
依据导入项指针指向地址判断导入表表项是否需要修复;对需要修复的导入表表项,对其指针指向的内存执行反汇编指令,若反汇编指令有效执行,则进一步判断该反汇编指令是否为跳转指令,若是,则获取其跳转目标地址,并根据该跳转目标地址是否在导入动态链接内存区域来确定指令流到系统动态链接库的跳转点。
5.根据权利要求2所述的基于静态指令流跟踪的导入表修复方法,其特征在于,B)中,依据跳转点及记录的指令字节数,获取真正的API函数地址。
6.根据权利要求5所述的基于静态指令流跟踪的导入表修复方法,其特征在于,C)中,真正的API函数地址,是指:跳转点与记录的指令字节数差值。
7.一种基于静态指令流跟踪的导入表修复装置,其特征在于,包含:静态分析模块、真正API函数地址获取模块及导入表项修复模块,其中,
静态分析模块,用于针对脱壳后程序进行静态分析,跟踪其指令流,捕获待指令流到系统动态链接库的跳转点;
真正API函数地址获取模块,用于根据跳转点确定真正的API函数地址;
导入表项修复模块,用于依据真正的API函数地址修正导入表的表项,完成导入表修复。
CN201711395746.7A 2017-12-21 2017-12-21 基于静态指令流跟踪的导入表修复方法及装置 Active CN108108617B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711395746.7A CN108108617B (zh) 2017-12-21 2017-12-21 基于静态指令流跟踪的导入表修复方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711395746.7A CN108108617B (zh) 2017-12-21 2017-12-21 基于静态指令流跟踪的导入表修复方法及装置

Publications (2)

Publication Number Publication Date
CN108108617A true CN108108617A (zh) 2018-06-01
CN108108617B CN108108617B (zh) 2019-10-08

Family

ID=62212016

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711395746.7A Active CN108108617B (zh) 2017-12-21 2017-12-21 基于静态指令流跟踪的导入表修复方法及装置

Country Status (1)

Country Link
CN (1) CN108108617B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108897994A (zh) * 2018-06-19 2018-11-27 广州华多网络科技有限公司 隐藏导入表的方法、装置、存储介质和计算机设备
CN109918912A (zh) * 2019-03-27 2019-06-21 深信服科技股份有限公司 一种针对计算机病毒的文件修复方法及相关设备
CN110618824A (zh) * 2018-06-20 2019-12-27 中移(杭州)信息技术有限公司 一种软件升级方法、装置、介质和设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101359352A (zh) * 2008-09-25 2009-02-04 中国人民解放军信息工程大学 分层协同的混淆后api调用行为发现及其恶意性判定方法
CN102004884A (zh) * 2009-08-28 2011-04-06 华为技术有限公司 一种获取可执行文件输入表的方法及装置
US20120036569A1 (en) * 2010-04-05 2012-02-09 Andrew Cottrell Securing portable executable modules
CN103019739A (zh) * 2012-12-28 2013-04-03 北京神州绿盟信息安全科技股份有限公司 重定位表的修复方法、程序脱壳方法及相关装置
CN103077029A (zh) * 2012-12-28 2013-05-01 北京神州绿盟信息安全科技股份有限公司 一种导入表的修复方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101359352A (zh) * 2008-09-25 2009-02-04 中国人民解放军信息工程大学 分层协同的混淆后api调用行为发现及其恶意性判定方法
CN102004884A (zh) * 2009-08-28 2011-04-06 华为技术有限公司 一种获取可执行文件输入表的方法及装置
US20120036569A1 (en) * 2010-04-05 2012-02-09 Andrew Cottrell Securing portable executable modules
CN103019739A (zh) * 2012-12-28 2013-04-03 北京神州绿盟信息安全科技股份有限公司 重定位表的修复方法、程序脱壳方法及相关装置
CN103077029A (zh) * 2012-12-28 2013-05-01 北京神州绿盟信息安全科技股份有限公司 一种导入表的修复方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
彭小详,户振江等: "恶意代码自动脱壳技术研究", 《信息网络安全》 *
葛雨玮,康绯等: "基于动态BP神经网络的恶意代码同源性分析", 《小型微型计算机系统》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108897994A (zh) * 2018-06-19 2018-11-27 广州华多网络科技有限公司 隐藏导入表的方法、装置、存储介质和计算机设备
CN108897994B (zh) * 2018-06-19 2022-07-08 广州华多网络科技有限公司 隐藏导入表的方法、装置、存储介质和计算机设备
CN110618824A (zh) * 2018-06-20 2019-12-27 中移(杭州)信息技术有限公司 一种软件升级方法、装置、介质和设备
CN110618824B (zh) * 2018-06-20 2023-07-21 中移(杭州)信息技术有限公司 一种软件升级方法、装置、介质和设备
CN109918912A (zh) * 2019-03-27 2019-06-21 深信服科技股份有限公司 一种针对计算机病毒的文件修复方法及相关设备
CN109918912B (zh) * 2019-03-27 2023-09-05 深信服科技股份有限公司 一种针对计算机病毒的文件修复方法及相关设备

Also Published As

Publication number Publication date
CN108108617B (zh) 2019-10-08

Similar Documents

Publication Publication Date Title
US8589897B2 (en) System and method for branch extraction obfuscation
Zhang et al. A first step towards algorithm plagiarism detection
CN105009139B (zh) 用于恶意软件检测的对应用的通用拆包
Kalysch et al. VMAttack: deobfuscating virtualization-based packed binaries
Lu et al. AutoD: Intelligent blockchain application unpacking based on JNI layer deception call
TW200837604A (en) Obfuscating computer program code
TW200841209A (en) Obfuscating computer program code
WO2016135729A1 (en) A method to identify known compilers functions, libraries and objects inside files and data items containing an executable code
US10445501B2 (en) Detecting malicious scripts
CN102867144B (zh) 一种用于检测和清除计算机病毒的方法和装置
CN108108617B (zh) 基于静态指令流跟踪的导入表修复方法及装置
Tian et al. DKISB: Dynamic key instruction sequence birthmark for software plagiarism detection
CN108038376A (zh) 基于混合分析的加壳程序通用脱壳方法及装置
CN110096853A (zh) 基于Mono的Unity安卓应用加固方法、存储介质
JP2022009556A (ja) ソフトウェアコードをセキュアにするための方法
US8302210B2 (en) System and method for call path enforcement
Chen et al. Learning to reverse dnns from ai programs automatically
US20160134652A1 (en) Method for recognizing disguised malicious document
CN107908964B (zh) 一种针对Android平台Unity3D游戏中加壳文件的安全检测方法及装置
CN107577925A (zh) 基于双重ARM指令虚拟的Android应用程序保护方法
He et al. Exploiting binary-level code virtualization to protect Android applications against app repackaging
CN109472135A (zh) 一种检测进程注入的方法、装置及存储介质
Touili et al. Reachability analysis of self modifying code
Bogad et al. Harzer roller: Linker-based instrumentation for enhanced embedded security testing
CN110520860B (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
GR01 Patent grant
GR01 Patent grant