CN114519043B - 一种可执行二进制文件格式逆向分析方法 - Google Patents

一种可执行二进制文件格式逆向分析方法 Download PDF

Info

Publication number
CN114519043B
CN114519043B CN202111674158.3A CN202111674158A CN114519043B CN 114519043 B CN114519043 B CN 114519043B CN 202111674158 A CN202111674158 A CN 202111674158A CN 114519043 B CN114519043 B CN 114519043B
Authority
CN
China
Prior art keywords
instruction
offset
static
type
component
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.)
Active
Application number
CN202111674158.3A
Other languages
English (en)
Other versions
CN114519043A (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.)
Beijing Watchdata Co ltd
Original Assignee
Beijing Watchdata Co ltd
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 Watchdata Co ltd filed Critical Beijing Watchdata Co ltd
Priority to CN202111674158.3A priority Critical patent/CN114519043B/zh
Publication of CN114519043A publication Critical patent/CN114519043A/zh
Application granted granted Critical
Publication of CN114519043B publication Critical patent/CN114519043B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/178Techniques for file synchronisation in file systems
    • G06F16/1794Details of file format conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种可执行二进制文件格式逆向分析方法,通过获取可执行二进制文件内容,将文件结构拆分并重新封装为组件内容;收集方法组件中包含的方法偏移量,用相邻两个偏移量对方法组件进行切割;遍历方法中访问字段变量的指令,根据指令含义推断字段类型;查找静态方法并设置为静态状态,初始化方法访问权限,将接口的方法与实现类中的方法通过索引值进行链接;通过栈模拟执行方法中的指令,解析指令以获取方法的描述符信息,并根据方法描述符信息进而实现可执行二进制文件的逆向分析。采用本发明所公开的可执行二进制文件格式逆向分析方法,降低了文件逆向分析过程对描述符组件的依赖性,为文件格式转换奠定了基础,应用范围广,实用性强。

Description

