一种查看java字节码时显示方法调用关系图的方法与流程

文档序号:17948427发布日期:2019-06-18 23:50阅读:1134来源:国知局
一种查看java字节码时显示方法调用关系图的方法与流程

本发明涉及一种代码逻辑分析方法,具体涉及一种查看java字节码时显示方法调用关系图的方法。



背景技术:

目前软件反编译领域有不少对可执行文件进行反编译的工具如ida,也有对java代码生成的中间码文件进行的反编译工具如jd-gui。直接使用可执行文件反编译工具要求开发人员对计算机专业知识功底较高,能理解汇编语言,机器码,计算机寻址工作原理,高级语言编译时函数调用约定,入栈,出栈方式。而直接对网络编译语言java的反编译要人性化许多,如jd-gui可把jar文件反编译成java源文件,便于直接查看java源文件。但由于代码混淆技术的出现,会让jd-gui相关工具对jar文件进行反编译时出现信息丢失,代码逻辑错误。所以有时候需要直接通过java反汇编直接分析字节码助记符。由于现在软件都是大型项目,如果直接通过文本编译器查看字节码助记符显然效率低下,不便于查看代码时在方法,函数调用之间跳转。再加上字节码助记符本身偏底层,和机器码一一对应,不像高级语言接近自然语言,因此难以阅读。所以要是能实现代码阅读工具的一些方便阅读代码的功能,让计算机帮助代码分析人员完成一部份工作。能生成直观表示代码层次关系的图形表示呈现给分析人员。

ida优点是能直接反汇编出软件的机器码,包括可执行文件和java的class文件。能自动生成函数调用关系图和流程分支图。缺点是不能对java的class文件生成函数调用关系图。

jd-gui优点是能对java的class文件反编译成java源码,缺点是不能对每个class文件都反编译成java源码,部分反编译代码还是指令字节码。不能生成函数调用关系图,让指令字节码的阅读变得麻烦。



技术实现要素:

本发明的目的在于提供一种查看java字节码时显示方法调用关系图的方法,提供一种在浏览java字节码的时候快速实现不同文件中相互关联的方法函数间的快速跳转的方法,提高逆向工程时的代码查看效率。

为解决上述的技术问题,本发明采用以下技术方案:

一种查看java字节码时显示方法调用关系图的方法,包括以下步骤一、对jar文件进行解压,对其中的class文件进行反汇编,生成对应的代码文本文件;

步骤二、对代码文本文件进行文本分析,解析出所有类中的所有方法,并将每个方法设定为一个拓扑结构中的节点;

步骤三、对每个方法中的方法调用代码进行分析,找到调用的方法,并在拓扑图中建立关联;

步骤四、根据拓扑图,将每个节点在图像中用统一的图形绘制,并用带箭头的线段连接节点,因为方法中可以有多个地方调用其它方法,所以一个结节可以有多少箭头连接其它节点;

步骤五、在图像中为每个节点图形加入鼠标点击触发事件处理函数,当用户点击图形时,处理函数自动打开方法所在的文件并跳到方法定义对应的行号。

进一步的技术方案是,所述步骤一中、对jar文件进行解压,对其中的class文件进行反汇编,生成对应的代码文本文件,具体方法如下:

a、程序中使用开源zip库对待反编译的jar文件解压,并将内容放入一个目录;

b、实现文件扫描目录中所有后缀名为class的java字节码文件;

c、依次对每个字节码class文件使用javap命令反汇编生成汇编代码并将代码保存到class文件所在位置并取统一的文件后缀名。

进一步的技术方案是,步骤二、对代码文本文件进行文本分析,解析出所有类中的所有方法,并将每个方法设定为一个拓扑结构中的节点,具体如下:

a、依次打开汇编生成的代码文本文件,并按照特定模板进行文本解析;

b、将每个文件中类里面的每个方法名,方法签名,方法实现作为一条数据记录,并抽象成拓扑结构的一个节点。

进一步的技术方案是,所述方法名和方法签名组合成每个节点的唯一标识。

进一步的技术方案是,所述步骤三、对每个方法中的方法调用代码进行分析,找到调用的方法,并在拓扑图中建立关联,具体如下:

a、对步骤二中b步骤中生成的每个数据节点的方法实现中查找出该方法实现的所有方法调用;

b、每个方法调用也由方法名和方法签名构成,且一定有一个节点的唯一标识和该方法调用相同,通过每个结节中的方法调用连接到标识符和方法调用相同的其它节点,关联形成拓扑图中节点。

进一步的技术方案是,步骤四中,图形绘制是通过操作系统的绘图接口(windows的gdi,dx,linux的kde,gnome,android的画布canvas)或者浏览器接口在计算机显示器上将步骤3b中的拓扑图渲染出来。

进一步的技术方案是,步骤五、将拓扑图中每个节点图元增加鼠标点击事件处理函数,或者在浏览器下是html的超链接,直接链接到汇编文件行号。

进一步的技术方案是,如果是事件处理函数,当用户点击鼠标时,让程序直接打开节点所对应的文件所在的行号。

与现有技术相比,本发明的有益效果是:对java的class文件反编译字节码实现自动逻辑分析并生成函数关系调用图,并以图形的方式呈现给开发人员,让开发人员通过点击图上的函数图形符号就能跳转到对应函数字节码并分析和阅读。

附图说明

图1为本发明的流程图。

图2为本发明步骤二中进行文本解析的模版示例之一。

图3为本发明步骤三中由方法名和方法签名构成的拓扑图示例之一。