一种可执行二进制文件格式逆向分析方法
技术领域
本发明属于文件分析技术领域,具体涉及一种可执行二进制文件格式逆向分析方法。
背景技术
目前逆向技术已经发展得比较成熟,但在具体应用过程中还是需要因地制宜。在对可执行二进制文件进行格式转换时,需要对可执行的二进制文件格式进行逆向分析以还原文件结构。可执行二进制文件结构通常包含常量池组件、类组件、方法组件、导出组件、描述符组件等。其中描述符组件记录了各个组件的详细信息,如果描述符组件存在,可以通过逆向工程还原文件结构。如果描述符组件不存在,各个组件的详细信息不存在,提高了逆向工程的难度,无法直接实现可执行二进制文件逆向分析。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种可执行二进制文件格式逆向分析方法,实现在无描述符组件的情况下可执行二进制文件的逆向分析。
为达到以上目的,本发明采用的技术方案是:一种可执行二进制文件格式逆向分析方法,所述方法包括如下步骤:
S10、获取可执行二进制文件内容,并对所述二进制文件结构进行拆分,并重新封装为组件内容;
S11、收集所述组件内容中方法组件中包含的方法偏移量,形成方法偏移列表;
S12、根据所述方法偏移列表,用相邻的两个偏移量对所述方法组件进行切割;
S13、遍历方法中访问字段变量的指令,根据所述访问字段变量指令含义推断字段类型;
S14、根据偏移查找所述方法中的静态方法,将所述静态方法设置为静态状态,初始化方法访问权限;
S15、将接口的方法与实现类中的方法通过索引值进行链接;
S16、通过栈模拟以获取所述方法的描述符信息,并根据所述方法描述符信息进而实现可执行二进制文件的逆向分析。
进一步,步骤S10中所述组件内容包括常量池组件内容、类组件内容、方法组件内容、导出组件内容以及应用组件内容。
进一步,步骤S11中所述方法偏移量获取来源包括所述常量池组件中用于描述调用本包内方法的引用、所述类组件中虚方法表和包可见方法表中的引用、导出组件中的静态方法偏移量表中的引用、所述应用组件中安装方法的偏移地址、方法组件中第一个方法的起始偏移量以及方法组件中末端位置偏移量。
进一步,步骤S11包括将所述方法偏移量按照从小到大进行排序形成所述方法偏移列表。
进一步,步骤S12包括以下子步骤:
S120、定义一个指令偏移列表,用于存放方法中获取的指令偏移,所述指令偏移列表中的指令偏移按照从小到大顺序进行排列,将偏移0添加到指令偏移列表中,从方法的第一条指令偏移开始遍历;
S121、判断所述指令偏移列表中是否还存在有效指令偏移,不存在直接结束,记录方法已遍历到的偏移,即为方法结束的偏移;存在有效指令偏移则执行下一步骤;
S122、从所述指令偏移列表中取出指令偏移,根据所述指令偏移获取方法在该偏移处的指令,根据指令信息,判断该条指令的后续指令是否有效,如果为返回指令,后续指令均为无效指令,不需要将下一条指令的偏移添加到所述指令偏移列表中,如果不为返回指令,则执行下一步骤;
S123、判断所述指令是否为控制转移指令,如果所述指令是控制转移指令,所述控制转移指令指定跳转指令的偏移,将所述跳转指令的偏移添加到所述指令偏移列表中,继续执行步骤S121;
如果所述指令不是控制转移指令,而为其他指令,下一条指令的偏移都是有效偏移,将所述有效指令偏移添加到所述指令偏移列表中,继续执行步骤S121。
进一步,步骤S13中所述字段类型包括对象类型、Byte类型、Short类型以及Int类型,步骤S13包括以下子步骤:
S131、获取当前指令偏移处指令,判断所述指令是否为操作引用指令,若是,则设置字段类型为对象类型,并指向下一条指令偏移,若否,则执行下一步骤;
S132、判断所述指令是否为操作Byte类型数据指令,若是,则设置字段类型为Byte类型,并指向下一条指令偏移,若否,则执行下一步骤;
S133、判断所述指令是否为操作Short类型数据指令,若是,则设置字段类型为Short类型,并指向下一条指令偏移,若否,则执行下一步骤;
S134、判断所述指令是否为操作Int类型数据指令,若是,则设置字段类型为Int类型,并指向下一条指令偏移,若否,则直接指向下一条指令偏移。
进一步,步骤S14包括通过以下子步骤将输出组件中所有类输出的静态方法表中偏移量对应的方法都设置为静态:
S141、将所述导出组件中所有静态方法列表中的方法偏移量生成静态方法偏移量列表;
S142、判断所述静态方法偏移量列表中是否能获取一个新的偏移量,若能,则转至下一步骤,若不能则结束方法访问类型设置过程;
S143、通过偏移,找到所述静态方法偏移量列表中的方法,将所述方法访问类型设置为静态类型,并执行步骤S142。
进一步,所述静态方法偏移量列表中的方法包括静态方法及构造器方法。
进一步,步骤S14包括遍历所有方法中的静态方法调用指令,通过所述静态方法调用指令中的常量池中静态方法引用中的偏移量找到对应的方法,即为静态方法,将所述静态方法设置为静态状态,同时需要查找构造器方法,取消所述构造器方法的静态状态。
进一步,通过所述构造器方法调用指令中的常量池中静态方法引用中的偏移量找到对应的构造器方法,取消所述构造器方法的静态状态。
进一步,步骤S16中所述方法的描述符信息获取顺序为先获取被调用方法的描述符信息,后获取调用方法的描述符信息,通过推断局部变量的类型以推断出所述方法的描述符信息。
进一步,步骤S16包括通过栈模拟执行所述方法中的指令,根据所述指令隐含信息,推断数组类型以获取所述方法的描述符信息。
进一步,步骤S16包括根据被调用函数的参数类型和栈顶的数据进行匹配,推断参数类型。
本发明的效果在于:采用本发明所公开的一种可执行二进制文件格式逆向分析方法,可在无描述符组件时通过推断出方法描述符信息,进而实现可执行二进制文件的逆向分析,降低了文件逆向分析过程对描述符组件的依赖性,为文件格式转换奠定了基础,应用范围广,实用性强。
附图说明
图1为本发明实施例所述的一种可执行二进制文件格式逆向分析方法的方法流程图;
图2为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中对二进制文件结构进行拆分封装形成的组件内容结构图;
图3为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中示出的一种偏移量获取来源图;
图4为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中示出的另一种偏移量获取来源图;
图5为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中示出的其他种偏移量获取来源图;
图6为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中示出的第四种偏移量获取来源图;
图7为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中示出的根据偏移列表对方法组件进行切割过程示意图;
图8为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中方法大小计算过程示意图;
图9为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中字段类型推断过程示意图;
图10为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中示出的一种静态方法表中偏移量对应的方法静态设置过程示意图;
图11为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中示出的另一种静态方法表中偏移量对应的方法静态设置过程示意图;
图12为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中示出的通过栈模拟执行方法中指令获取基本数据类型过程示意图;
图13为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中示出的数组引用类型通过加载流程获取参数类型过程示意图;
图14为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中示出的数组引用类型通过存储流程获取参数类型过程示意图;
图15为本发明实施例所述的一种可执行二进制文件格式逆向分析方法中根据被调函数的方法描述符推测调用函数的描述符过程示意图。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步描述。
实施例一
如图1所示,本发明所公开的一种可执行二进制文件格式逆向分析方法,包括以下步骤:
S10、通过流的方式获取可执行二进制文件内容,并按照其文件结构进行拆分,并重新封装为组件内容。
如图2所示,将可执行二进制文件内容重新封装为常量池组件内容、类组件内容、方法组件内容、导出组件内容、应用组件内容。
S11、收集所述组件内容中方法组件中包含的方法偏移量,形成方法偏移列表。
方法组件中未说明每个方法的大小和起始偏移量,收集方法组件中包含的方法偏移量,通过相邻的偏移量计算方法大小。
如图3所示,偏移量获取来源有:常量池组件中用于描述调用本包内方法的引用,常量池包内方法包括静态方法、构造器及私有虚方法。
如图4所示,偏移量获取来源有:类组件中虚方法表和包可见方法表中的引用。
如图5所示,偏移量获取来源有:导出组件中的静态方法偏移量表中的引用。
如图6所示,偏移量获取来源有:应用组件中安装方法的偏移地址(只有应用包才有该组件)。
偏移量获取来源有:方法组件中第一个方法的起始偏移量以及方法组件中末端位置偏移量。
将收集到的偏移量存放到列表中,按照从小到大进行排序,形成偏移列表。
S12、根据方法偏移列表,用相邻的两个偏移量对方法组件进行切割。
如图7所示,根据偏移列表,将相邻的两个偏移量对方法组件进行切割。偏移量偏移2-偏移1是方法1的大小,偏移量偏移1-偏移(n-1)是当前方法的起始偏移量,偏移量偏移2-偏移(n)是下一个方法的起始偏移量。
通过上述方法对方法组件中的方法进行切割,但是会存在两个方法合并的特殊情况,例如包中定义了一个私有方法,但是该方法只定义并未使用,在可执行二进制文件中找不到该私有方法的偏移,通过切割后,就会将该方法的指令集合并到前一个方法中。这样就导致后续栈模拟执行时会抛出异常。需要进一步确定方法指令集的大小。如图8所示,在本实施例中确定方法指令集大小的方法为,计算并查找该方法中每个分支最大可执行的步长,重新计算方法大小,输入为方法所有指令源。具体步骤为:
S120、定义一个指令偏移列表,用于存放获取指令的偏移,所述指令偏移列表中的偏移是按照从小到大排列的。
将偏移0添加到指令偏移列表中,从方法的第一条指令偏移开始遍历。
S121、判断所述指令偏移列表中是否还存在有效偏移,不存在直接结束,记录方法已遍历到的偏移,即为方法结束的偏移;存在有效偏移则执行下一步骤。
S122、从所述指令偏移列表中取出偏移,根据偏移获取方法在该偏移处的指令,根据指令信息,判断该条指令的后续指令是否有效,如果为返回指令,后续指令均为无效指令,不需要将下一条指令的偏移添加到所述指令偏移列表中。如果不为返回指令,则执行下一步骤。
S123、判断所述指令是否为控制转移指令,如果所述指令是控制转移指令,所述控制转移指令指定跳转指令的偏移,将所述跳转指令的偏移添加到所述指令偏移列表中,继续执行步骤S121。
如果该条指令不是控制转移指令,下一条指令的偏移都是有效偏移。将有效指令偏移添加到所述指令偏移列表中,继续执行步骤S121。
通过上述步骤,从方法的0偏移处开始遍历,根据指令语义将方法中的不同分支都遍历到,查找该方法中每个分支最大可执行的步长,即为该方法的大小。
S13、字段变量全程参与方法指令集的逆向分析,可执行二进制文件中字段变量的描述符信息不存在,需要遍历方法中访问字段变量的指令,根据指令含义推断字段类型。
如图9所示,根据指令含义推断的字段类型包括对象类型、Byte类型、Short类型以及Int类型。
步骤S13包括以下子步骤:
S131、取当前指令偏移处指令,判断所述指令是否为操作引用指令,若是,则设置字段类型为对象类型,并指向下一条指令偏移,若否,则执行下一步骤;
S132、判断所述指令是否为操作Byte类型数据指令,若是,则设置字段类型为Byte类型,并指向下一条指令偏移,若否,则执行下一步骤;
S133、判断所述指令是否为操作Short类型数据指令,若是,则设置字段类型为Short类型,并指向下一条指令偏移,若否,则执行下一步骤;
S134、判断所述指令是否为操作Int类型数据指令,若是,则设置字段类型为Int类型,并指向下一条指令偏移,若否,则直接指向下一条指令偏移。
S14、可执行二进制文件中的方法中仅记录该方法所有参数的单元总个数,方法基于方法组件的偏移以及方法的描述符信息方法等详细信息都不存在。1个单元可以是8位、16位、32位。在本实施例中采用16位表示1个单元进行举例说明,但对此不作限定。如果是一个虚方法,单元个数是包含this指针的。
通过技术手段获取静态方法的偏移,根据偏移查找对应的方法,将方法设置为静态方法。
在推断方法描述符之前需要推断方法是否为静态方法。用户定义的应用包中静态方法有3种情况:已实现未使用但包外可见,该方法的偏移在导出组件中存在;已实现并且在本包会被其他方法调用,该方法的偏移量在常量池中的静态方法引用中存在;已实现未使用且该方法为私有的。这三种情况,最后一种情况,在方法切割时丢弃,因此只需要处理前两种情况即可。
如图10所示,当用户定义的应用包中静态方法情况为:已实现未使用但包外可见,该方法的偏移在导出组件中存在时,通过以下方法将输出组件中所有类输出的静态方法表中偏移量对应的方法都设置为静态:
S141、将导出组件中所有静态方法列表中的偏移量生成静态偏移量列表。
S142、判断所述静态方法偏移量列表中是否能获取一个新的偏移量,若能,则转至下一步骤,若不能则结束方法访问类型设置过程。
S143、通过偏移,找到所述静态方法偏移量列表中的方法,将该方法访问类型设置为静态类型,并执行步骤S142。
通过上述方法,将输出组件中所有类输出的静态方法偏移量列表中偏移量对应的方法都设置为静态了,静态方法偏移量列表中对应的方法中除了静态方法还有构造器方法,在上述步骤中也会将构造器方法设置成静态。
如图11所示,当用户定义的应用包中静态方法情况为:已实现并且在本包会被其他方法调用,该方法的偏移量在常量池中的静态方法引用中存在时,通过以下方法将输出组件中所有类输出的静态方法表中偏移量对应的方法都设置为静态:
遍历所有方法中的静态方法调用指令,通过该指令中的常量池中静态方法引用中的偏移量找到对应的方法,设置该方法为静态,同时需要查找构造器方法,取消构造器方法的静态状态。调用构造器方法是通过构造器方法调用指令调用的,通过该指令中的常量池中静态方法引用中的偏移量找到对应的方法,取消该方法静态状态。
S15、包内定义了接口,且该接口内的方法被包内其他类实现了,需要将接口的方法与实现类中的方法通过索引值进行链接,链接的目的主要是为了获取方法的描述符信息,在栈模拟执行接口调用指令时使用。
S16、获取方法描述符信息。
方法之间存在调用关系,例如A、B、C、D四个方法都是用户自定义的方法,其中A方法调用B方法,B方法调用C和D方法,C和D方法仅调用***提供的API,这样导致在获取描述符存在先后关系。获取方法描述符的顺序为C、B、A或者D、B、A。通过以上步骤经历数次迭代遍历获取方法描述符信息。
方法参数相关的指令有加载和存储指令,通过栈模拟执行方法中的指令,解析加载和存储指令即可获取到方法的描述符。模拟栈执行的方式,根据某些指令隐含信息推断方法描述符信息。方法的参数在方法的指令中是以局部变量存在的,通过推断局部变量的类型可以推断出方法的描述符信息。
如果方法的参数是基本类型:Byte、Short、Int,通过基本类型的加载和存储两种类型进行推断。如图12所示,在本实施例中以局部变量为Short类型加载和存储进行举例说明,同时指令隐含第几个局部变量的信息。
按照参数的类型对指令进行分类,可以分为基本类型的操作指令和引用类型的相关操作指令。基本类型包含Byte、Boolean、Short、Int,本文示例中Byte、Boolean类型的数据占1个单元16位,与Short类型一样,所以在反推描述符时将Byte、Boolean类型的数据也视为Short类型。Int类型的数据占2个单元。涉及到的指令有:Short类型加载指令、Int类型存储指令。
引用类型中包含数组,根据其类型也分为两类:一种是数组访问,相关指令有加载数组引用指令、从数组引用里装载数据、存储数据到数组引用中。在执行数组引用加载指令,将一个对象类型数据压栈的同时,一并记录对象索引的值,索引与参数的位置信息有关。另一种是对象数组的访问,相关指令有加载对象的数组引用指令、从对象数组引用里装载数据、存储数据到对象数组引用中。对象数组引用类型获取流程一样,只是数据的存储和加载指令不同。如图13所示,将一个数组中某一索引处的值加载到栈上,Byte类型数组数据加载流程获取参数类型,详细步骤如下:
S161、将引用加载在栈上,引用隐含着对象引用的索引信息。
S162、将数组的索引加载到栈上。
S163、数组中数据加载指令,需要将引用和索引从栈顶弹出来。通过数据加载指令隐含信息,推断数组类型,数组类型即为对象引用的数据类型。
如图14所示,Byte类型数组数据存储流程获取参数类型,将栈顶上的值存储到数组某一位置上,详细步骤如下:
S161A、将引用加载在栈上,引用指令隐含着对象引用的索引信息。
S162A、将数组的索引加载到栈上,
S163A、将新的值加载栈顶上;
S164A、数组中数据存储指令,需要将引用指令、索引和新的值从栈顶弹出来。通过数据存储指令隐含信息,推断数组类型,数组类型即为对象引用的数据类型。
如图15所示,除了上述描述的参数在方法中直接访问,还有一种应用场景是方法的参数在方法中仅作为参数传递给被调函数,方法中就不存在加载和存储操作指令。只能根据被调用函数的参数类型和栈顶的数据进行匹配,推断参数类型。
通过上述方法,方法中的参数类型基本推测出来了,除了上述描述外还有一特殊情况,参数只定义未使用的情况,将这类的参数设置方法头中参数单元的位数。本文中以Short类型为参数单元的位数,设置几个Short是需要通过方法参数的总单元个数和已推测出来的参数占位相减计算出来的,方法返回值类型是通过方法中返回值指令获取的。通过上述方法步骤完成了方法参数信息推断过程。至此,方法描述符信息已经推断出来,根据所述方法描述符信息进而实现可执行二进制文件的逆向分析。
通过上述实施例可以看出,本发明公开的一种可执行二进制文件格式逆向分析方法,可在无描述符组件时通过推断出方法描述符信息,进而实现可执行二进制文件的逆向分析,降低了文件逆向分析过程对描述符组件的依赖性,为文件格式转换奠定了基础,应用范围广,实用性强。
本发明所述的方法并不限于具体实施方式中所述的实施例,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。

Claims (12)

1.一种可执行二进制文件格式逆向分析方法,所述方法包括如下步骤:
S10、获取可执行二进制文件内容,并对所述二进制文件结构进行拆分,并重新封装为组件内容;
S11、收集所述组件内容中方法组件中包含的方法偏移量,形成方法偏移列表;
S12、根据所述方法偏移列表,用相邻的两个偏移量对所述方法组件进行切割;
S13、遍历方法中访问字段变量的指令,根据所述访问字段变量指令含义推断字段类型;
S14、根据偏移查找所述方法中的静态方法,将所述静态方法设置为静态状态;
S15、将接口的方法与实现类中的方法通过索引值进行链接,所述链接用于栈模拟执行接口调用指令;
S16、通过栈模拟以获取所述方法的描述符信息,并根据所述方法描述符信息进而实现可执行二进制文件的逆向分析;
步骤S12包括以下子步骤:
S120、定义一个指令偏移列表,用于存放方法中获取的指令偏移,所述指令偏移列表中的指令偏移按照从小到大顺序进行排列,将偏移0添加到指令偏移列表中,从方法的第一条指令偏移开始遍历;
S121、判断所述指令偏移列表中是否还存在有效指令偏移,不存在直接结束,记录方法已遍历到的偏移,即为方法结束的偏移;存在有效指令偏移则执行下一步骤;
S122、从所述指令偏移列表中取出指令偏移,根据所述指令偏移获取方法在该偏移处的指令,根据指令信息,判断该条指令的后续指令是否有效,如果为返回指令,后续指令均为无效指令,不需要将下一条指令的偏移添加到所述指令偏移列表中,如果不为返回指令,则执行下一步骤;
S123、判断所述指令是否为控制转移指令,如果所述指令是控制转移指令,所述控制转移指令指定跳转指令的偏移,将所述跳转指令的偏移添加到所述指令偏移列表中,继续执行步骤S121;
如果所述指令不是控制转移指令,而为其他指令,下一条指令的偏移都是有效偏移,将所述有效指令偏移添加到所述指令偏移列表中,继续执行步骤S121。
2.根据权利要求1所述的一种可执行二进制文件格式逆向分析方法,其特征在于:步骤S10中所述组件内容包括常量池组件内容、类组件内容、方法组件内容、导出组件内容以及应用组件内容。
3.根据权利要求2所述的一种可执行二进制文件格式逆向分析方法,其特征在于:步骤S11中所述方法偏移量获取来源包括所述常量池组件中用于描述调用本包内方法的引用、所述类组件中虚方法表和包可见方法表中的引用、导出组件中的静态方法偏移量表中的引用、所述应用组件中安装方法的偏移地址、方法组件中第一个方法的起始偏移量以及方法组件中末端位置偏移量。
4.根据权利要求3所述的一种可执行二进制文件格式逆向分析方法,其特征在于:步骤S11包括将所述方法偏移量按照从小到大进行排序形成所述方法偏移列表。
5.根据权利要求1所述的一种可执行二进制文件格式逆向分析方法,其特征在于,步骤S13中所述字段类型包括对象类型、Byte类型、Short类型以及Int类型,步骤S13包括以下子步骤:
S131、获取当前指令偏移处指令,判断所述指令是否为操作引用指令,若是,则设置字段类型为对象类型,并指向下一条指令偏移,若否,则执行下一步骤;
S132、判断所述指令是否为操作Byte类型数据指令,若是,则设置字段类型为Byte类型,并指向下一条指令偏移,若否,则执行下一步骤;
S133、判断所述指令是否为操作Short类型数据指令,若是,则设置字段类型为Short类型,并指向下一条指令偏移,若否,则执行下一步骤;
S134、判断所述指令是否为操作Int类型数据指令,若是,则设置字段类型为Int类型,并指向下一条指令偏移,若否,则直接指向下一条指令偏移。
6.根据权利要求5所述的一种可执行二进制文件格式逆向分析方法,其特征在于,步骤S14包括通过以下子步骤将输出组件中所有类输出的静态方法表中偏移量对应的方法都设置为静态:
S141、将所述导出组件中所有静态方法列表中的方法偏移量生成静态方法偏移量列表;
S142、判断所述静态方法偏移量列表中是否能获取一个新的偏移量,若能,则转至下一步骤,若不能,则结束方法访问类型设置过程;
S143、通过偏移,找到所述静态方法偏移量列表中的方法,将所述方法访问类型设置为静态类型,并执行步骤S142。
7.根据权利要求6所述的一种可执行二进制文件格式逆向分析方法,其特征在于:所述静态方法偏移量列表中的方法包括静态方法及构造器方法。
8.根据权利要求7所述的一种可执行二进制文件格式逆向分析方法,其特征在于:步骤S14包括遍历所有方法中的静态方法调用指令,通过所述静态方法调用指令中的常量池中静态方法引用中的偏移量找到对应的方法,即为静态方法,将所述静态方法设置为静态状态,同时需要查找构造器方法,取消所述构造器方法的静态状态。
9.根据权利要求7所述的一种可执行二进制文件格式逆向分析方法,其特征在于:通过所述构造器方法调用指令中的常量池中静态方法引用中的偏移量找到对应的构造器方法,取消所述构造器方法的静态状态。
10.根据权利要求1所述的一种可执行二进制文件格式逆向分析方法,其特征在于:步骤S16中所述方法的描述符信息获取顺序为先获取被调用方法的描述符信息,后获取调用方法的描述符信息,通过推断局部变量的类型以推断出所述方法的描述符信息。
11.根据权利要求1所述的一种可执行二进制文件格式逆向分析方法,其特征在于,步骤S16包括通过栈模拟执行所述方法中的指令,根据所述指令隐含信息,推断数组类型以获取所述方法的描述符信息。
12.根据权利要求1所述的一种可执行二进制文件格式逆向分析方法,其特征在于:步骤S16包括根据被调用函数的参数类型和栈顶的数据进行匹配,推断参数类型。
CN202111674158.3A 2021-12-31 2021-12-31 一种可执行二进制文件格式逆向分析方法 Active CN114519043B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111674158.3A CN114519043B (zh) 2021-12-31 2021-12-31 一种可执行二进制文件格式逆向分析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111674158.3A CN114519043B (zh) 2021-12-31 2021-12-31 一种可执行二进制文件格式逆向分析方法