图4为本发明步骤五中渲染图示例之一。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

图1-图4示出了以下各实施例

实施例1:

一种查看java字节码时显示方法调用关系图的方法,包括以下步骤一、对jar文件进行解压,对其中的class文件进行反汇编,生成对应的代码文本文件;

步骤二、对代码文本文件进行文本分析,解析出所有类中的所有方法,并将每个方法设定为一个拓扑结构中的节点;

步骤三、对每个方法中的方法调用代码进行分析,找到调用的方法,并在拓扑图中建立关联;

步骤四、根据拓扑图,将每个节点在图像中用统一的图形绘制,并用带箭头的线段连接节点,因为方法中可以有多个地方调用其它方法,所以一个结节可以有多少箭头连接其它节点;

步骤五、在图像中为每个节点图形加入鼠标点击触发事件处理函数,当用户点击图形时,处理函数自动打开方法所在的文件并跳到方法定义对应的行号。

实施例2:

本实施例相较于实施例1,区别是所述步骤一中、对jar文件进行解压,对其中的class文件进行反汇编,生成对应的代码文本文件,具体方法如下:

a、程序中使用开源zip库对待反编译的jar文件解压,并将内容放入一个目录;

b、实现文件扫描目录中所有后缀名为class的java字节码文件;

c、依次对每个字节码class文件使用javap命令反汇编生成汇编代码并将代码保存到class文件所在位置并取统一的文件后缀名。

实施例3:

本实施例相较于实施例2,区别是步骤二、对代码文本文件进行文本分析,解析出所有类中的所有方法,并将每个方法设定为一个拓扑结构中的节点,具体如下:

a、依次打开汇编生成的代码文本文件,并按照特定模板进行文本解析;

b、将每个文件中类里面的每个方法名,方法签名,方法实现作为一条数据记录,并抽象成拓扑结构的一个节点。

作为实施例3的一优选方案,,所述方法名和方法签名组合成每个节点的唯一标识。

实施例4:

本实施例相较于实施例2,区别是步骤三、对每个方法中的方法调用代码进行分析,找到调用的方法,并在拓扑图中建立关联,具体如下:

a、对步骤二中b步骤中生成的每个数据节点的方法实现中查找出该方法实现的所有方法调用;

b、每个方法调用也由方法名和方法签名构成,且一定有一个节点的唯一标识和该方法调用相同,通过每个结节中的方法调用连接到标识符和方法调用相同的其它节点,关联形成拓扑图中节点。

实施例5:

本实施例相较于实施例1,区别是,步骤四中,图形绘制是通过操作系统的绘图接口(windows的gdi,dx,linux的kde,gnome,android的画布canvas)或者浏览器接口在计算机显示器上将步骤3b中的拓扑图渲染出来。

实施例6:

本实施例相较于实施例1,区别是步骤五、将拓扑图中每个节点图元增加鼠标点击事件处理函数,或者在浏览器下是html的超链接,直接链接到汇编文件行号。

作为实施例6的一优选方案,如果是事件处理函数,当用户点击鼠标时,让程序直接打开节点所对应的文件所在的行号。

本发明的最佳实施例是:

一种查看java字节码时显示方法调用关系图的方法,包括以下步骤一、对jar文件进行解压,对其中的class文件进行反汇编,生成对应的代码文本文件;

a、程序中使用开源zip库对待反编译的jar文件解压,并将内容放入一个目录;

b、实现文件扫描目录中所有后缀名为class的java字节码文件;

c、依次对每个字节码class文件使用javap命令反汇编生成汇编代码并将代码保存到class文件所在位置并取统一的文件后缀名;

步骤二、对代码文本文件进行文本分析,解析出所有类中的所有方法,并将每个方法设定为一个拓扑结构中的节点;

a、依次打开汇编生成的代码文本文件,并按照特定模板进行文本解析;

b、将每个文件中类里面的每个方法名,方法签名,方法实现作为一条数据记录,并抽象成拓扑结构的一个节点,所述方法名和方法签名组合成每个节点的唯一标识;

步骤三、对每个方法中的方法调用代码进行分析,找到调用的方法,并在拓扑图中建立关联;

a、对步骤二中b步骤中生成的每个数据节点的方法实现中查找出该方法实现的所有方法

调用;

b、每个方法调用也由方法名和方法签名构成,且一定有一个节点的唯一标识和该方法调用相同,通过每个结节中的方法调用连接到标识符和方法调用相同的其它节点,关联形成拓扑图中节点;

步骤四、根据拓扑图,将每个节点在图像中用统一的图形绘制,并用带箭头的线段连接节点,因为方法中可以有多个地方调用其它方法,所以一个结节可以有多少箭头连接其它节点;

所述图形绘制是通过操作系统的绘图接口或者浏览器接口在计算机显示器上将步骤3b中的拓扑图渲染出来;

步骤五、在图像中为每个节点图形加入鼠标点击触发事件处理函数,当用户点击图形时,处理函数自动打开方法所在的文件并跳到方法定义对应的行号;如果是事件处理函数,当用户点击鼠标时,让程序直接打开节点所对应的文件所在的行号。

尽管这里参照本发明的多个解释性实施例对本发明进行了描述,但是,应该理解,本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申请公开的原则范围和精神之内。更具体地说,在本申请公开、附图和权利要求的范围内,可以对主题组合布局的组成部件和/或布局进行多种变型和改进。除了对组成部件和/或布局进行的变形和改进外,对于本领域技术人员来说,其他的用途也将是明显的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1