Publications (2)

Publication Number Publication Date
CN114519043A CN114519043A (zh) 2022-05-20
CN114519043B true CN114519043B (zh) 2024-05-24

Family

ID=81596613

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111674158.3A Active CN114519043B (zh) 2021-12-31 2021-12-31 一种可执行二进制文件格式逆向分析方法

Country Status (1)

Country Link
CN (1) CN114519043B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105718764A (zh) * 2016-01-19 2016-06-29 北京鼎源科技有限公司 一种基于Android***陷阱指令的软件加固方法
CN109359468A (zh) * 2018-08-23 2019-02-19 阿里巴巴集团控股有限公司 漏洞检测方法、装置及设备
CN110119601A (zh) * 2019-03-28 2019-08-13 江苏通付盾信息安全技术有限公司 基于应用程序安装包的程序加固方法及装置
CN110147655A (zh) * 2019-03-28 2019-08-20 江苏通付盾信息安全技术有限公司 应用程序的安全防护***及方法
US10656940B1 (en) * 2019-02-04 2020-05-19 Architecture Technology Corporation Systems, devices, and methods for source code generation from binary files
CN113360910A (zh) * 2021-06-30 2021-09-07 中国农业银行股份有限公司 恶意应用的检测方法、装置、服务器和可读存储介质
CN113590133A (zh) * 2021-08-09 2021-11-02 咪咕文化科技有限公司 安卓***注入检测方法、装置、设备以及计算机存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8874928B2 (en) * 2008-10-31 2014-10-28 Apple Inc. System and method for obfuscating constants in a computer program

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105718764A (zh) * 2016-01-19 2016-06-29 北京鼎源科技有限公司 一种基于Android***陷阱指令的软件加固方法
CN109359468A (zh) * 2018-08-23 2019-02-19 阿里巴巴集团控股有限公司 漏洞检测方法、装置及设备
US10656940B1 (en) * 2019-02-04 2020-05-19 Architecture Technology Corporation Systems, devices, and methods for source code generation from binary files
CN110119601A (zh) * 2019-03-28 2019-08-13 江苏通付盾信息安全技术有限公司 基于应用程序安装包的程序加固方法及装置
CN110147655A (zh) * 2019-03-28 2019-08-20 江苏通付盾信息安全技术有限公司 应用程序的安全防护***及方法
CN113360910A (zh) * 2021-06-30 2021-09-07 中国农业银行股份有限公司 恶意应用的检测方法、装置、服务器和可读存储介质
CN113590133A (zh) * 2021-08-09 2021-11-02 咪咕文化科技有限公司 安卓***注入检测方法、装置、设备以及计算机存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Fuzzing测试中异常分析技术的研究;于璐;吴礼发;庄洪林;沈毅;;小型微型计算机***;20120715(第07期);全文 *
基于加载机制分析的ELF文件main函数定位技术;齐宁;丁松阳;孙维新;赵荣彩;;计算机工程;20070320(第06期);全文 *
软件安全逆向分析中程序结构解析模型设计;李广旭;李伟华;潘炜;史豪斌;;计算机工程与应用;20081111(第32期);全文 *

Also Published As

Publication number Publication date
CN114519043A (zh) 2022-05-20

Similar Documents

Publication Publication Date Title
US8463724B2 (en) Computer archive traversal
CN110825385B (zh) React Native离线包的构建方法及存储介质
CN104331368B (zh) 一种基于cfg文件静态分析C++虚函数调用的方法
US8042103B2 (en) Pre-translated files used in a virtual machine
US9477496B2 (en) Method and apparatus for loading classes and re-organizing class archives
Siff et al. Program generalization for software reuse: From C to C++
CN111767258A (zh) 应用于海量文件的文件压缩方法、装置、设备及存储介质
US6681381B1 (en) Arrangement for executing program code with reduced memory requirements
CN114519043B (zh) 一种可执行二进制文件格式逆向分析方法
CN111309402B (zh) 数据监测及针对应用程序的处理方法、装置及设备
US8631013B2 (en) Non-intrusive data logging
US7080370B1 (en) Method and apparatus for compiling source programs using one or more libraries
US20160055168A1 (en) Method and apparatus for scanning files
US10848410B2 (en) Ranking service implementations for a service interface
CN115705294B (zh) 用于获取函数调用信息的方法、装置、电子设备和介质
JPH03184123A (ja) デジタルデータプロセッサのための手続き状態記述子システム
JP2000122876A (ja) 情報処理装置
Nguyen et al. Parmarksplit: A parallel mark-split garbage collector based on a lock-free skip-list
CN112328266B (zh) 一种软件互联接口导向的应用程序约减方法和***
KR20050078397A (ko) 객체지향 프로그램에서 객체 접근시 발생하는 부하를줄이기 위한 명령 변환 방법 및 연산장치
CN114896023A (zh) 一种数据处理方法、装置、设备及存储介质
CN115934662A (zh) 文件共享方法、装置、电子设备和存储介质
CN117472389A (zh) 数据处理方法、装置、设备和存储介质
CN116431241A (zh) 一种资源冲突检测方法、装置、服务器和存储介质
CN116501710A (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